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_table
Mais 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' -overwrite
option), 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_DATA
variable 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.
Réponses:
Benjamin,
DXF (comme supposé par OGR) ne prend pas en charge les attributs SIG arbitraires. Il a un schéma fixe qui ressemble à:
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.
la source
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:
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
Sur les deux instructions, vous pouvez ajouter l'option suivante:
si vous voulez une restriction spatiale.
la source
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.
la source