Forçar o tipo de geometria na camada WFS de geometria mista no QGIS?


8

Eu tenho uma fonte WFS externa que serve tipos de geometria mista - em outras palavras, não tenho controle da fonte. Ao adicionar a camada, o QGIS define o tipo de geometria para a linha e, portanto, não consigo estilizar os pontos e polígonos também contidos na camada.

Nathan W afirma em um comentário que uma camada no QGIS pode conter apenas um tipo de geometria. Se eu pudesse definir explicitamente o tipo de geometria em uma camada, poderia adicionar a camada três vezes e usar uma camada para cada tipo de geometria.

É possível forçar o tipo de geometria em uma camada (WFS) no QGIS?

Ou existe outro método que eu poderia usar para estilizar corretamente todos os recursos da minha camada WFS?


Eu acho que deveria ser possível usar os recursos de filtragem de serviço WFS para filtrar os featuretypes dependendo se é gml: Point, gml: LineString, GML: polígono, etc, em seguida, usar isso como base de camadas individuais
NMTOKEN

Parece realmente possível se o servidor WFS for Geoserver docs.geoserver.org/stable/en/user/filter/function.html . No entanto, todos os servidores WFS podem não oferecer suporte à filtragem por tipo de geometria. Outra opção poderia ser a de usar o formato GDAL VRT e deixá-lo cuidar de filtragem por exemplo, com dialeto SQLite SQL e (não testado) SrcSQL comoSELECT * from WFS_layer WHERE GeometryType(geometry)='POINT'
user30184

Você já conseguiu fazer isso funcionar? Estou um pouco surpreso que isso ainda não esteja incorporado ao QGIS, pois várias geometrias estão dentro das especificações do ogc.
Auslander

@auslander, desculpe, não encontrei um caminho e deixei o problema naquela época.
Chau

1
Eu não posso; está em uma rede interna. No entanto, não estou procurando a filtragem do GeoServer; Estou procurando a filtragem QGIS. Pelo que sei, o QGIS não me permite acessar uma URL com filtros adicionados pelo manipulador WFS - o manipulador usa uma URL WFS base e, em seguida, argumentos / filtros são adicionados em um construtor de expressões semelhante a SQL. Não consegui encontrar nenhuma documentação sobre esse recurso específico do QGIS.
Auslander

Respostas:


2

No QGIS 3.6, isso não é possível se você adicionar o WFS através do painel do navegador. No entanto, se você adicionar o WFS através de Camada> Adicionar camada> Adicionar camada WFS, poderá aplicar o SQL à camada.

Portanto, do zero, faça o seguinte:

  • Depois de selecionar Camada> Adicionar camada> Adicionar camada WFS, na próxima janela, selecione Novo para adicionar um novo serviço.
  • Digite um nome e a URL do serviço.
  • Clique na guia Básico e insira suas credenciais, se necessário.
  • Deixe as configurações de Opções do WFS como padrão e clique em OK.
  • Se você inseriu credenciais, receberá um aviso sobre o armazenamento de senhas. Pressione OK para continuar.
  • Clique em Conectar para conectar-se ao serviço recém-adicionado, realce a camada desejada e clique em Criar consulta.
  • Na cláusula Where, adicione o seguinte: geometryType(geom_field) = 'LineString'substituindo geom_field pelo nome do campo que armazena a geometria. Você deve encontrar isso no menu suspenso Colunas à direita. As opções de geometria incluem Point, MultiPoint, LineString, LinearRing, MultiLineString, Polygon, MultiPolygon, GeometryCollectionClick OK.
  • Clique em Adicionar para adicionar a camada ao mapa.
  • Clique em Fechar para retornar ao mapa.

Não consegui encontrar isso em lugar nenhum e descobri-me usando parte da resposta a essa pergunta como ponto de partida. Espero que ajude outras pessoas a procurar a mesma solução alternativa até que o QGIS facilite um pouco.


1

Até onde eu sei, isso atualmente não é possível, mas já existe uma solicitação de recurso relacionada: https://issues.qgis.org/issues/17372

Verificando agora mesmo com o bag:verblijfsobjectexemplo dos comentários:

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

Uma consulta como a seguinte (onde não selecionamos a geometria do ponto), como parte das informações de conexão no Data Source Manager | WFS> Criar consulta, resulta na devolução dos pontos.

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.