Forcer le type de géométrie dans la couche WFS à géométrie mixte dans QGIS?

8

J'ai une source WFS externe servant des types de géométrie mixtes - en d'autres termes, je n'ai aucun contrôle sur la source. Lors de l'ajout de la couche, QGIS définit le type de géométrie sur la ligne et je ne peux donc pas styliser les points et les polygones également contenus dans la couche.

Nathan W déclare dans un commentaire qu'une couche dans QGIS ne peut contenir qu'un seul type de géométrie. Si je pouvais définir explicitement le type de géométrie sur une couche, je pourrais ajouter la couche trois fois et utiliser une couche pour chaque type de géométrie.

Est-il possible de forcer le type de géométrie sur une couche (WFS) dans QGIS?

Ou existe-t-il une autre méthode que je pourrais utiliser pour styliser correctement toutes les fonctionnalités de ma couche WFS?

Chau
la source
Je pense qu'il devrait être possible d'utiliser les capacités du filtre de service WFS pour filtrer les FeatureTypes selon qu'il s'agit de gml: Point, gml: LineString, gml: Polygon, etc., puis utilisez-le comme base de couches individuelles
nmtoken
Cela semble vraiment possible si le serveur WFS est Geoserver docs.geoserver.org/stable/en/user/filter/function.html . Cependant, tous les serveurs WFS peuvent ne pas prendre en charge le filtrage par type de géométrie. Une autre option pourrait être d'utiliser le format GDAL VRT et de le laisser s'occuper du filtrage, par exemple avec le dialecte SQLite SQL et SrcSQL (non testé) commeSELECT * from WFS_layer WHERE GeometryType(geometry)='POINT'
user30184
Avez-vous déjà obtenu ceci pour travailler? Je suis quelque peu surpris que cela ne soit pas encore intégré à QGIS, car plusieurs géométries sont conformes aux spécifications de l'ogc.
auslander
@auslander, non désolé, je n'ai pas trouvé de moyen et j'ai laissé le problème à l'époque.
Chau
1
Je ne peux pas; c'est sur un réseau interne. Cependant, je ne recherche pas le filtrage GeoServer; Je recherche le filtrage QGIS. D'après ce que je peux dire, QGIS ne me permet pas d'accéder à une URL avec des filtres ajoutés à partir du gestionnaire WFS - le gestionnaire prend une URL WFS de base, puis des arguments / filtres sont ajoutés dans un générateur d'expression de type SQL. Je n'ai pas pu trouver de documentation sur cette fonctionnalité particulière de QGIS.
auslander

Réponses:

2

Dans QGIS 3.6, cela n'est pas possible si vous ajoutez le WFS via le panneau du navigateur. Cependant, si vous ajoutez le WFS via Couche> Ajouter une couche> Ajouter une couche WFS, vous pouvez alors appliquer SQL à la couche.

Donc, à partir de zéro, procédez comme suit:

  • Après avoir sélectionné Couche> Ajouter une couche> Ajouter une couche WFS, dans la fenêtre suivante, sélectionnez Nouveau pour ajouter un nouveau service.
  • Saisissez un nom et l'URL du service.
  • Cliquez sur l'onglet De base et entrez vos informations d'identification si nécessaire.
  • Laissez les paramètres des options WFS par défaut et cliquez sur OK.
  • Si vous avez entré des informations d'identification, vous recevrez un avertissement concernant le stockage des mots de passe. Appuyez sur OK pour continuer.
  • Cliquez sur Connecter pour vous connecter au service nouvellement ajouté et mettez en surbrillance la couche souhaitée, puis cliquez sur Créer une requête.
  • Dans la clause Where, ajoutez ce qui suit: geometryType(geom_field) = 'LineString'remplacement de geom_field par le nom du champ qui stocke la géométrie. Vous devriez pouvoir le trouver dans la liste déroulante Colonnes à droite. Les options de géométrie incluent Point, MultiPoint, LineString, LinearRing, MultiLineString, Polygon, MultiPolygon, GeometryCollectionClick OK.
  • Cliquez sur Ajouter pour ajouter la couche à la carte.
  • Cliquez sur Fermer pour revenir à la carte.

Je n'ai trouvé cela nulle part et je l'ai compris moi-même en utilisant une partie de la réponse à cette question comme point de départ. J'espère que cela aide les autres à rechercher la même solution de contournement jusqu'à ce que QGIS le facilite un peu.

Danny Barnes
la source
1

Pour autant que je sache, ce n'est actuellement pas possible, mais il existe déjà une demande de fonctionnalité connexe: https://issues.qgis.org/issues/17372

Vérification juste maintenant avec l' bag:verblijfsobjectexemple des commentaires:

<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>

Une requête comme la suivante (où nous ne sélectionnons pas la géométrie du point), dans le cadre des informations de connexion dans Data Source Manager | WFS> Build Query, les points sont retournés.

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

obscur
la source