Hi,

On 02/18/11 04:35, Daniel Sabo wrote:
Makes sense. Do you do anything about touching inner rings?

No, and I haven't thought of a good way to handle it. If you have an algorithm 
that works well I'd be interested it it :).

I use the GEOS library and I test all pairs of inner rings for intersections. Then if I find a pair with an intersection, I check if that intersection is a line (rather than just a point). If it is a line, then I compute the "SymDifference" between the two and throw the result of that into the polygonizer which hopefully will be able to make one ring from it. You can look at my algorithm here

https://github.com/joto/osmium/blob/91b80cfa639b944408d25dd8e294381cf4dc3b8d/src/OsmMultipolygon.cpp

(line 702ff for the bit described above).

Also see comment on line 611ff where it will emit extra polygons for tagged inner rings - i.e. one multipolygon relation might yield more than one polygon feature on output.

All this is probably only halfway there. I'd be very interested in ideas how to fix broken multipolygons. There is some code there (line 117ff tries to repair self-intersections and 343ff tries to fill gaps in rings) but still OSM users come up with ever more invalid polygons ;)

Bye
Frederik


_______________________________________________
dev mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/dev

Reply via email to