WMS GetFeatureInfo

Getfeatureinfo er et mulig kall mot en WMS-tjeneste. I kallet benyttes bilde-koordinater i et fiktivt bilde. Dersom det finnes kartobjekter av den etterspurte objekttypen på dette stedet vil WMS-tjenesten returnere egenskapsdata for disse.

Getfeatureinfo-kallet har alle parametrene som et WMS-kall i tillegg til et sett med bilde-koordinater og informasjon om hvilket kartlag det ønskes egenskapsdata om.

Eksempel på WMS-kall:

https://wms.geonorge.no/skwms1/wms.topo
?bbox=1185691.18,8576234.57,1186302.68,8576846.07
&format=image/png
&service=WMS
&version=1.3.0
&request=GetMap
&crs=EPSG:3857
&width=256
&height=256
&layers=topo
&styles=default
&transparent=false

topo

Eksempel på GetFeatureInfo-kall med samme bilde-avgrensning:

https://wms.geonorge.no/skwms1/wms.topo
?bbox=1185691.18,8576234.57,1186302.68,8576846.07
&format=image/png
&service=WMS
&version=1.3.0
&REQUEST=GetFeatureInfo
&crs=EPSG:3857
&width=256
&height=256
&layers=topo
&styles=default
&transparent=false
&QUERY_LAYERS=fkb_samferdsel
&INFO_FORMAT=text/plain
&I=256
&J=128

Test kallet her

Mapbox-eksempel med geografiske koordinater

/**
 * veier.js
 * 
 * GetFeatureinfo-kall med geografiske koordinater i EPSG:4326
 * 
 * NB: 
 * EPSG:4326 har breddegrad (latitude) som første akse.
 * Rekkefølge på koordinatene i BBOX blir dermed
 * BBOX=southwestLatitude,soutwestLongitude,northeastLatitude,norteastLongitude
 * Se avsnitt 6.7.4 i WMS-spesifikasjonen fra OGC,
 * https://www.ogc.org/standard/wms/
 * 
 * 
 * sverre.stikbakke 21.03.2024
 */

map.on('click', async (e) => {

    const sw = map.getBounds().getSouthWest();
    const ne = map.getBounds().getNorthEast();

    const getFeatureInfoUrl =
        'https://wms.geonorge.no/skwms1/wms.topo'
        + '?VERSION=1.3.0'
        + '&REQUEST=GetFeatureInfo'
        + '&LAYERS=topo'
        + '&STYLES=default'
        + '&CRS=EPSG:4326'
        + `&BBOX=${sw.lat},${sw.lng},${ne.lat},${ne.lng}`
        + `&WIDTH=${map.getCanvas().width}`
        + `&HEIGHT=${map.getCanvas().height}`
        + '&FORMAT=image/png'
        + '&QUERY_LAYERS=fkb_samferdsel'
        + '&INFO_FORMAT=text/plain'
        + `&I=${e.point.x}`
        + `&J=${e.point.y}`;

    const getFeatureInfoResponse = await fetch(getFeatureInfoUrl);
    const featureInfoText = await getFeatureInfoResponse.text();

    const featureInfoString = `<div style="font-size:medium">
                        <pre>${featureInfoText}</pre>
                    </div>`;

    new mapboxgl.Popup({ maxWidth: 'none' })
        .setLngLat(e.lngLat)
        .setHTML(featureInfoString)
        .addTo(map);
});

map.on('mouseover', () => {
    map.getCanvas().style.cursor = 'crosshair';
});

map.on('mouseleave', () => {
    map.getCanvas().style.cursor = '';
});

veier.html

Noen momenter vedrørende getfeatureinfo-kall

<Capability>
  <Request>
    <GetCapabilities>
      <Format>text/xml</Format>

Referanser


NTNU 17.02.2025 Sverre Stikbakke