Paksa tipe geometri dalam lapisan geometri campuran WFS di QGIS?


8

Saya memiliki sumber WFS eksternal yang menyajikan jenis geometri campuran - dengan kata lain, saya tidak memiliki kendali atas sumber. Saat menambahkan layer QGIS menetapkan tipe geometri ke garis dan dengan demikian saya tidak dapat menata titik dan poligon yang terkandung di dalam layer.

Nathan W menyatakan dalam komentar bahwa sebuah layer dalam QGIS hanya dapat berisi satu tipe geometri. Jika saya dapat secara eksplisit mengatur tipe geometri pada layer, saya bisa menambahkan layer tiga kali dan menggunakan satu layer untuk setiap tipe geometri.

Apakah mungkin untuk memaksa tipe geometri pada lapisan (WFS) di QGIS?

Atau adakah metode lain yang bisa saya gunakan untuk menata semua fitur dengan benar di lapisan WFS saya?


Saya pikir itu harus dimungkinkan untuk menggunakan kemampuan layanan filter WFS untuk memfilter FeatureTypes tergantung pada apakah itu gml: Point, gml: LineString, gml: Polygon, dll. Kemudian gunakan ini sebagai dasar lapisan individu
nmtoken

Tampaknya benar-benar mungkin jika server WFS adalah Geoserver docs.geoserver.org/stable/en/user/filter/function.html . Namun, semua server WFS mungkin tidak mendukung penyaringan berdasarkan tipe geometri. Pilihan lain bisa menggunakan format GDAL VRT dan membiarkannya melakukan penyaringan misalnya dengan SQLite SQL dialek dan (belum teruji) seperti SELECT * from WFS_layer WHERE GeometryType(geometry)='POINT'
SrcSQL

Apakah Anda pernah berhasil ini? Saya agak terkejut ini belum dibangun ke QGIS, karena beberapa geometri berada dalam spesifikasi ogc.
auslander

@auslander, Maaf, saya tidak menemukan jalan dan meninggalkan masalah saat itu.
Chau

1
Saya tidak bisa; itu di jaringan internal. Namun, saya tidak mencari penyaringan GeoServer; Saya mencari penyaringan QGIS. Dari apa yang saya tahu, QGIS tidak mengizinkan saya untuk mengakses URL dengan filter yang ditambahkan dari penangan WFS - penangan mengambil URL WFS dasar, dan kemudian argumen / filter ditambahkan dalam pembangun ekspresi seperti SQL. Saya tidak dapat menemukan dokumentasi tentang fitur QGIS ini.
auslander

Jawaban:


2

Dalam QGIS 3.6 ini tidak mungkin jika menambahkan WFS melalui panel browser. Namun, jika Anda menambahkan WFS melalui Layer> Add Layer> Add WFS Layer Anda kemudian dapat menerapkan SQL ke layer.

Jadi, dari awal, lakukan hal berikut:

  • Setelah Anda memilih Layer> Add Layer> Add WFS Layer, di jendela berikutnya pilih New untuk menambahkan layanan baru.
  • Masukkan Nama dan URL layanan.
  • Klik tab Dasar dan masukkan kredensial Anda jika diperlukan.
  • Biarkan pengaturan WFS Options sebagai default dan klik OK.
  • Jika Anda memasukkan kredensial, Anda akan menerima peringatan tentang menyimpan kata sandi. Tekan OK untuk melanjutkan.
  • Klik Sambungkan untuk menyambung ke layanan yang baru ditambahkan dan sorot lapisan yang Anda inginkan dan klik Bangun kueri.
  • Di klausa mana, tambahkan berikut ini: geometryType(geom_field) = 'LineString'mengganti geom_field dengan nama bidang yang menyimpan geometri. Anda harus dapat menemukan ini di dropdown Kolom di sebelah kanan. Opsi geometri meliputi Titik, MultiPoint, LineString, LinearRing, MultiLineString, Polygon, MultiPolygon, GeometryCollectionClick OK.
  • Klik Tambah untuk menambahkan lapisan ke peta.
  • Klik Tutup untuk kembali ke peta.

Saya tidak dapat menemukan ini di mana pun dan telah menemukan jawabannya sendiri menggunakan sebagian dari jawaban untuk pertanyaan ini sebagai titik awal. Saya harap ini membantu orang lain mencari solusi yang sama sampai QGIS membuatnya sedikit lebih mudah.


1

Sejauh yang saya tahu, ini saat ini tidak mungkin tetapi sudah ada permintaan fitur terkait: https://issues.qgis.org/issues/17372

Memeriksa sekarang dengan bag:verblijfsobjectcontoh dari komentar:

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

Kueri seperti berikut (di mana kami tidak memilih geometri titik), sebagai bagian dari informasi koneksi dalam Pengelola Sumber Data | WFS> Build Query, menghasilkan poin yang dikembalikan.

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.