¿Disolver / agregar polígonos con ogr2ogr o gpc?


16

Tengo una gran cantidad de polígonos que representan los límites de los condados de EE. UU. Que necesito fusionar en la menor cantidad posible de polígonos.

¿Es posible hacer esto con software no comercial o software de un precio razonable?

PostGIS no está disponible, ni Java, pero C sí.


OpenSourceSoftware puede hacer muchas cosas, ¿qué necesita ... una herramienta, una biblioteca y tener un compilador de C también funciona en qué entorno / sistema operativo?
huckfinn 01 de

descargue qgis de www.qgis.org
Antonio Locandro

@huckfinn: estoy en CentOS, y una herramienta de línea de comandos o una biblioteca Perl-XS o C sería ideal, gracias por preguntar. Mi fuente de datos está en ESRI Shapefiles, aunque tengo copias de los polígonos en MySQL. Tengo ogr2ogr pero no el dialecto MySQL.
LeeGee

Supongo que el gpctítulo al que se hace referencia es GPC - Biblioteca General Polygon Clipper de la Universidad de Manchester
matt wilkie

Respuestas:


31

Con ogr2ogr(GDAL> = 1.10 con soporte SpatiaLite):

ogr2ogr output.shp input.shp -dialect sqlite -sql "SELECT ST_Union(geometry), dissolve_field FROM input GROUP BY dissolve_field"

1
¿Alguna de las compilaciones de Gdal / Ogr para Windows contiene compatibilidad con Spatialite, MS4W, OSGeo4w, gisinternals, geoinformatica?
klewis 01 de

AFAIK OSGeo4W y paquetes mantenidos por Tamas Szekeres ( vbkto.dyndns.org/sdk ) con seguridad.
Antonio Falciano

1
¿Qué versión de GDAL estás usando ( gdalinfo --version)? Como solución alternativa, puede intentar crear un archivo de forma primero y luego convertirlo a KML, porque el controlador KML tiene algunas limitaciones.
Antonio Falciano

3
Tuve un demonio de tiempo determinando qué usar para "geometría", estaba obteniendo el error de ninguna columna: geometría . Todos los ejemplos similares aquí en Stack y en los documentos de referencia también usan variantes rotas como geo o the_geom . Finalmente descubrí el interruptor de -so resumen de ogrinfo : ogrinfo -so somedata.gdb my_layer_namey filtro para "Geometry Column ="
matt wilkie

3
Además, si solo quiere disolver todos los polígonos en el archivo de forma en un polígono grande, puede hacer: ogr2ogr output_dissolved.shp input.shp -dialect sqlite -sql "SELECT ST_Union (geometry) AS geometry FROM input" recuerde, si construye GDAL usted mismo, necesita tener instalado sqlite e incluir al menos sqlite y spaceialite en la configuración, es decir, banderas --with-sqlite --with-spatialite = yes o similar.
cm1

3

Si desea un acceso C ligero y puro, puede usar una combinación de shapelib de Frank Warmerdam y gpc de Alan Murta. Me parece que el manejo de DBF en el shapelib es un poco complicado, pero leer algo está bien. Para Perl, puede encontrarlos en el Repositorio CPAN en las entradas Geo :: Shapelib y Math :: Geometry :: GPC . Además de Geo :: Proj4 para la transformación de coordenadas, puede tener un acceso minimalista a las operaciones SIG. Me gusta eso.


Gracias. Lo intenté, pero parecía muy, muy lento: más de una hora para agregar 2,000 condados en un MacBookPro 4gig. Quizás es mi codificación :)
LeeGee

¿Utiliza algún tipo de indexación, bboxes superpuestos, por ejemplo?
huckfinn

No, estoy tropezando en la oscuridad, me resulta difícil encontrar referencias que no asuman que he estado haciendo esto durante años, o estoy ejecutando PostGIS.
LeeGee

Pero también puede usar Postgresql / PostGIS con todas las operaciones avanzadas de indexación, relación ... La importación de datos para la forma es muy fácil con la herramienta shp2pg. Y la sintaxis SQL no es tan difícil de aprender ...
huckfinn

PostGIS tardó unos segundos en darse cuenta, maravillosamente simple, especialmente con ogr2ogr. Pero prefiero usar GPC: he estado acumulando polígonos de archivos, cada vez que hago UNION, y me llevó horas hacer lo que PostGIS hizo en literalmente segundos, por eso digo que debe ser mi mala lectura de los documentos .
LeeGee
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.