Force polygons into validity during GIS import.

Not sure why, but some polygons become invalid (which usually means a
self-intersecting "polygon", such as two triangles that meet at a point)
during this transformation. Shapely includes a tool to reshape polygons
into validity, so use that.
This commit is contained in:
Dan Albert 2023-05-30 23:14:56 -07:00 committed by Raffson
parent 5600257442
commit df922e9ca7
No known key found for this signature in database
GPG Key ID: B0402B2C9B764D99

View File

@ -8,6 +8,7 @@ from pathlib import Path
from pyproj import CRS, Transformer from pyproj import CRS, Transformer
from shapefile import Reader, Shape from shapefile import Reader, Shape
from shapely import validation
from shapely.geometry import LineString, MultiPolygon, Polygon, shape from shapely.geometry import LineString, MultiPolygon, Polygon, shape
from shapely.ops import unary_union from shapely.ops import unary_union
@ -46,11 +47,13 @@ class CoordinateConverter:
for poly in polys: for poly in polys:
for boundary, holes in self._boundary_and_holes_of(poly): for boundary, holes in self._boundary_and_holes_of(poly):
new_polys.append( new_polys.append(
Polygon( validation.make_valid(
self._convert_line_to_dcs_coords(boundary), Polygon(
holes=[ self._convert_line_to_dcs_coords(boundary),
self._convert_line_to_dcs_coords(hole) for hole in holes holes=[
], self._convert_line_to_dcs_coords(hole) for hole in holes
],
)
) )
) )
return new_polys return new_polys