OpenStreetMaps verileriyle çalışıyorum. Osmosis tarafından Postgis 2.2 ile Postgres 9.4'e yüklendi, ways
tablosu için inşa edilen linestrings geometrileri.Geçersiz linestrings bölgesinden alan nasıl oluşturulur (veya hata önlenir)
Belirli relations
'dan çokgenler yapmak istiyorum (ilişki OSM'de, yol dışsal ve içsel olarak işaretlenmiş, bazıları kapalı olarak işaretlenmiş - birden fazla yol dış yüzeyi temsil edebilir) . Ancak OSM verileri mükemmel değil - iç halkaların dış halka ile kesiştiği kötü biçimlendirilmiş ilişkiler var. Örneğin: http://www.openstreetmap.org/relation/6095901#map=17/48.93209/19.14858
ben bu sorguyu
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
çalışıyorum ve sonuç hatadır:
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
Yani, seçeneklerim burada nelerdir? İdeal olarak, bir şekilde "bunu düzeltmek" isterim - sorunlu "delikleri" göz ardı edersiniz ya da dış halka sınırına "klips" diyeyim.
Mümkünse, sorguyu "atla" yapmak istiyorum. NULL geometri) Bu gibi geçersiz ilişkiler için ve sonuçsuz ilk hatada ölmez.
EDIT: Orijinal örnek vaka OSM verilerinde düzeltildi. İşte yeni örnek: ilişki ID 5636774 kendiliğinden kesişen çok kutuplu
Geçersiz geoms için ST_MakeValid (geom) işlevini kullanabilirsiniz. –