Dans PostGIS 2.0, je cherche un moyen efficace de créer une vue activée spatialement et visible dans QGIS.
J'ai suivi le contexte de la deuxième partie de la réponse de @Mike Toews à Comment créer une table à partir de tables existantes (application de nouveaux schémas) dans la base de données Postgis? et la vue apparaît sous forme de couche de points (dans mon cas) dans la boîte de dialogue "Ajouter des couches PostGIS". Mais après avoir créé la vue et l'avoir spatialement activée, j'ai reçu l'erreur suivante lorsque j'essayais d'ajouter la vue à QGIS:
Vous devez sélectionner une table pour pouvoir ajouter une couche
Quelqu'un peut-il expliquer pourquoi la vue spatiale ne se chargera pas dans QGIS et ce que je dois faire pour la rendre chargeable en tant que couche dans QGIS?
J'utilise actuellement QGIS v1.8 à partir du programme d'installation OSGEO.
Je vois est construit à partir de la base de données geonames, chargée dans PostGIS. La table geoname / les données spatiales peuvent être sélectionnées / visualisées dans QGIS sans problème.
Lorsque j'essaie de sélectionner " mt_view ", QGIS voit la vue dans la boîte de dialogue, mais ne me laisse pas la sélectionner. Il donne un cadre en pointillé autour de la zone, mais ne met pas en surbrillance et ne sélectionne pas la vue.
Je viens de remarquer que lorsque je lance ma première requête:
CREATE OR REPLACE VIEW data.test AS
SELECT * FROM data.geoname
WHERE admin1='MT'
la vue apparaît dans la boîte de dialogue Ajouter une couche QGIS, mais est non sélectionnable. Puis quand je cours:
SELECT Populate_Geometry_Columns('data.test'::regclass);
Je reçois le résultat de "0", où selon la documentation , je pense qu'il devrait retourner "1".
la source
Réponses:
Je peux confirmer qu'il n'est pas possible de sélectionner simplement une vue répertoriée.
Il semble nécessaire de sélectionner d'abord la "colonne de clé primaire". Ensuite, la table devient sélectionnable:
la source
(Mise à jour légèrement ma réponse)
Tant que le champ OBJECTID (row_number) figure en premier dans la définition de colonne de la vue , QGIS le récupérera sans vous demander d'ajouter dans le menu "Ajouter un calque de vecteur".
Je viens de corriger quelques anciennes vues brisées conformément à la question initiale, mais le fait de déplacer le champ OBJECTID au début de la vue a résolu le problème!
la source
PRIMARY KEY
définie, QGIS la relève systématiquement: elle ne manque jamais de "choisir" le PK de toutes les tables dont le PK, bien que presque tous mes PK sontVARCHAR
. Cela ne peut pas arriver avec aVIEW
parce que PostgreSQLVIEW
ne peut pas avoirCONSTRAINT
s. C’est pourquoi il est nécessaire de sélectionnerVIEW
manuellement les PK lors de l’importation dans QGIS via le bouton «Ajouter des couches PostGIS». C’est pourquoi je les importe à l’aide d’un script Python.Votre vue apparaît-elle dans le
geometry_columns
tableau? Selon le manuel, la vue devrait apparaître automatiquement en 2.0 mais je ne l'ai pas essayée.Essayez de lancer ce qui suit pour vérifier:
la source
Votre vue utilise-t-elle un champ entier unique, tel qu'un "gid" ou un équivalent de PK, dans l'une des tables de votre vue?
Je sais que dans les versions précédentes de QGIS, je rencontrais des problèmes pour ajouter des vues à la carte alors qu'il n'y avait pas de champ entier unique. Cependant, j'ai reçu un message d'erreur différent soulignant ce problème, mais il serait peut-être utile de vérifier pour couvrir toutes les bases.
la source