我有一个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
@whuber ..完成了。
—
Ankur
-选择GeometryFromText('POLYGON((75 20,80 30,90 22,85 10,75 20))',4326)是否有效?
—
肖恩
我不确定你的意思。我尝试了您所说内容的各种不同变体,但都没用
—
Ankur
您在ST_MakePoint(point)中引用的“点”列是什么
—
深色