8 votos

Python: Cómo exportar objetos Shapely a un archivo DXF

Utilizando shapely paquete para Python cómo exportar los objetos con forma resultantes, como buffer a un DXF ¿archivo?

10voto

Antonio Haley Puntos 2588

Por cierto, si aprecia Shapely, también puede apreciar Fiona . El ejemplo de Fiona en https://gist.github.com/1886782 podría adaptarse para convertir un shapefile en DXF.

with fiona.collection("file.shp", "r") as source:

    with fiona.collection(
            "file.dxf",
            "w",
            driver="DXF",
            schema=source.schema,
            ) as sink:

        # Do whatever you like to records
        results = some_function(source)

        sink.writerecords(results)

Tose un montón de advertencias sobre la falta de coincidencia entre los modelos de características simples del SIG y los datos DXF, pero escribe un archivo de entidades.

1 votos

Gracias por presentar Fiona y también gracias por su interesante paquete Shapely . Seguramente estáis haciendo un buen trabajo.

0 votos

@sgillies Eso es impresionante. Si necesitas más colaboradores, ¡dame un toque! Además, ¿hay planes para GDAL?

0 votos

Por cierto, ¿hay alguna versión precompilada para Windows (Python 2.72) de Fiona ?

8voto

ESV Puntos 4591

Shapely no soporta directamente la exportación a DXF - soporta la exportación a Well Known Text (WKT), Well Known Binary (WKB), Numpy arrays y GeoJSON objetos ( interoperación del manual de Shapely). Por lo tanto, necesita un paquete que pueda transformar de uno de estos formatos a DXF.

Yo sugeriría OGR como el camino a seguir para mi dinero. El método más fácil sería simplemente exportar sus geometrías de forma a un archivo GeoJSON a través de Python utilizando shapely.geometry.mapping(obj) Por ejemplo

from shapely.geometry import mapping
import json
open("buffer.geojson", "wb").write(json.dumps(mapping(buffer_obj)))

A continuación, basta con utilizar el ogr2ogr para transformar el GeoJSON en un archivo DXF, por ejemplo

ogr2ogr -f DXF buffer.dxf buffer.geojson

Luego, si te apetece, puedes buscar el Enlaces GDAL/OGR Python y hacerlo dentro de un único script. ¡Espero que esto ayude!

0 votos

Muchas gracias. Has dado muchas ideas que son muy útiles. Me gustaría probar OGR a través de Python. Esta es una buena respuesta.

1 votos

Como se explica en gis.stackexchange.com/a/7744/390 hay un desajuste entre los formatos GeoJSON y DXF. Parece que querrás tener una plantilla DXF en la que meter tus líneas.

1 votos

Solo mencionar que en la ejecución del código proporcionado sale un error: "write requires string/buffer". Así que lo cambié como: write(str(mapping(buffer_obj))) y ahora está bien. Uso Python 2.72 por cierto.

1voto

Burt Beckwith Puntos 46122

Puedes hacerlo usando Geopandas y las librerías Fiona Aquí está el código para leer un archivo usando Geopandas y exportarlo como un archivo DXF.

import geopandas as gpd
from geopandas import GeoDataFrame
import fiona

#Read file using geopandas
x = gpd.read_file(filename with path)

#Save as DXF
x.geometry.to_file(output file name, driver="DXF")

Además, consulta la respuesta en el siguiente enlace. https://gis.stackexchange.com/a/377412/160313

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