查找位于一组坐标内的点


9

我有一个PostGIS数据库,我想找到某个区域(边界框)内的点。我有两组坐标,从中可以获得构成该框的所有四个矩形点(如果需要)。我有问题的数据列名为“ point”,它也是point类型。

  • 无论如何,是否可以指定四组坐标(纬度/经度)并获取位于框中的所有点。
  • 或指定两个点,让数据库计算出矩形的角,然后在

以防万一我不清楚我想要实现什么。如果我有经度和长字段而不是点,则与“ vanilla” sql等效:

SELECT * FROM myTable where lat> xMin AND lat < xMax AND long > yMin and long < yMax

更新的编辑:

我正在尝试Underdark的解决方案。起初我没有ST_MakePoint构造函数(现在我有),但仍然遇到非常相似的错误(只是在另一个字符上)。

SELECT * FROM myTable WHERE ST_Within(ST_MakePoint(point),GeometryFromText('POLYGON((75 20,80 30,90 22,85 10,75 20))',4326))

我收到此错误:

ERROR:  function st_makepoint(point) does not exist
LINE 1: SELECT * FROM triples WHERE ST_Within(ST_MakePoint(point),Ge...
                                          ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.


********** Error **********

ERROR: function st_makepoint(point) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 39

编辑:

在短期内,我可以通过以下方法解决它:

SELECT * FROM triples WHERE box '((point1),(point2))' @> point

但是我将不得不弄清楚为什么没有PostGIS功能对我不起作用。


首选方法是仅在一个地方过帐。如果该地点不合适或无法解决,则可以轻松迁移。我将不采取任何行动,因为GIS是您的问题所在,但我敦促您删除SO上的交叉报道。
ub

1
@whuber ..完成了。
Ankur

-选择GeometryFromText('POLYGON((75 20,80 30,90 22,85 10,75 20))',4326)是否有效?
肖恩

我不确定你的意思。我尝试了您所说内容的各种不同变体,但都没用
Ankur

您在ST_MakePoint(point)中引用的“点”列是什么
深色

Answers:


9
SELECT * FROM myTable WHERE 
ST_Within(the_geom, GeometryFromText ('POLYGON((75 20,80 30,90 22,85 10,75 20))', 4326))

<-根据需要替换坐标


对于这个愚蠢的问题感到抱歉,但是'the_geom'是什么...我应该为SELECT * FROM myTable查询加上别名,并且该值是否变为'the_geom'–
Ankur

抱歉,当然是要搜索的列。我会称它为db_column或类似的名称,但postgis文档认为并非如此……当您知道它是什么时,它才有意义。
Ankur

1
当我运行此命令时,出现一个错误,提示GeometryFromText不存在。我正在使用postgis 2.0。我也尝试过st_geomfromtext。
picardo 2014年

@underdark也许我错了,但似乎缺少括号。
Davide Pastore 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.