Más

Convierta DWG multicapa en varios archivos KML o geoJSON (uno por capa)

Convierta DWG multicapa en varios archivos KML o geoJSON (uno por capa)


Tengo unos archivos DWG grandes, de 5 a 50 capas, que dibujo y geolocalizo usando AutoCAD (con algunos módulos externos). Necesito convertirlos a KML o geoJSON para que la biblioteca JS pueda cargarlos y mostrarlos en el mapa.

Usé AutoCAD para exportar mi .DWG a .DXF, luego instalé GDAL y usé ogr2ogr para convertir esos DXF en geoJSON. Funciona, pero el geoJSON generado es muy grande (más de 10 megabytes) y se carga para siempre una vez que trato de mostrarlo en un mapa de Google o un mapa de folleto.

Lo que me gustaría hacer es tener un geoJSON / KML separado para cada capa de mi archivo DWG / DXF, para poder cargar y mostrar cada capa por separado, lo que con suerte aumentaría el rendimiento.

Estoy tratando de tener un flujo de trabajo automatizado, porque como tengo muchos archivos, tomaría mucho tiempo tomar cada uno de ellos y dividir las capas manualmente.

Alguna idea ?


Terminé haciendo un script node.js que usa ogr2ogr a través de la línea de comando.

Llama a ogr2ogr a través de un proceso hijo generado para mantenerlo asincrónico.

ogr2ogr -f GeoJSON -s_srs epsg: 2154 -t_srs epsg: 4326 dest_file.json source_file.dxf

Luego lee el nuevo archivo geoJSON en un nodo, agrupa las entidades en featureCollection por nombre de capa, envuelve cada grupo en un contenedor geoJSON y escribe cada grupo envuelto en un archivo ".json" separado.

El código está disponible aquí


Debería ser bastante fácil usando DXF, ogr2ogr y el dialecto SQL de GDAL SQLite http://www.gdal.org/ogr_sql_sqlite.html.

Manifestación:

Descargue algunos datos de muestra, por ejemplo http://justcad.com/jcsample.dxf

Utilice ogrinfo con el dialecto SQLite para obtener una lista de capas:

ogrinfo -dialect SQLite -sql "seleccionar CAPA distinta de las entidades" jcsample.dxf INFO: Abrir de 'jcsample.dxf' usando el controlador 'DXF' exitosamente. Nombre de la capa: SELECCIONAR Geometría: Ninguna Recuento de características: 5 capas SRS WKT: (desconocido) Capa: Cadena (0.0) OGRFeature (SELECT): 0 Layer (String) = PAPER OGRFeature (SELECT): 1 Layer (String) = FRELEV OGRFeature ( SELECT): 2 Layer (String) = LSELEV OGRFeature (SELECT): 3 Layer (String) = RRELEV OGRFeature (SELECT): 4 Layer (String) = RSELEV

Convierta la capa "PAPEL" en GeoJSON. Asignaré epsg: 3857 como proyección ficticia porque, de lo contrario, GDAL asumiría EPSG: 4326, lo que no tendría sentido porque los valores de coordenadas en estos datos están fuera del rango válido.

ogr2ogr -f GeoJSON -a_srs epsg: 3857 -dialect SQLite -sql "seleccionar * de las entidades donde LAYER =" PAPER "" paper.json jcsample.dxf

Comprueba el resultado:

ogrinfo -ro -al paper.json INFO: Apertura de 'paper.json' usando el controlador 'GeoJSON' con éxito. Nombre de capa: OGRGeoJSON Geometría: Desconocido (cualquiera) Recuento de características: 56 Extensión: (-174.786500, -1163.622000) - (1769.214000, 204.378100) Capa SRS WKT: PROJCS ["WGS 84 / Pseudo-Mercator", GEOGCS ["WGS 84" , DATUM ["WGS_1984", SPHEROID ["WGS 84", 6378137,298.257223563, AUTHORITY ["EPSG", "7030"]], AUTHORITY ["EPSG", "6326"]], PRIMEM ["Greenwich", 0, AUTORIDAD ["EPSG", "8901"]], UNIDAD ["grado", 0.0174532925199433, AUTORIDAD ["EPSG", "9122"]], AUTORIDAD ["EPSG", "4326"]], PROYECCIÓN ["Mercator_1SP"] , PARAMETER ["central_meridian", 0], PARAMETER ["scale_factor", 1], PARAMETER ["false_easting", 0], PARAMETER ["false_northing", 0], UNIT ["meter", 1, AUTHORITY ["EPSG" , "9001"]], AXIS ["X", EAST], AXIS ["Y", NORTH], EXTENSION ["PROJ4", "+ proj = merc + a = 6378137 + b = 6378137 + lat_ts = 0.0 + lon_0 = 0. X_0 = 0.0 + y_0 = 0 + k = 1.0 + unidades = m + nadgrids = @ null + wktext + no_defs "], AUTHORITY [" EPSG "," 3857 "]] Capa: Cadena (0.0) Subclases: Cadena (0.0) ExtendedEntity: Cadena (0.0) Tipo de línea: Cadena (0.0) EntityHandle: Cadena (0.0) Texto: Cadena (0.0) OGRFeature (OGRGeo JSON): 0 Layer (String) = PAPER SubClasses (String) = (null) ExtendedEntity (String) = (null) Linetype (String) = CONTINUOUS EntityHandle (String) = (null) Text (String) = (null) LINESTRING ( 1644.348 -1051.956 0,1763.214 -1051.956 0) OGRFeature (OGRGeoJSON): 1 Layer (String) = PAPER SubClasses (String) = (null) ExtendedEntity (String) = (null) Linetype (String) = CONTINUOUS EntityHandle (String) = ( null) Text (String) = (null) LINESTRING (1644.348 -1066.961 0,1763.214 -1066.961 0) OGRFeature (OGRGeoJSON): 2 Layer (String) = PAPER SubClasses (String) = (null) ExtendedEntity (String) = (null) Tipo de línea (Cadena) = CONTINUOUS EntityHandle (Cadena) = (nulo) Texto (Cadena) = (nulo) LINESTRING (1644.348 -1081.244 0,1763.214 -1081.244 0)…

Ver el vídeo: Exportar kml-kmz desde AutoCAD Civil 3D a Google Earth