Suite

Convertir des fichiers DWG multicouches en plusieurs fichiers KML ou geoJSON (un par couche)


J'ai de gros fichiers DWG, de 5 à 50 calques, que je dessine et géolocalise à l'aide d'AutoCAD (avec quelques modules externes). Je dois les convertir en KML ou geoJSON pour que la bibliothèque JS puisse les charger et les afficher sur la carte.

J'ai utilisé AutoCAD pour exporter mon .DWG en .DXF, puis j'ai installé GDAL et utilisé ogr2ogr pour convertir ces DXF en geoJSON. Cela fonctionne, mais le geoJSON généré est très volumineux (plus de 10 mégaoctets) et il se charge indéfiniment une fois que j'essaie de l'afficher dans une carte google ou une carte dépliante.

Ce que je voudrais faire, c'est avoir un geoJSON/KML séparé pour chaque couche de mon fichier DWG/DXF, afin que je puisse charger et afficher chaque couche séparément, ce qui, espérons-le, augmenterait les performances.

J'essaie d'avoir un flux de travail automatisé, car comme j'ai beaucoup de fichiers, cela prendrait trop de temps de prendre chacun d'entre eux et de diviser les couches manuellement.

Une idée ?


J'ai fini par créer un script node.js qui utilise ogr2ogr via la ligne de commande.

Il appelle ogr2ogr via un processus enfant généré pour le maintenir asynchrone.

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

Ensuite, il lit le nouveau fichier geoJSON dans un nœud, regroupe les entités dans featureCollection par nom de couche, encapsule chaque groupe dans un conteneur geoJSON et écrit chaque groupe encapsulé dans un fichier ".json" distinct.

Le code est disponible ici


Cela devrait être assez facile en utilisant DXF, ogr2ogr et GDAL SQLite SQL dialecte http://www.gdal.org/ogr_sql_sqlite.html.

Démo :

Téléchargez des exemples de données, par exemple http://justcad.com/jcsample.dxf

Utilisez ogrinfo avec le dialecte SQLite pour obtenir une liste de couches :

ogrinfo -dialect SQLite -sql "sélectionner une COUCHE distincte des entités" jcsample.dxf INFO : Ouverture de 'jcsample.dxf' à l'aide du pilote 'DXF' réussie. Nom de la couche : SELECT Géométrie : aucune Nombre d'entités : 5 Couche SRS WKT : (inconnu) Couche : chaîne (0.0) OGRFeature(SELECT):0 Couche (chaîne) = PAPER OGRFeature(SELECT):1 Couche (chaîne) = FRELEV OGRFeature( SELECT : 2 couches (chaîne) = LSELEV OGRFeature(SELECT):3 couches (chaîne) = RRELEV OGRFeature(SELECT):4 couches (chaîne) = RSELEV

Convertissez le calque "PAPER" en GeoJSON. J'attribuerai epsg:3857 comme projection fictive, car sinon GDAL supposerait EPSG:4326, ce qui n'aurait aucun sens car les valeurs de coordonnées dans ces données sont hors de la plage valide.

ogr2ogr -f GeoJSON -a_srs epsg:3857 -dialect SQLite -sql "select * des entités où LAYER="PAPER"" paper.json jcsample.dxf

Vérifiez le résultat :

ogrinfo -ro -al paper.json INFO : Ouverture réussie de 'paper.json' à l'aide du pilote 'GeoJSON'. Nom de la couche : OGRGeoJSON Géométrie : inconnue (n'importe laquelle) Nombre d'entités : 56 Étendue : (-174.786500, -1163.622000) - (1769.214000, 204.378100) Couche SRS WKT : PROJCS["WGS 84 / Pseudo-Mercator", GEOGCS["WGS 84" , DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTORITE["EPSG","7030"]], AUTORITE["EPSG","6326"]], PRIMEM["Greenwich",0, AUTORITE["EPSG","8901"]], UNITÉ["degré",0.0174532925199433, AUTORITE["EPSG","9122"]], AUTORITE["EPSG","4326"]], PROJECTION["Mercator_1SP"] , PARAMETER["central_meridian",0], PARAMETER["scale_factor",1], PARAMETER["false_easting",0], PARAMETER["false_northing",0], UNIT["metre",1, AUTHORITY["EPSG" ,"9001"]], AXIS["X",EST], AXIS["Y",NORD], 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 +units=m [email protected] +wktext +no_defs"], AUTHORITY["EPSG","3857"]] Couche : chaîne (0.0) Sous-classes : chaîne (0.0) ExtendedEntity : chaîne (0.0) Type de ligne : chaîne (0.0) EntityHandle : chaîne (0.0) Texte : chaîne (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) Type de ligne (chaîne) = CONTINU EntityHandle (chaîne) = (null) Texte (chaîne) = (null) LINESTRING (1644.348 -1081,244 0,1763.214 -1081,244 0)…


Voir la vidéo: Transformando DWGDXF em KML no QGIS (Octobre 2021).