J'exécute un service de cartographie local simple basé sur la pile PostGIS / GeoServer / OpenLayers.
Après le tutoriel opengeo, j'ai lié les événements de clic dans OpenLayers à l'appel WMS GetFeatureInfo en utilisant:
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"
);
});
J'ai utilisé les modèles FreeMarker de GeoServer pour formater correctement la réponse. Le problème que j'ai, c'est que la réponse que j'obtiens renvoie tous les champs de la couche.
Existe-t-il un moyen de sélectionner ceux qui sont pertinents pour l'utilisateur?
N'incluez tout simplement pas les champs dont vous ne voulez pas dans votre modèle de marque déposée. Voir http://docs.geoserver.org/trunk/en/user/tutorials/GetFeatureInfo/index.html#custom-templates
la source
Pour ce faire, utilisez le paramètre de requête WMS GeoServer propertyName:
http://docs.geoserver.org/stable/en/user/services/wms/vendor.html#propertyname
la source
Vous pouvez ajouter des instructions conditionnelles aux modèles de marque libre.
Par exemple, dans votre fichier content.ftl, vous pouvez ajouter quelque chose comme ceci pour ne répertorier que "YOUR_FIELDNAME".
Vous pouvez également exclure un champ en procédant comme suit:
la source
Et ça?
De: http://trac.osgeo.org/openlayers/wiki/GetFeatureInfo
la source