5 votos

OGR fusión shapefiles de geom diferente tipo en una sola colección de característica GeoJSON

Me gustaría combinar los shapefiles de diferentes tipos de geometría en una sola geojson característica de la colección, pero OGR dice que no es compatible actualización de GeoJSON archivos:

$ ogr2ogr -f GeoJSON -t_srs crs:84 -lco GEOMETRY_AS_COLLECTION merge.geojson points.shp
$ ogr2ogr -f GeoJSON -t_srs crs:84 -update -append merge.geojson -lco GEOMETRY_AS_COLLECTION lines.shp -nln merged
ERROR 4: GeoJSON Driver doesn't support update.
FAILURE:
Unable to open existing output datasource `merge.geojson'.

Esto parece un caso de uso habitual para mí. Me estoy perdiendo algo que es obvio en el ogr2ogr manual? Puedo armar algo en python (y, finalmente, el uso de fiona), pero estoy bastante sorprendido de que yo no veo nada existentes al buscar aquí o github... que me hace cosa de la que me voy a estropear algo.

gracias!

0voto

Chris Tybur Puntos 1269

Una modificación de fiona del dumpgj para manejar múltiples entradas parecía ser el camino a seguir.

http://toblerity.org/fiona/manual.html#dumpgj

Empecé - y estaba aprendiendo cosas - pero entonces recordó que topojson acepta varias entradas y parece que funciona.

https://github.com/mbostock/topojson/wiki/Command-Line-Reference

0voto

Nikola Puntos 21

Afortunadamente, OGR objetos de modelo no permite tener geometrías de diferentes tipos en una sola capa en una capa heterogénea.

Fuente: http://www.gdal.org/ogr/drv_geojson.html

Por ejemplo, si tenemos tres archivos de diferentes tipos de geometría (points.shp, lines.shp y polygons.shp) se puede definir la unión de la capa de uso de la OGR VRT conductor especificando su tipo de geometría como wkbGeometryCollection. Así que podemos escribir el siguiente archivo VRT, denominado decir, merge.vrt:

<OGRVRTDataSource>
    <OGRVRTUnionLayer name="union">
        <OGRVRTLayer name="points">
            <SrcDataSource>points.shp</SrcDataSource>
        </OGRVRTLayer>
        <OGRVRTLayer name="lines">
            <SrcDataSource>lines.shp</SrcDataSource>
        </OGRVRTLayer>
        <OGRVRTLayer name="polygons">
            <SrcDataSource>polygons.shp</SrcDataSource>
        </OGRVRTLayer>
        <GeometryType>wkbGeometryCollection</GeometryType>
    </OGRVRTUnionLayer>
</OGRVRTDataSource>

Entonces, se puede convertir fácilmente merge.vrt a merge.geojson, la preservación de todos los atributos de las capas de origen, basta con ejecutar:

ogr2ogr -f GeoJSON merge.geojson merge.vrt

Por último, puede verificar si la conversión se realiza con éxito:

ogrinfo merge.geojson OGRGeoJSON

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