На данный момент инструмент Shapely дал результат результат очень похожий, но он все еще не идеален, потому что граничные многоугольники не выравниваются плавно (см. первое изображение).
Я предполагаю, что мне нужно использовать какую-то функцию сглаживания или интерполяции, чтобы отсортировать его. , но я не могу найти тот, который работает.
код, который у меня есть:
Код: Выделить всё
from shapely.geometry import shape, mapping
from shapely.ops import transform
from shapely.validation import make_valid
import fiona
import pyproj
# Define the projections
project_to_utm = pyproj.Transformer.from_crs("EPSG:4326", "EPSG:32633", always_xy=True).transform
project_to_wgs84 = pyproj.Transformer.from_crs("EPSG:32633", "EPSG:4326", always_xy=True).transform
# Open your shapefile
with fiona.open(r"shapefile.shp", 'r') as source:
schema = source.schema
crs = source.crs
features = list(source)
# Reproject to UTM, simplify, then reproject back to WGS84
simplified_features = []
for feature in features:
# Reproject to UTM
geom = shape(feature['geometry'])
geom_utm = transform(project_to_utm, geom)
# Simplify in UTM
simplified_geom_utm = geom_utm.simplify(tolerance=0.5, preserve_topology=True)
# Fix any invalid geometries (self-intersections)
if not simplified_geom_utm.is_valid:
simplified_geom_utm = make_valid(simplified_geom_utm)
# Reproject back to WGS84
simplified_geom_wgs84 = transform(project_to_wgs84, simplified_geom_utm)
# Append the simplified and validated geometry
simplified_features.append({
'geometry': mapping(simplified_geom_wgs84),
'properties': feature['properties']
})
# Save the simplified polygons to a new shapefile
with fiona.open(r"shapfile_simplified.shp", 'w', driver='ESRI Shapefile', schema=schema, crs=crs) as output:
for feature in simplified_features:
output.write(feature)



Подробнее здесь: https://stackoverflow.com/questions/789 ... -in-python