Estou executando um serviço de mapeamento local simples baseado na pilha PostGIS / GeoServer / OpenLayers.
Após o tutorial do opengeo, vinculei os eventos de clique no OpenLayers à chamada WMS GetFeatureInfo usando:
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"
);
});
Eu usei os modelos FreeMarker do GeoServer para formatar a resposta corretamente. O problema que tenho é que a resposta que recebo retorna todos os campos da camada.
Existe uma maneira de selecionar os que são relevantes para o usuário?
Apenas não inclua os campos que você não deseja no seu modelo de marcador gratuito. Consulte http://docs.geoserver.org/trunk/en/user/tutorials/GetFeatureInfo/index.html#custom-templates
fonte
Você pode fazer isso usando o parâmetro de solicitação WMS GeoServer propertyName:
http://docs.geoserver.org/stable/en/user/services/wms/vendor.html#propertyname
fonte
Você pode adicionar instruções condicionais aos modelos de marcadores gratuitos.
Por exemplo, no seu arquivo content.ftl, você pode adicionar algo assim para listar apenas "YOUR_FIELDNAME".
Como alternativa, você pode excluir um campo fazendo o seguinte:
fonte
Que tal isso?
De: http://trac.osgeo.org/openlayers/wiki/GetFeatureInfo
fonte