extraire des fichiers dxf de PostgreSQL

10

J'ai réussi à charger un tas de fichiers de formes dans une base de données PostGIS. Je voudrais pouvoir récupérer une géométrie et des couches spécifiques sous forme de fichiers dxf basés sur des requêtes SQL.

J'utilise PostGIS, GDAL, PostgreSQL et Python de la suite OSGeo4W sous Windows.

J'imagine que je devrais utiliser ogr2ogr un peu comme ceci:

$ ogr2ogr -sql "SELECT * FROM some_table" -f "dxf" outputfile.dxf -overwrite "PG:dbname=mydb user=dbusername password=dbpassword"

mais quand je le fais avec les valeurs appropriées, j'obtiens une série d'erreurs comme celle-ci:

ERROR 1: DXF layer does not support arbitrary field creation, field 'objectid' not created. 

Il en résulte une erreur pour chaque colonne d'attribut de la couche some_tableMais j'obtiens un fichier dxf.

Si j'ai déjà créé un fichier .dxf et que je réexécute la commande ci-dessus (y compris l' -overwriteoption), j'obtiens cette erreur à la place:

Layer sql_statement not found, and CreateLayer not supported by driver. ERROR 1: Terminating translation prematurely after failed translation from sql statement.

J'ai déjà vérifié que la GDAL_DATAvariable d'environnement est correctement définie. (à C:\OSGeo4W\share\gdal)

Il est certainement possible que j'aborde cette tâche de manière incorrecte car je suis nouveau dans tous ces outils, donc je suis ouvert à toutes suggestions et astuces sur la façon de créer des fichiers .dxf à partir de données SIG stockées dans PostgreSQL sur la base de requêtes SQL.

BenjaminGolder
la source
a trouvé un lien pertinent: fwarmerdam.blogspot.com/2010/07/ogr-dxf-upgrade.html
BenjaminGolder

Réponses:

9

Benjamin,

DXF (comme supposé par OGR) ne prend pas en charge les attributs SIG arbitraires. Il a un schéma fixe qui ressemble à:

Couche: chaîne (0,0)
Sous-classes: chaîne (0,0)
ExtendedEntity: String (0.0)
Type de ligne: chaîne (0,0)
EntityHandle: String (0.0)

et seuls quelques-uns d'entre eux sont réellement examinés lors de l'écriture. Le moyen le plus simple consiste simplement à utiliser la méthode -skipfailures bien qu'il semble que la traduction se poursuive malgré les erreurs, même sans cela.

Comme pour -overwrite - qui s'applique aux formats qui prennent en charge la suppression de calque, ce que DXF ne prend pas en charge. Pré-supprimez simplement le fichier DXF existant avant d'exécuter ogr2ogr.

Frank Warmerdam
la source
C'est probablement la meilleure réponse jusqu'à présent, mais pour moi, cela revient à dire que la fonction d'exportation dxf d'OGR n'exporte pas dxfs. J'espère une réponse qui me permet d'obtenir des dxfs utilisables avec des données d'attribut et non une grande liste d'erreurs. Je vais voir si je peux aider à améliorer l'exportation OGR.
BenjaminGolder
2

avec la réponse de Frank et l'allusion du "GIS-Kompetenzzentrum" de la ville d'Uster (seulement en allemand)

http://gis.uster.ch/dokumentation/datenkonvertierung/ogr

J'ai compris que PostGIS en dxf peut être fait comme suit:

ogr2ogr -f DXF $TITLE$.dxf PG:"dbname='$DBNAME$' host='$HOST$' port='$PORT$' user='$USER$' password='$PASSWORD$'" -sql "select $COLUMN$ as Layer, the_geom from $TABLE$"

L'instruction sql, à la fin, créée pour chaque ligne de $ COLUMN $ an Layer. Il sera donc préférable de sélectionner un $ COLUMN $ comme ID ou un nom pertinent.

Je l'ai essayé avec une table polygonale 2D. Le fichier dxf n'a pas fermé les polylignes. Il est peut-être possible d'ajouter quelque chose comme "$ polygon $ as Linetype" à la chaîne sql.

Si vous voulez que toutes les géométries de votre table sur une seule couche, vous pouvez utiliser le code du "GIS-Kompetenzzentrum" d'Uster

ogr2ogr -select '' -f DXF DXF $TITLE$.dxf PG:"dbname='$DBNAME$' host='$HOST$' port='$PORT$' user='$USER$' password='$PASSWORD$' schemas=$SCHEMA$ tables=$TABLE$(the_geom)"

Sur les deux instructions, vous pouvez ajouter l'option suivante:

-spat xmin ymin xmax ymax

si vous voulez une restriction spatiale.

mk.archaeo
la source
1

Ce que Frank a dit allait être ma suggestion.
Créez un dxf avec vos noms de calque déjà dedans et utilisez-le comme modèle.

Brad Nesom
la source