GeoServer WMS GetFeatureInfo 요청에 의해 반환 된 필드를 선택하는 방법은 무엇입니까?


9

PostGIS / GeoServer / OpenLayers 스택을 기반으로 간단한 로컬 매핑 서비스를 실행하고 있습니다.

opengeo 튜토리얼에 따라 OpenLayers의 클릭 이벤트를 다음을 사용하여 WMS GetFeatureInfo 호출에 연결했습니다.

    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"
        );
      });

GeoServer의 FreeMarker 템플릿 을 사용하여 응답의 형식을 올바르게 지정했습니다. 내가 가진 문제는 내가 얻은 응답이 레이어에서 모든 필드를 반환한다는 것입니다.

사용자와 관련된 것을 선택하는 방법이 있습니까?

답변:


7

잘 보이지 않습니다 ( source ) :

... GetFeatureInfo [...]는 WMS 요청 및 WFS입니다. [...] 동작의 한 가지 차이점은 Geoserver는 항상 모든 속성을 GetFeatureInfo로 전송하지만 WFS에서는 요청에 속성 목록을 제공 할 수 있다는 것입니다.

사용자가 Geoserver를 통해 보거나 제공하고 싶은 속성 만 포함하는보기를 만들 수 있습니다.

다른 방법은 다이 GetFeatureInfo 템플릿조정 하는 것 입니다.


2
표시 또는 표시하지 않는 것이 하나이지만 radek는 일부 필드 값만 반환하려고합니다. 전송 된 데이터 및 보안 측면에서 큰 차이를 만듭니다.
simo

2
그렇기 때문에 첫 번째 제안은 뷰를 만드는 것이 었습니다.
underdark

VIEWs 사용에 대한 자세한 내용은 여기 를 참조 하십시오 .
radek

7

프리 마커 템플릿에 원하지 않는 필드를 포함시키지 마십시오. http://docs.geoserver.org/trunk/en/user/tutorials/GetFeatureInfo/index.html#custom-templates를 참조 하십시오.


좋은 링크, 지오 서버 사이트에 좋은 문서가 있습니다.이 예제는 원하는 필드 만 반환하는 데 유용합니다 (물론 약간의 조정이 필요합니다).
Ando


5

GeoServer propertyName WMS 요청 매개 변수를 사용하여이를 수행 할 수 있습니다.

http://docs.geoserver.org/stable/en/user/services/wms/vendor.html#propertyname


나에게 이것은 최고의 솔루션입니다! 1. 매우 간단합니다! 2. 다른 응용 프로그램에서 전체 기능 정보를 만들 수도 있습니다. 템플릿을 사용하면 더 이상 불가능합니다! 3. 마지막으로 네트워크 트래픽이 훨씬 작아서 완전한 기능을 요청합니다! 탱크를!
marcel

0

프리 마커 템플릿에 조건문을 추가 할 수 있습니다.

예를 들어 content.ftl 파일에서 "YOUR_FIELDNAME"만 나열하기 위해 이와 같은 것을 추가 할 수 있습니다.

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

또는 다음을 수행하여 필드를 제외 할 수 있습니다.

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

-2

이건 어때?

또한이 속성이 레이어 이름 및 기능 ID뿐만 아니라 속성을 반환하려면 "ows_include_items" "attribute1, attribute2, ..., attributeN"또는 "ows_include_items" "all"을 WMS의 메타 데이터 섹션에 추가해야합니다. 레이어의 맵 파일 항목.

보낸 사람 : http://trac.osgeo.org/openlayers/wiki/GetFeatureInfo


그러나 Radek은 UMN Mapserver가 아닌 Geoserver를 사용하므로 맵 파일이 없습니다.
underdark

1
나는 그것을 보았다. 지오 서버를 사용한 적이 없지만 메타 데이터를 설정하는 한 가지 방법이 있다고 생각합니다.
simo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.