6 votos

La agregación de Cerrar los Polígonos con GDAL?

Me gustaría agregado de los polígonos que se encuentran a menos de 2 metros el uno del otro, como el Agregado de los Polígonos (Cartografía) de la herramienta en ArcMap, pero el uso de GDAL con Python.

Para añadir algún detalle en caso de que el problema puede ser abordado anteriormente en la tubería, estos polígonos creados mediante Polygonize en GDAL de PNG binario máscaras con el siguiente código:

dst_layername = blockname + "_Piles"
drv = ogr.GetDriverByName("ESRI Shapefile")
dst_ds = drv.CreateDataSource( dst_layername + ".shp" )
dst_layer = dst_ds.CreateLayer(dst_layername, srs = None )

gdal.Polygonize( srcband, None, dst_layer, -1, [], callback=None )

Para demostrar lo que quiero decir con la herramienta ArcMap, aquí están mis polígonos antes:

Before Polygon Aggregation

Y aquí están mis polígonos después de ejecutar el Agregado de los Polígonos de la herramienta:

After Polygon Aggregation

Quiero hacer este uso no ESRI herramientas que me pueden llamar desde Python. He estado usando osgeo y GDAL para mi proyecto hasta ahora.

2voto

RETAS Puntos 129

No sé si hay paquetes que haga lo que quiera en un solo comando, pero probablemente me acaba de búfer de la capa de polígono por lo que su umbral de distancia, de la unión de cualquier intersección de polígonos, a continuación, realizar un búfer negativo del mismo tamaño. Esto podría distorsionar los polígonos siempre tan ligeramente. El geopandas biblioteca tiene todas las herramientas necesarias como métodos: read_file(), buffer(), join(), y to_file() los métodos deben ser todo lo que usted necesita. También puede utilizar gdal comandos para hacer la misma cosa, pero no estoy tan familiarizado con los. Ver aquí para amortiguar un shapefile con gdal.

1voto

GreyCat Puntos 146

Como la solución sugerida por Jon, simplemente el uso de las soluciones propuestas por la Eliminación de pequeños polígonos vacíos en un buen polígono o Python bien formada - rellenar pequeños huecos entre múltiples polígonos con GeoPandas (basado en ogr) leer/escribir los shapefiles y bien formada.

enter image description here

1) Agregado cerca de los polígonos

import geopandas as gpd
from shapely.geometry import MultiPolygon, JOIN_STYLE
import itertools
eps=5 # width for dilating and eroding (buffer)
dist = 2  # threshold distance
# read the original shapefile
df = gpd.read_file('polygons.shp')
# create new result shapefile
col = ['geometry']
res = gpd.GeoDataFrame(columns=col)
# iterate over pairs of polygons in the GeoDataFrame 
for i, j in list(itertools.combinations(df.index, 2)):
 distance = df.geometry.ix[i].distance( df.geometry.ix[j]) # distance between polygons i and j in the shapefile
 if distance < dist: 
     e = MultiPolygon([ df.geometry.ix[i],df.geometry.ix[j]])
     fx = e.buffer(eps, 1, join_style=JOIN_STYLE.mitre).buffer(-eps, 1, join_style=JOIN_STYLE.mitre)
     res = res.append({'geometry':fx},ignore_index=True)

# save the resulting shapefile   
res.to_file("aggregates.shp")

enter image description here

2) es fácil completar la secuencia de comandos para incluir el resto de polígonos.

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X