Raumansicht in PostGIS erstellen und als Ebene in QGIS hinzufügen?


49

In PostGIS 2.0 suche ich nach einer effizienten Möglichkeit, eine räumlich aktivierte Ansicht zu erstellen, die in QGIS angezeigt werden kann.

Ich verfolgte den Kontext von Teil 2 der Antwort von @Mike Toews auf Wie erstelle ich eine Tabelle aus vorhandenen Tabellen (Anwenden neuer Schemata) in postgis DB? und die Ansicht wird (in meinem Fall) als Punktebene im Dialogfeld "PostGIS-Ebenen hinzufügen" angezeigt. Nachdem ich die Ansicht erstellt und räumlich aktiviert habe, wurde beim Versuch, die Ansicht zu QGIS hinzuzufügen, die folgende Fehlermeldung angezeigt:

Sie müssen eine Tabelle auswählen, um eine Ebene hinzuzufügen

Kann jemand erklären, warum die räumliche Ansicht nicht in QGIS geladen wird und was ich tun muss, um sie als Ebene in QGIS ladbar zu machen?

Ich verwende derzeit QGIS v1.8 aus dem OSGEO-Installationsprogramm

I view wird aus der in PostGIS geladenen Geonames-Datenbank erstellt. Die Geoname-Tabelle / die räumlichen Daten können in QGIS ausgewählt / angezeigt werden.

Wenn ich versuche, " mt_view " auszuwählen , wird die Ansicht in QGIS im Dialogfeld angezeigt , aber ich kann sie nicht auswählen. Es wird ein gepunkteter Rahmen um den Bereich angezeigt, die Ansicht wird jedoch nicht hervorgehoben und ausgewählt.

QGIS kann mt_view nicht als Layer auswählen


Mir ist gerade aufgefallen, dass ich bei meiner ersten Abfrage Folgendes ausgeführt habe:

CREATE OR REPLACE VIEW data.test AS
SELECT * FROM data.geoname
WHERE admin1='MT'

Die Ansicht wird im Dialogfeld "Ebene hinzufügen" von QGIS angezeigt, ist jedoch nicht auswählbar. Wenn ich dann renne:

SELECT Populate_Geometry_Columns('data.test'::regclass);

Ich erhalte das Ergebnis "0", wobei ich der Dokumentation zufolge "1" zurückgeben sollte.


1
Ich bestätige das Problem. Mit QGIS 1.8, PostGIS 2.0 und einer Ansicht, die aus einer Tabelle mit einem Primärschlüssel erstellt wurde, wird diese Ansicht in den verfügbaren Layern aufgelistet, es wird jedoch die Fehlermeldung "Sie müssen eine Tabelle auswählen, um einen Layer hinzuzufügen" angezeigt.
Giohappy

2
Gibt es eine andere Möglichkeit, den Primärschlüssel im Fenster "Ebene hinzufügen" von Postgis automatisch festzulegen, wenn wir mit Ansichten arbeiten? Es ist sehr schwierig, in diesem Bildschirm ein Primärschlüsselfeld für Ebenen / Ansichten auszuwählen, wenn Sie sich einen normalen GIS-Benutzer und eine Ansicht mit vielen Ganzzahlfeldern vorstellen.

@Pgimenez, ich würde vorschlagen, eine neue Frage mit dem zu beginnen, was Sie oben angegeben haben, und dann auf diese Fragen-URL in Ihrer eigenen zu verweisen. Das gibt ihm eine viel größere Sichtbarkeit.
RyanDalton

Es gibt keine Möglichkeit, eine konvexe Hülle in QGIS 1.8 Lisboa zu visualisieren. Ich habe versucht, vievs in Postgis 1.5 zu folgen. Mir wurde gesagt, ich solle eine ID-Spalte verwenden, um sie in Qgis zu veröffentlichen. Wenn Sie keine ID-Spalte verwenden, können Sie sie aufgrund eines Fehlers trotzdem nicht laden. 1. Erstelle oder ersetze die Ansicht con_hull_baeume3 (bid) als '0', ST_ConvexHull (ST_Collect (geom)) FROM baeume; 2. Erstellen oder Ersetzen der Ansicht con_hull_baeume4 (Gebot) als ausgewähltes Gebot, ST_ConvexHull (ST_Collect (Geom)) FROM baeume group by bid; aber dieser macht auf jedem der geometrischen Punkte eine konvexe Hülle. Ich meine, benutze einfach 'select ST_ConvexHull (ST_Collect (geom)) FROM baeume;' arbeitet
ulan

1
Herzlich willkommen! Bitte poste dies als neue Frage, da sie die ursprüngliche Frage nicht zu beantworten scheint. Zumindest wenn es sich um eine Frage handelt, da die letzte Aussage nicht klar ist, ob Sie erfolgreich waren oder nicht.
Lynxlynxlynx

Antworten:


54

Ich kann bestätigen, dass es nicht möglich ist, einfach eine aufgelistete Ansicht auszuwählen.

Es scheint notwendig, zuerst die "Primärschlüsselspalte" auszuwählen. Dann wird der Tisch auswählbar:

Bildbeschreibung hier eingeben


1
Wow, das hätte ich nie gesehen. Vielen Dank! Ich habe den Titel so bearbeitet, dass er das Problem mit QGIS widerspiegelt, nicht mit der PostGIS-Ansicht.
RyanDalton

Es scheint, dass dies ein Problem für QGIS 1.8 ist (das ich noch nicht verwendet habe). Diese Schritte sind für 1.7 nicht erforderlich.
Mike T

Das ist richtig, 1.7 hat versucht, den Primärschlüssel zu erraten. Aber es hat nicht gut funktioniert.
Underdunkel

@underdark, akzeptiert QGIS auch andere Arten von PKs?
George Silva

1
In QGIS3 trägt die Spalte die Überschrift "Feature-ID" und nicht "Primärschlüsselspalte" und (zumindest für mich) befindet sie sich am Rand des Standardfensters (dh nicht sichtbar) und zeigt nicht an, dass mehr Spalten vorhanden waren! Ich denke, ich werde eine Featureanforderung protokollieren, die nach der Auswahl zur Eingabe dieser Details (falls erforderlich) aufgefordert wird. Es scheint, dass die Entwickler davon ausgehen, dass die Benutzer sicherstellen, dass in der ersten Spalte ein eindeutiger Schlüssel vorhanden ist.
Russell Fulton

5

(Aktualisiere meine Antwort leicht)

Solange sich das Feld OBJECTID (row_number) in der Spaltendefinition der Ansicht befindet , wird es von QGIS ohne Aufforderung aus dem Menü "Vektorebene hinzufügen" abgerufen.

CREATE OR REPLACE VIEW dqmt.addressverify AS 
 SELECT row_number() OVER (ORDER BY newaddresses.addressid) AS objectid,
    newaddresses.addressid
  , geom
   FROM dqmt.newaddresses;

Ich habe gerade einige alte Ansichten behoben, die gemäß der ursprünglichen Frage fehlerhaft waren, aber das Verschieben des OBJECTID-Felds an den Anfang der Ansicht hat das Problem behoben!


Ich habe die Syntax "row_number () over ()" auch für viele Ansichten verwendet. Normalerweise habe ich "gid" für mein Primärschlüsselfeld verwendet. Verwenden alle anderen Ansichten "objectid" als Primärschlüssel?
RyanDalton

normalerweise objectid - was im obigen Beispiel funktioniert hat - aber wird gid versuchen ... erkennt QGIS dies vor jedem anderen 'id'-Feld?
DPSSpatial

GID hat keine Auswirkungen auf diese ...
DPSSpatial

Möglichkeiten nur ausdenken.
Vielen

(Spät dazu, aber ...) Ich denke, wenn eine geladene Tabelle eine PRIMARY KEYdefinierte hat, greift QGIS diese routinemäßig auf: Es kommt immer wieder vor, dass es die PK auf einer meiner Tabellen mit einer "auswählt" PK, obwohl fast alle meine PKs sind VARCHAR. Das kann mit a nicht passieren, VIEWweil PostgreSQL VIEWs s nicht haben kann CONSTRAINT. Aus diesem Grund ist es ziemlich sicher, dass Sie die PK für VIEWs manuell auswählen müssen, wenn Sie über die Schaltfläche "PostGIS-Ebenen hinzufügen" in QGIS importieren. Deshalb importiere ich sie mithilfe eines Python-Skripts.
GT.

4

Erscheint Ihre Ansicht in der geometry_columnsTabelle? Laut Handbuch sollte die Ansicht in 2.0 automatisch angezeigt werden, aber ich habe es nicht ausprobiert.

Versuchen Sie Folgendes zu überprüfen:

SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims 
FROM geometry_columns
WHERE f_table_name = 'my_spatial_table' AND f_table_schema = 'my_schema';

Ja, diese Überprüfung meiner Ansicht nach durchzuführen, kehrt zurück: the_geom, Point, 4269,2
RyanDalton

3

Verwendet Ihre Ansicht ein eindeutiges ganzzahliges Feld wie eine "gid" oder eine PK-Entsprechung aus einer der Tabellen in Ihrer Ansicht?

Ich weiß, dass ich in früheren Versionen von QGIS Probleme mit dem Hinzufügen von Ansichten zur Karte hatte, als es kein eindeutiges Ganzzahlfeld gab. Ich habe jedoch eine andere Fehlermeldung erhalten, die auf dieses Problem hinweist, aber es kann sich lohnen, zu prüfen, ob alle Grundlagen abgedeckt sind.


Ja, in der Geonamen-Tabelle ist "geonameid", eine eindeutige ID, und für dieses Feld ist eine PRIMARY KEY-Einschränkung festgelegt.
RyanDalton
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.