Comment spécifier les champs à exporter depuis QGIS?

9

J'utilise QGIS 2.0.1 et je suis connecté à une base de données activée spatialement MS SQL Server (pas ESRI). Je peux me connecter à la couche et la charger très bien dans ma table des matières. J'ai caché un certain nombre de champs qui ne sont pas importants pour la visibilité.

Maintenant, je veux exporter ces données vers un autre type de données (nous utiliserons le fichier de formes pour cet exemple). Lorsque je clique avec le bouton droit sur le calque, choisissez "Enregistrer sous" et définissez le fichier de sortie, j'obtiens l'erreur suivante:

L'exportation vers un fichier vectoriel a échoué. Erreur: type non pris en charge pour le champ GlobalID

Remarque 1 : si je coche "Ignorer la création d'attributs" dans la boîte de dialogue, le fichier de formes est créé sans erreur.

Remarque 2 : ArcGIS n'a pas ce problème, il convertit simplement le champ GUID en type "TEXT".

En regardant la table, l'un des champs que j'ai caché est un GUID de type SQL < uniqueidentifier >, qui est vraisemblablement le coupable. Pour tenter de résoudre ce problème, j'ai rendu le champ «masqué». J'aurais supposé que parce que le champ était caché, QGIS n'essaierait pas d'exporter ce champ, mais cela s'est avéré ne pas être le cas.

Pouvez-vous définir les champs que vous souhaitez exporter à partir de QGIS?

Est-il possible pour QGIS d'exporter uniquement les champs "Visibles"? Ou existe-t-il une autre façon de procéder à partir de QGIS (peut-être définir les champs via une requête ogr2ogr)? Cela semble être une lacune de QGIS si je ne peux pas définir les champs à exporter.

MISE À JOUR: J'ai fait un test en utilisant un exemple de fichier de formes pour voir si je pouvais limiter les champs de sortie. La ligne de commande ogr2ogr suivante a fonctionné et a supprimé tous les champs à l'exception de "nom":

ogr2ogr -f "ESRI Shapefile" test.shp city.shp -sql "select name from city"

mais en utilisant QGIS et en ajoutant:

-sql "select name from city"

à la section "calque" de la boîte de dialogue "Enregistrer sous" n'a pas abouti à un fichier de formes avec uniquement le champ unique. Je ne vois donc pas vraiment comment je peux manipuler la sortie du fichier pour n'afficher que quelques champs. Toute aide est appréciée.

RyanKDalton
la source
Si ogr2ogr peut le faire, QGIS le peut, car c'est exactement l'outil qui s'exécute en arrière-plan. Malheureusement, je n'ai pas de base de données SQL Server à tester ...
underdark
Droite. J'ai donc essayé d'ajouter -sql "select <fields> from <table>"(en excluant le champ GlobalID des <champs>) à la partie "Couche" de la boîte de dialogue "Enregistrer sous", mais la même erreur est toujours apparue. Ai-je mal utilisé ce bloc de code ou s'agit-il d'un bug?
RyanKDalton
cette réponse suggère -select au lieu de -sql gis.stackexchange.com/questions/30691/… ... Je pense que cela va dans la section source de données, pas dans la couche.
underdark
Pas de chance pour moi avec l'une ou l'autre de vos suggestions J'ai également essayé plusieurs combinaisons des options -select et -sql dans les champs "Layer" et "Data Source" des "options de création OGR" :( Sûrement, je ne peux pas être le premier avec la nécessité d'exporter un sous-ensemble de champs ...
RyanKDalton
pourrait être utile de vérifier auprès des développeurs. pourrait être un bug.
underdark

Réponses:

1

Si cela fonctionne pour vous en ligne de commande avec ogr2ogr, je pense que c'est la meilleure solution pour l'utiliser. Vous pouvez écrire un simple fichier bat pour créer un fichier de formes à partir de votre base de données MSSQL. De toute évidence, vous ne pouvez pas modifier les données et les sauvegarder sur le serveur de cette façon.

QGIS possède les zones de saisie Source de données et Couche, mais ce ne sont que pour les paramètres -dsco et -lco d'ogr2ogr. Le pilote de fichier de formes OGR n'a pas de dsco ou lco utile pour vos besoins:

http://www.gdal.org/ogr2ogr.html

http://www.gdal.org/ogr/drv_shapefile.html

Alternativement, il devrait être possible d'écrire un plugin python qui demande les données du serveur avec une commande SQL SELECT à vos besoins. Cela permettrait même de modifier les données.

AndreJ
la source
Jusqu'à présent, cela semble être l'idée la plus réalisable. Existe-t-il un moyen d'appeler directement la ligne de commande ogr2ogr à partir de l'interface utilisateur QGIS afin de lancer votre propre syntaxe ogr2ogr?
RyanKDalton
Pas directement. Mais vous pouvez détourner le terminal de gdalwarp pour y entrer votre commande ogr2ogr. Vous obtenez une erreur indiquant que le calque n'est pas créé, mais il est de toute façon dans le système de fichiers. Vous ne savez pas ce qui se passe si le fichier existe déjà, il vaut donc mieux ajouter -overwrite aussi. Et mieux utiliser les noms de chemin d'accès complets pour les fichiers.
AndreJ
Alternativement, avez-vous déjà essayé d'utiliser un fichier virtuel GDAL VRT comme médiateur entre MSSQL et QGIS?
AndreJ
Je ne l'ai pas, mais GDAL n'est-il pas pour travailler avec des rasters? Je travaille avec une couche vectorielle ponctuelle. J'aime bien l'idée d'une "table virtuelle" comme intermédiaire. QGIS 2 n'a-t-il pas de couche en mémoire sur laquelle nous pourrions écrire?
RyanKDalton
1
Il existe également un pilote ogrvrt GDAL: gdal.org/ogr/drv_vrt.html . Mais je pense que cela devrait mieux poser une autre question.
AndreJ
0

Je vous suggère de vérifier la table des attributs pour la couche dans la table des matières et si le champ GlobalID existe. Basculez en mode édition, supprimez la colonne qui crée le problème lors de l'exportation et fermez la fenêtre. Enregistrez ensuite en tant que fichier de formes ou quel que soit le format de sortie que vous souhaitez. J'espère que ça aide.

Farhat Abbas
la source
1
Je ne sais pas si la suppression du champ dans la table SQL Server est un bon choix. Il peut encore être nécessaire au serveur.
AndreJ
Je pense que la suppression d'une colonne d'attribut de QGIS TOC Layer enregistre la structure mise à jour dans le tampon QGIS et vous permet d'exporter un fichier dans un autre format. une fois l'exportation terminée, n'enregistrez pas les modifications apportées au calque (ce que vous avez supprimé)
Farhat Abbas