bla*_*ake 2 postgresql postgis geospatial leaflet
请参阅丝网印刷。
我在 Postgis 中运行了一个空间查询,以返回地图上的点所在的选区(区域)。该查询使用ST_within该点位于多边形内的函数。
正如您从打印中看到的,该点实际上并不在 York Outer 的多边形区域“内”,尽管从技术上讲您可能会说它在其中“内部”,或者至少 Postgis 是这么认为的。重点实际上在于约克中心。
我确信 Postgis 实际上会返回两者,但由于我只从游标中获取第一条记录,这就是我所看到的。
一个点一次只能位于一个选区,并且此查询返回了错误的选区,或者更确切地说,我向数据库提出了错误的问题。
我应该使用哪个函数来确保我始终返回正确的区域,该区域可能具有中空内部或形状奇怪?
谢谢
菲尔
这应该像你所描述的那样工作。也许数据有问题?您能否提供带有多边形/点数据的小型复制品?
此外,此类问题的一个常见原因是 GIS 数据无效。您可以使用PostGIS的功能检查多边形形状ST_IsValid。如果数据无效,不同的工具可能会以不同的方式解释它,并且 GIS 数据的绘制方式可能与 PostGIS 认为该数据表示的内容不匹配,从而导致更多混乱。
这是一个简单的重现,显示它按照您期望的方式工作,外部多边形孔内的点仅是st_within内部多边形,而不是外部多边形:
select st_astext(point), name
from
(select
'outer' as name,
st_geomfromtext('polygon((0 0, 30 0, 30 30, 0 30, 0 0), (10 10, 20 10, 20 20, 10 20, 10 10))') g
union all
select
'inner' as name,
st_geomfromtext('polygon((10 10, 20 10, 20 20, 10 20, 10 10))') g
) shapes
cross join
(select st_geomfromtext('point(15 15)') point
union all
select st_geomfromtext('point(5 5)') point
) points
where st_within(point, g)
Run Code Online (Sandbox Code Playgroud)
我的结果是
1 POINT(5 5) outer
2 POINT(15 15) inner
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1258 次 |
| 最近记录: |