11 votos

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

Tengo una fuente WFS externa que sirve tipos de geometría mixtos, es decir, no tengo control de la fuente. Al añadir la capa, QGIS establece el tipo de geometría como línea y por lo tanto no puedo estilizar el puntos y polígonos también contenida en la capa.

Nathan W afirma en un comentario que una capa en QGIS sólo puede contener un tipo de geometría. Si pudiera establecer explícitamente el tipo de geometría en una capa, podría añadir la capa tres veces y utilizar una capa para cada tipo de geometría.

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

¿O hay algún otro método que pueda utilizar para estilizar correctamente todas las características de mi capa WFS?

0 votos

Creo que debería ser posible utilizar las capacidades de filtro de servicio WFS para filtrar los FeatureTypes dependiendo de si se trata de gml:Point, gml:LineString, gml:Polygon, etc a continuación, utilizar esto como la base de las capas individuales

0 votos

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

0 votos

¿Has conseguido que funcione? Me sorprende un poco que esto no esté integrado en QGIS todavía, ya que las geometrías múltiples están dentro de la especificación ogc.

4voto

Riaz Rizvi Puntos 166

En QGIS 3.6 esto no es posible si se añade el WFS a través del panel del navegador. Sin embargo, si se añade el WFS a través de Capa > Añadir Capa > Añadir Capa WFS se puede aplicar SQL a la capa.

Así que, desde el principio, haz lo siguiente:

  • Después de seleccionar Capa > Añadir capa > Añadir capa WFS, en la siguiente ventana seleccione Nuevo para añadir un nuevo servicio.
  • Introduzca un nombre y la URL del servicio.
  • Haga clic en la pestaña Básico e introduzca sus credenciales si es necesario.
  • Deje la configuración de las opciones de WFS por defecto y haga clic en Aceptar.
  • Si ha introducido las credenciales, recibirá una advertencia sobre el almacenamiento de las contraseñas. Pulse OK para continuar.
  • Haga clic en Conectar para conectarse al servicio recién añadido y resalte la capa que desee y haga clic en Construir consulta.
  • En la cláusula Where añada lo siguiente: geometryType(geom_field) = 'LineString' sustituyendo geom_field por el nombre del campo que almacena la geometría. Debería poder encontrarlo en el desplegable Columnas de la derecha. Las opciones de geometría incluyen Point, MultiPoint, LineString, LinearRing, MultiLineString, Polygon, MultiPolygon, GeometryCollectionClick OK.
  • Haga clic en Agregar para añadir la capa al mapa.
  • Haga clic en Cerrar para volver al mapa.

No he podido encontrar esto en ningún sitio y lo he averiguado yo mismo utilizando parte de la respuesta a esta pregunta como punto de partida. Espero que ayude a otros que buscan la misma solución hasta que QGIS lo haga un poco más fácil.

2voto

tobes Puntos 19

Por lo que sé, esto no es posible en la actualidad, pero ya existe una solicitud de función relacionada: https://issues.qgis.org/issues/17372

Comprobando ahora mismo con el bag:verblijfsobject ejemplo 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 (en la que no seleccionamos la geometría de los puntos), como parte de la información de conexión dentro del Gestor de Fuentes de Datos | WFS > Build Query, da como resultado la devolución de 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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X