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
parent 4bb60cb500
commit 1f4fd0fd04

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