Geometrietyp in gemischter Geometrie-WFS-Ebene in QGIS erzwingen?


8

Ich habe eine externe WFS-Quelle, die gemischte Geometrietypen bedient - mit anderen Worten, ich habe keine Kontrolle über die Quelle. Beim Hinzufügen der Ebene setzt QGIS den Geometrietyp auf Linie und daher kann ich die Punkte und Polygone, die auch in der Ebene enthalten sind, nicht formatieren.

Nathan W gibt in einem Kommentar an, dass eine Ebene in QGIS nur einen Geometrietyp enthalten kann. Wenn ich den Geometrietyp auf einer Ebene explizit festlegen könnte, könnte ich die Ebene dreimal hinzufügen und für jeden Geometrietyp eine Ebene verwenden.

Ist es möglich, den Geometrietyp auf einer (WFS) Ebene in QGIS zu erzwingen?

Oder gibt es eine andere Methode, mit der ich alle Funktionen in meiner WFS-Ebene korrekt formatieren kann?


Ich denke, es sollte möglich sein, die WFS-Dienstfilterfunktionen zu verwenden, um die FeatureTypes zu filtern, je nachdem, ob es sich um gml: Point, gml: LineString, gml: Polygon usw. handelt. Verwenden Sie dies dann als Grundlage für einzelne Ebenen
nmtoken

Es scheint wirklich möglich zu sein, wenn der WFS-Server Geoserver docs.geoserver.org/stable/en/user/filter/function.html ist . Möglicherweise unterstützen jedoch nicht alle WFS-Server das Filtern nach Geometrietyp. Eine andere Möglichkeit könnte darin bestehen, das GDAL VRT-Format zu verwenden und es beispielsweise mit SQLite SQL-Dialekt und (ungetestetem) SrcSQL wieSELECT * from WFS_layer WHERE GeometryType(geometry)='POINT'
user30184

Hast du das jemals zum Laufen gebracht? Ich bin etwas überrascht, dass dies noch nicht in QGIS integriert ist, da mehrere Geometrien innerhalb der ogc-Spezifikation liegen.
auslander

@auslander, Nein, tut mir leid, ich habe keinen Weg gefunden und das Thema damals verlassen.
Chau

1
Ich kann nicht; Es ist in einem internen Netzwerk. Ich suche jedoch keine GeoServer-Filterung. Ich suche nach QGIS-Filterung. Nach allem, was ich sagen kann, erlaubt mir QGIS nicht, auf eine URL mit Filtern zuzugreifen, die vom WFS-Handler hinzugefügt wurden. Der Handler verwendet eine Basis-WFS-URL, und dann werden Argumente / Filter in einem SQL-ähnlichen Ausdrucksgenerator hinzugefügt. Ich konnte keine Dokumentation zu dieser speziellen Funktion von QGIS finden.
auslander

Antworten:


2

In QGIS 3.6 ist dies nicht möglich, wenn das WFS über das Browserfenster hinzugefügt wird. Wenn Sie das WFS jedoch über Ebene> Ebene hinzufügen> WFS-Ebene hinzufügen hinzufügen, können Sie SQL auf die Ebene anwenden.

Gehen Sie also von Grund auf wie folgt vor:

  • Nachdem Sie Ebene> Ebene hinzufügen> WFS-Ebene hinzufügen ausgewählt haben, wählen Sie im nächsten Fenster Neu aus, um einen neuen Dienst hinzuzufügen.
  • Geben Sie einen Namen und die URL des Dienstes ein.
  • Klicken Sie auf die Registerkarte Basis und geben Sie bei Bedarf Ihre Anmeldeinformationen ein.
  • Übernehmen Sie die Standardeinstellungen für die WFS-Optionen und klicken Sie auf OK.
  • Wenn Sie Anmeldeinformationen eingegeben haben, erhalten Sie eine Warnung zum Speichern von Kennwörtern. Drücken Sie OK, um fortzufahren.
  • Klicken Sie auf Verbinden, um eine Verbindung zum neu hinzugefügten Dienst herzustellen, markieren Sie die gewünschte Ebene und klicken Sie auf Abfrage erstellen.
  • geometryType(geom_field) = 'LineString'Fügen Sie in der Where-Klausel Folgendes hinzu: Ersetzen Sie geom_field durch den Namen des Felds, in dem die Geometrie gespeichert ist. Sie sollten dies in der Dropdown-Liste Spalten rechts finden. Zu den Geometrieoptionen gehören Point, MultiPoint, LineString, LinearRing, MultiLineString, Polygon, MultiPolygon und GeometryCollection. Klicken Sie auf OK.
  • Klicken Sie auf Hinzufügen, um den Layer zur Karte hinzuzufügen.
  • Klicken Sie auf Schließen, um zur Karte zurückzukehren.

Ich konnte das nirgendwo finden und habe es selbst herausgefunden, indem ich einen Teil der Antwort auf diese Frage als Ausgangspunkt verwendet habe. Ich hoffe, es hilft anderen, nach der gleichen Problemumgehung zu suchen, bis QGIS es ein bisschen einfacher macht.


1

Soweit ich weiß, ist dies derzeit nicht möglich, es liegt jedoch bereits eine entsprechende Funktionsanforderung vor: https://issues.qgis.org/issues/17372

Überprüfen Sie gerade jetzt mit dem bag:verblijfsobjectBeispiel aus den Kommentaren:

<xsd:complexContent>
    <xsd:extension base="gml:AbstractFeatureType">
        <xsd:sequence>
            <xsd:element maxOccurs="1" minOccurs="0" name="identificatie" nillable="true" type="xsd:decimal"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="oppervlakte" nillable="true" type="xsd:decimal"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="status" nillable="true" type="xsd:string"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="gebruiksdoel" nillable="true" type="xsd:string"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="openbare_ruimte" nillable="true" type="xsd:string"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="huisnummer" nillable="true" type="xsd:decimal"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="huisletter" nillable="true" type="xsd:string"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="toevoeging" nillable="true" type="xsd:string"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="postcode" nillable="true" type="xsd:string"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="woonplaats" nillable="true" type="xsd:string"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="actualiteitsdatum" nillable="true" type="xsd:dateTime"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="bouwjaar" nillable="true" type="xsd:decimal"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="pandidentificatie" nillable="true" type="xsd:decimal"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="pandstatus" nillable="true" type="xsd:string"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="geometrie" nillable="true" type="gml:PointPropertyType"/>
            <xsd:element maxOccurs="1" minOccurs="0" name="pandgeometrie" nillable="true" type="gml:GeometryPropertyType"/>
        </xsd:sequence>
    </xsd:extension>
</xsd:complexContent>

Eine Abfrage wie die folgende (bei der die Punktgeometrie nicht ausgewählt wird) als Teil der Verbindungsinformationen im Datenquellen-Manager | WFS> Build Query führt dazu, dass die Punkte zurückgegeben werden.

SELECT verblijfsobject.identificatie, verblijfsobject.oppervlakte, verblijfsobject.status, verblijfsobject.gebruiksdoel, verblijfsobject.openbare_ruimte, verblijfsobject.huisnummer, verblijfsobject.huisletter, verblijfsobject.toevoeging, verblijfsobject.postcode, verblijfsobject.woonplaats, verblijfsobject.actualiteitsdatum, verblijfsobject.bouwjaar, verblijfsobject.pandstatus, verblijfsobject.pandgeometrie FROM verblijfsobject

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.