我在玩OpenStreetMaps数据。由渗透装载到Postgres 9.4中,使用Postgis 2.2。,为ways
表构建线串几何。如何构建无效线串的区域(或防止错误)
我想要制作来自某些relations
的多边形(在OSM中,关系是一组方式(linestrings) - 一些标记为外部,一些作为内部,并非每一种方式都必须关闭 - 多种方式可以表示外部环) 。但是,OSM数据并不完美 - 存在形成严重的关系,内部“孔”与外环相交。例如:http://www.openstreetmap.org/relation/6095901#map=17/48.93209/19.14858
我想这个查询
SELECT ST_BuildArea(ST_Collect(w.linestring)) AS geom
FROM relations r
JOIN relation_members rm ON r.id = rm.relation_id AND rm.member_type = 'W'
JOIN ways w ON w.id = rm.member_id
WHERE r.id = 6095901 -- in reality here is broad condition on relation
GROUP BY r.id
,其结果是错误:
ERROR: LWGEOM_GEOS_buildArea: TopologyException: Input geom 1 is invalid: Self-intersection at or near point 19.149718131981164 48.934732947538478 at 19.149718131981164 48.934732947538478
那么,什么是我选择这里?理想情况下,我想以某种方式“修复此问题” - 也许忽略有问题的“漏洞”,或者将它们“夹”到外环边界等。
如果不行,至少我想查询“跳过” NULL几何)的像这样的无效关系,而不是死于第一个错误,没有结果。
编辑:最初的示例案例在OSM数据中得到修复。这里是一个新的例子:关系ID 5636774是自相交多面体
对于无效几何,可以使用ST_MakeValid(geom)函数。 –