Forzar tipo de geometría en geometría mixta WFS capa en QGIS?


8

Tengo una fuente WFS externa que sirve tipos de geometría mixta; en otras palabras, no tengo control de la fuente. Al agregar la capa, QGIS establece el tipo de geometría en línea y, por lo tanto, no puedo diseñar los puntos y los polígonos también contenidos dentro de la capa.

Nathan W afirma en un comentario que una capa en QGIS puede contener solo un tipo de geometría. Si pudiera establecer explícitamente el tipo de geometría en una capa, podría agregar la capa tres veces y usar una capa para cada tipo de geometría.

¿Es posible forzar el tipo de geometría en una capa (WFS) en QGIS?

¿O hay otro método que podría usar para diseñar correctamente todas las características de mi capa WFS?


Creo que debería ser posible usar las capacidades de filtro de servicio WFS para filtrar los FeatureTypes dependiendo de si es gml: Point, gml: LineString, gml: Polygon, etc. luego usar esto como la base de capas individuales
nmtoken

Realmente parece posible si el servidor WFS es Geoserver docs.geoserver.org/stable/en/user/filter/function.html . Sin embargo, todos los servidores WFS pueden no admitir el filtrado por tipo de geometría. Otra opción podría ser usar el formato GDAL VRT y dejar que se encargue de filtrar, por ejemplo, con el dialecto SQLite SQL y (sin probar) SrcSQL comoSELECT * from WFS_layer WHERE GeometryType(geometry)='POINT'
user30184

¿Alguna vez conseguiste que esto funcionara? Estoy un poco sorprendido de que esto aún no esté integrado en QGIS, ya que varias geometrías están dentro de las especificaciones ogc.
auslander

@auslander, No lo siento, no encontré una manera y dejé el problema en ese momento.
Chau

1
No puedo Está en una red interna. Sin embargo, no estoy buscando el filtrado GeoServer; Estoy buscando el filtrado QGIS. Por lo que puedo decir, QGIS no me permite acceder a una URL con filtros agregados desde el controlador WFS: el controlador toma una URL WFS base y luego se agregan argumentos / filtros en un generador de expresiones similar a SQL. No he podido encontrar ninguna documentación sobre esta característica particular de QGIS.
auslander

Respuestas:


2

En QGIS 3.6 esto no es posible si se agrega WFS a través del panel del navegador. Sin embargo, si agrega el WFS a través de Capa> Agregar capa> Agregar capa WFS, podrá aplicar SQL a la capa.

Entonces, desde cero, haga lo siguiente:

  • Después de seleccionar Capa> Agregar capa> Agregar capa WFS, en la siguiente ventana seleccione Nuevo para agregar un nuevo servicio.
  • Ingrese un Nombre y la URL del servicio.
  • Haga clic en la pestaña Básico e ingrese sus credenciales si es necesario.
  • Deje la configuración de Opciones de WFS como predeterminada y haga clic en Aceptar.
  • Si ingresó credenciales, recibirá una advertencia sobre el almacenamiento de contraseñas. Presione OK para continuar.
  • Haga clic en Conectar para conectarse al servicio recién agregado y resalte la capa que desea y haga clic en Generar consulta.
  • En la cláusula Where, agregue lo siguiente: geometryType(geom_field) = 'LineString'reemplazar geom_field con el nombre del campo que almacena la geometría. Debería poder encontrar esto en el menú desplegable Columnas a la derecha. Las opciones de geometría incluyen Point, MultiPoint, LineString, LinearRing, MultiLineString, Polygon, MultiPolygon, GeometryCollectionClick OK.
  • Haga clic en Agregar para agregar la capa al mapa.
  • Haga clic en Cerrar para volver al mapa.

No pude encontrar esto en ningún lado y lo descubrí usando parte de la respuesta a esta pregunta como punto de partida. Espero que ayude a otros a buscar la misma solución hasta que QGIS lo haga un poco más fácil.


1

Hasta donde sé, esto no es posible actualmente, pero ya existe una solicitud de función relacionada: https://issues.qgis.org/issues/17372

Comprobando ahora con el bag:verblijfsobjectejemplo de los comentarios:

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

Una consulta como la siguiente (donde no seleccionamos la geometría del punto), como parte de la información de conexión dentro del Data Source Manager | WFS> Build Query, da como resultado que se devuelvan los puntos.

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.