systemed / tilemaker

Make OpenStreetMap vector tiles without the stack
https://tilemaker.org/
Other
1.49k stars 231 forks source link

self intersecting polygons reported when processing shapefile #403

Open dieterdreist opened 2 years ago

dieterdreist commented 2 years ago

I am using the land polygons from natural earth and get self intersections reported, however when I analyse the source geometry in QGIS it seems to be valid. I thought this could be coming from the simplification, but even if it is turned off it still reports the problem: layer config

"land":             { "minzoom": 0,  "maxzoom": 8, "source": "ne_data/ne_10m_land/ne_10m_land.shp"},
"landcp":             { "minzoom": 0,  "maxzoom": 8, "source": "ne_data/ne_10m_land/ne_10m_land.shp", "simplify_below": 8, "simplify_level": 0.0001, "simplify_ratio": 2 },

output:

Bounding box -180, -85.06, 180, 85.06
Reading .shp land
Shapefile entity #0 type 5 is invalid. Parts:98. Reason:Geometry has invalid self-intersections. A self-intersection point was found at (-159.369, -180); method: m; operations: i/x; segment IDs {source, multi, ring, segment}: {0, 0, -1, 7989}/{0, 0, -1, 8119}... failed to correct. Reason: Multi-polygon has intersecting interiors
Shapefile entity #6 type 5 is invalid. Parts:69. Reason:Geometry has invalid self-intersections. A self-intersection point was found at (165.088, -21.8912); method: i; operations: i/u; segment IDs {source, multi, ring, segment}: {0, 56, -1, 280}/{0, 56, -1, 282}... failed to correct. Reason: Geometry has invalid self-intersections. A self-intersection point was found at (165.088, -21.8912); method: i; operations: i/u; segment IDs {source, multi, ring, segment}: {0, 56, -1, 280}/{0, 56, -1, 282}
Reading .shp landcp
Shapefile entity #0 type 5 is invalid. Parts:98. Reason:Geometry has invalid self-intersections. A self-intersection point was found at (-159.369, -180); method: m; operations: i/x; segment IDs {source, multi, ring, segment}: {0, 0, -1, 7989}/{0, 0, -1, 8119}... failed to correct. Reason: Multi-polygon has intersecting interiors
Shapefile entity #6 type 5 is invalid. Parts:69. Reason:Geometry has invalid self-intersections. A self-intersection point was found at (165.088, -21.8912); method: i; operations: i/u; segment IDs {source, multi, ring, segment}: {0, 56, -1, 280}/{0, 56, -1, 282}... failed to correct. Reason: Geometry has invalid self-intersections. A self-intersection point was found at (165.088, -21.8912); method: i; operations: i/u; segment IDs {source, multi, ring, segment}: {0, 56, -1, 280}/{0, 56, -1, 282}

input file: https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/physical/ne_10m_land.zip

systemed commented 2 years ago

Could be reprojection artefacts, or a difference in validity tests between JTS/GEOS (as used by QGIS) and Boost.Geometry (as used by tilemaker). They're only warnings - you can safely ignore them, but if you find any land polygons disappearing as a result then do lodge an issue.

dieterdreist commented 2 years ago

I just found land polygons disappearing here (zooming in): Screenshot 2022-04-05 at 11 47 02

Screenshot 2022-04-05 at 11 46 52

Screenshot 2022-04-05 at 11 46 41 Screenshot 2022-04-05 at 11 46 28

zooming close: Screenshot 2022-04-05 at 11 50 34

systemed commented 2 years ago

Thanks. I'm not going to have a chance to look at this immediately but that's helpful.

dieterdreist commented 2 years ago

for completeness, this is the config line for the land polygons: "land": { "minzoom": 0, "maxzoom": 8, "source": "ne_data/ne_10m_land/ne_10m_land.shp", "simplify_below": 8, "simplify_level": 0.0001, "simplify_ratio": 2 }, as you can see I only created tiles to zoom 8, and did not simplify the z8 tiles, so what you see above is likely coming from reprojection as you suggested.

systemed commented 2 years ago

There have been a few changes recently that might fix this - I haven't tried it out with this dataset but you might want to have a look.