Bagaimana memilih bidang yang dikembalikan oleh permintaan GeoServer WMS GetFeatureInfo?


9

Saya menjalankan layanan pemetaan lokal sederhana berdasarkan tumpukan PostGIS / GeoServer / OpenLayers.

Mengikuti tutorial pembuka Saya telah mengaitkan acara klik di OpenLayers ke panggilan WMS GetFeatureInfo menggunakan:

    map.events.register('click', map, function (e) {
        var url = "http://localhost:1979/geoserver/wms" 
          + "?REQUEST=GetFeatureInfo"
          + "&EXCEPTIONS=application/vnd.ogc.se_xml"
          + "&BBOX=" + map.getExtent().toBBOX()
          + "&X=" + e.xy.x
          + "&Y=" + e.xy.y
          + "&INFO_FORMAT=text/html"
          + "&QUERY_LAYERS=MYDATA:MYLAYER"
          + "&LAYERS=MYDATA:MYLAYER"
          + "&FEATURE_COUNT=5"
          + "&SRS=EPSG:3857"
          + "&STYLES="
          + "&WIDTH=" + map.size.w
          + "&HEIGHT=" + map.size.h;
        window.open(url,
          "getfeatureinfo",
          "location=0,status=0,scrollbars=1,width=800,height=125"
        );
      });

Saya telah menggunakan template FreeMarker GeoServer untuk memformat respons dengan benar. Masalah yang saya miliki adalah bahwa respons yang saya dapatkan mengembalikan semua bidang dari layer.

Apakah ada cara untuk memilih yang relevan bagi pengguna?

Jawaban:


7

Tidak terlihat bagus ( sumber ):

... GetFeatureInfo [...] adalah permintaan WMS dan WFS. [...] Satu perbedaan dalam perilaku mereka adalah Geoserver mengirimkan selalu semua atribut dengan GetFeatureInfo tetapi dengan WFS daftar atribut dapat diberikan dalam permintaan.

Anda bisa membuat tampilan yang hanya berisi atribut yang ingin / harus dilihat dan dilayani oleh pengguna melalui Geoserver.

Alternatifnya adalah menyesuaikan template GetFeatureInfo .


2
menampilkan atau tidak menampilkan adalah satu hal tetapi radek ingin mengembalikan hanya beberapa nilai bidang. Itu membuat perbedaan besar mengenai data yang ditransfer dan aspek keamanan.
simo

2
Itu sebabnya saran pertama saya adalah membuat tampilan.
underdark

Lebih lanjut tentang menggunakan LIHAT di sini .
radek

7

Hanya saja, jangan memasukkan bidang yang tidak Anda inginkan dalam templat freemarker Anda. Lihat http://docs.geoserver.org/trunk/en/user/tutorials/GetFeatureInfo/index.html#custom-templates


Tautan yang baik, ada beberapa dokumentasi yang sangat bagus di situs Geoserver - Contoh ini menurut saya berguna (dengan sedikit mengotak-atik tentunya) untuk mengembalikan hanya bidang yang saya inginkan.
Ando



0

Anda dapat menambahkan pernyataan kondisional ke templat freemarker.

Misalnya dalam file content.ftl Anda, Anda dapat menambahkan sesuatu seperti ini hanya pada daftar "YOUR_FIELDNAME".

<#if attribute.name == "YOUR_FIELDNAME">
     <li>${attribute.name}: ${attribute.value}</li>
</#if>

Atau Anda dapat mengecualikan bidang dengan melakukan ini:

<#if !attribute.name == "YOUR_FIELDNAME">
     <li>${attribute.name}: ${attribute.value}</li>
</#if>

-2

Bagaimana dengan ini?

Juga, agar ini mengembalikan atribut (dan bukan hanya nama layer dan fitur id) Anda harus menambahkan "ows_include_items" "atribut1, attribute2, ..., attributeN" atau "ows_include_items" "all" ke bagian metadata dari WMS Anda entri file peta layer.

Dari: http://trac.osgeo.org/openlayers/wiki/GetFeatureInfo


Tapi Radek menggunakan Geoserver, bukan UMN Mapserver, jadi tidak ada file peta.
underdark

1
Saya sudah melihatnya. Saya tidak pernah menggunakan geoserver tapi saya kira ada satu cara untuk mengatur metadata juga, bukan?
simo
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.