标签: postgis

使用PostGIS查找给定Point的n个最近邻居?

我试图解决使用PostGIS找到n个最近邻居的问题:

初始点:

  • 包含纬度/经度的地理名称(来自geonames.org)的表格地名(WSG-84)
  • 添加了一个GeometryColumn geom,其中srid = 4326,数据类型= POINT
  • 填充的geom值:UPDATE geoname SET geom = ST_SetSRID(ST_Point(经度,纬度),4326);
  • 创建geom的GIST索引(CREATE INDEX geom_index ON geoname USING GIST(geom);)/ Clustered geom_index:CLUSTER geom_index ON geoname;)
  • 为geonameid创建了PRIMARY KEY UNIQUE BTREE索引

问题:在由id(geoname.geonameid)表示的表geoname中找到给定Point的n个(例如5个)最近邻居.

可能的方法:

http://www.bostongis.com/PrinterFriendly.aspx?content_name=postgis_nearest_neighbor的启发,我尝试了以下查询:

"SELECT start.asciiname, ende.asciiname, distance_sphere(start.geom, ende.geom) as distance " +
"FROM geoname As start, geoname As ende WHERE start.geonameid = 2950159 AND start.geonameid <> ende.geonameid " +
"AND ST_DWithin(start.geom, ende.geom, 300) order by distance limit 5"
Run Code Online (Sandbox Code Playgroud)

处理时间:约60秒

还尝试了一种基于EXPAND的方法:

"SELECT start.asciiname, ende.asciiname, distance_sphere(start.geom, ende.geom) as distance " …
Run Code Online (Sandbox Code Playgroud)

sql postgresql postgis

22
推荐指数
2
解决办法
2万
查看次数

如何更改几何列的SRID?

我有一个表,其中一列是the_geom具有SRID的多边形的几何列.我在同一个表中添加了一个新列,其中几何数据完全相同the_geom.

这个新列有名称,the_geom4258因为我想将其SRID设置为4258.将几何的SRID更改为另一个坐标系的步骤是什么?是否足以应用以下查询:

UPDATE table SET the_geom4258=ST_SetSRID(the_geom4258,4258);
Run Code Online (Sandbox Code Playgroud)

postgresql postgis

21
推荐指数
1
解决办法
3万
查看次数

Postgis中的2个点之间的距离,以43米为单位的srid 4326

这可能是一个简单的问题,但我不是很擅长PostGIS,也没有完全理解这一切.

基本上我有一个nodes带有POINT列(point)的table ().我在这个专栏上创建了一个索引

create index nodes__points on nodes using gist (point)
Run Code Online (Sandbox Code Playgroud)

该列是用.创建的

select addgeometrycolumn('nodes', 'points', 'POINT', 4326, 2)
Run Code Online (Sandbox Code Playgroud)

我正在使用srid 4326,因为我正在添加形式(纬度,经度)的数据.(即爱尔兰都柏林的位置= 53.353 lon = -6.264(我已加入GeomFromText('POINT(-6.264 53.535)'))的坐标系).

对于每个点,我想找到大致在1km框内的所有点,以该点为中心(所以selcet a.id, count(*) from nodes as a, nodes as b where SOME_DISTANCE_FUNCTION_HERE(a.point, b.point, 1000) group by a.id;.它不一定是精确的,只是一个粗略的人文数字.1km的bbox很好,1km的圆圈很好它不一定是1公里,只是那个数量级.

ST_Distance/ ST_DWithin的/ etc.所有都使用SRID的单位,4326/WGS64是度(因此1 = 1度的纬度/经度).但我想用米.

我试过ST_distance_sphere并且st_dwithin可以使用米,但如果我这样做,则explain显示索引未被使用.

我怎样才能大致得到我想要的东西,使用地理索引?

更新:这是在PostgreSQL 9.1和PostGIS 2.0 svn构建上.

gis postgresql postgis geospatial

20
推荐指数
2
解决办法
2万
查看次数

如何将PostGIS添加到PostgreSQL pgAdmin?

我已经安装了PostgreSQL和pgAdmin,但我想添加一个PostGIS服务器,这样我就可以开展地理信息系统项目.

我正在学习本教程,该教程假设已经设置了PostGIS.在本教程的上一页中,它指示您下载包含PostgreSQL和pgAdmin的软件包.我已经安装了这些,所以我想添加,PostGIS但我没有看到任何方法这样做.

有任何想法吗?

pgAdmin截图

postgresql postgis pgadmin

20
推荐指数
3
解决办法
3万
查看次数

在Spring Boot上使用Hibernate映射PostGIS几何点字段

在我的PostgreSQL 9.3 + PostGIS 2.1.5中,我有一个PLACE包含coordinates类型列的表Geometry(Point,26910).

我想Place在我的Spring Boot 1.1.9 Web应用程序中将它映射到实体,该应用程序使用Hibernate 4.0.0 +.Place可以使用REST存储库.

不幸的是,当我GET http://localhost:8080/mywebapp/places收到这个奇怪的JSON响应时:

{

  "_embedded" : {

    "venues" : [ {

      "id" : 1,

      "coordinates" : {

        "envelope" : {

          "envelope" : {

            "envelope" : {

              "envelope" : {

                "envelope" : {

                  "envelope" : {

                    "envelope" : {

                      "envelope" : {

                        "envelope" : {

                          "envelope" : {

                            "envelope" : {

                              "envelope" : {

                                "envelope" : { …
Run Code Online (Sandbox Code Playgroud)

postgresql spring hibernate postgis spring-boot

20
推荐指数
2
解决办法
1万
查看次数

更改LC_CTYPE以使用PostgreSQL和PostGIS

所以我正在浏览GeoDjango教程并且我坚持这个错误消息:

postgres@lucid32:~$ createdb -E UTF8 template_postgis
createdb: database creation failed: ERROR:  encoding UTF8 does not match locale en_US
DETAIL:  The chosen LC_CTYPE setting requires encoding LATIN1.
Run Code Online (Sandbox Code Playgroud)

我用Google搜索并阅读了一些Ubuntu文档,但无济于事.任何见解将不胜感激!

我正在使用默认的Vagrant Box清晰32,用于测试我的设置.

postgresql locale postgis geodjango

19
推荐指数
3
解决办法
2万
查看次数

PostGIS - 将多面转换为单个多边形

是否可以在PostGIS中将包含多边形的形状文件导入单个多边形?每当我尝试导入多边形的形状文件时,它都会在geom列中存储为多面(而不是单个多边形).因此,我无法将其从多面体中提取为单个多边形值.

所有有用的建议非常感谢

postgresql postgis geoserver

19
推荐指数
2
解决办法
3万
查看次数

如何在Sequelize ORM中插入PostGIS GEOMETRY Point?

我试图在Sequelize.js ORM中具有几何列的表中插入一行.我有纬度,经度和海拔,需要先将它转换为一个点,这样我就可以将它作为几何体插入.

执行转换的PostGIS存储过程是

ST_MakePoint( longitude, latitude, altitude ) 
Run Code Online (Sandbox Code Playgroud)

要插入一行我正在使用sequelize model.create函数

models.Data.create({    
  location: "ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")", // PSUEDO code, How can I call this function?
  speed: request.params.spd,
  azimuth: request.params.azi,
  accuracy: request.params.acc
});
Run Code Online (Sandbox Code Playgroud)

现在我想做的是让该字段location具有返回的结果"ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")"插入行时.

我怎样才能做到这一点?

postgresql postgis node.js sequelize.js

19
推荐指数
2
解决办法
1万
查看次数

FATAL ERROR锁定文件"postmaster.pid"已存在

我最近使用Homebrew在我的Mac上安装了PostGIS(El Capitan 10.11.4,Postgres是9.5.1版),我遵循这些说明 - http://morphocode.com/how-to-install-postgis-on- MAC-OS-X /

当我尝试使用Postgres时

pg_ctl -D /usr/local/var/postgres start 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

$ FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 280) running in data directory "/usr/local/var/postgres"?
Run Code Online (Sandbox Code Playgroud)

所以我花了几个小时研究如何解决这个问题,但无济于事.

值得注意的是,我试图按照超级用户的回答中的建议杀死PID - https://superuser.com/questions/553045/fatal-lock-file-postmaster-pid-already-exists- (在上面的例子中,我跑了kill 208),但是当我再次尝试启动Postgres时,

我得到了同样的错误,尽管有不同的PID号.我看到一些人建议删除postmaster.pid文件,但我觉得我应该保存它作为最后的手段......

不可否认,我不确定如何解决这个问题的一部分原因是我不太清楚postmaster甚至是什么 - 我只是开始了解所有这些.

通过psql db_name命令跳转到Postgres数据库工作得很好,这是值得的.

postgresql postgis

19
推荐指数
7
解决办法
3万
查看次数

Postgres字符串之前的"E"是什么?

我正在阅读像这样的Postgres/PostGIS语句:

SELECT ST_AsBinary(
ST_GeomFromWKB(
  E'\\001\\001\\000\\000\\000\\321\\256B\\312O\\304Q\\300\\347\\030\\220\\275\\336%E@',
  4326
  )
);
Run Code Online (Sandbox Code Playgroud)

上面从一个众所周知的二进制文件(WKB)创建了一些东西.我没有看到这里引用的具体方法,其中字符串是单引号,E前面是引号.

这种格式叫什么?这有什么格式规则?例如,336%E@在最后特殊或只是一些二进制值?

这是Postgres9.3/9.4; PostGIS 2.1.

postgresql postgis string-literals wkb

18
推荐指数
2
解决办法
8401
查看次数