Упростите шейп-файл Polygon, чтобы уменьшить размер файла в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Упростите шейп-файл Polygon, чтобы уменьшить размер файла в Python

Сообщение Anonymous »

У меня есть шейп-файл многоугольника, векторизованный из растрового слоя (второе изображение). Этот шейп-файл содержит тысячи объектов всего с одним столбцом, который представляет уровень полигона (в диапазоне от 1 до 5). Размер файла огромен, поэтому я попытался использовать инструмент упрощения Shapely, чтобы уменьшить размер файла. Цель состоит в том, чтобы получить результат, аналогичный результату инструмента упрощения полигонов ArcGIS pro, который выглядит великолепно и уменьшает размер файла на 80 % (третье изображение).
На данный момент инструмент 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»