tilemaker icon indicating copy to clipboard operation
tilemaker copied to clipboard

self intersecting polygons reported when processing shapefile

Open dieterdreist opened this issue 2 years ago • 5 comments

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

dieterdreist avatar Mar 30 '22 12:03 dieterdreist

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.

systemed avatar Mar 30 '22 14:03 systemed

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

dieterdreist avatar Apr 05 '22 09:04 dieterdreist

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

systemed avatar Apr 05 '22 10:04 systemed

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.

dieterdreist avatar Apr 05 '22 11:04 dieterdreist

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.

systemed avatar Oct 03 '22 09:10 systemed