#1 Tue 01 May 2012 10:42
- Winsclav
- Participant occasionnel
- Lieu: ÉfA
- Date d'inscription: 15 Feb 2012
- Messages: 23
[GeoServer+OpenLayers] Affichage d'attributs simples
Bonjour à tous,
J'ai un problème que je n'arrive pas à résoudre. J'essaye de réutiliser les exemples que proposent GeoServer ou OpenLayers pour la visualisation de données attributaires via GetFeatureInfo, mais cela bloque à chaque fois.
J'ai fait une copie du code que GeoServer propose pour la prévisualisation des couches (avec OpenLayers), mais je n'arrive pas à le faire tourner pour mon cas perso.
Ça se présente comme ça :
Code:
<html>
<head>
<script src="http://<>/web/openlayers-2.11/OpenLayers.js"></script>
<script type="text/javascript">
function init(){
var bounds = new OpenLayers.Bounds(-2000, -2000, 2000, 2000);
var options = {controls: [], maxExtent: bounds, maxResolution: 5, projection: "EPSG:2100", units: 'm'};
var map = new OpenLayers.Map('map', options);
var wms4 = new OpenLayers.Layer.WMS(
"at_delos",
"http://<>:8080/geoserver/wms",
{layers: 'at_delos',
format: 'image/png',
service: 'WMS',
version: '1.1.1',
request: 'GetMap',
srs: 'EPSG:2100',
bbox:'-527.36,-36.07,82.02,732.58',
width: '800',
height: '800'});
var wms = new OpenLayers.Layer.WMS(
"courbe2",
"http://<>:8080/geoserver/wms",
{layers: 'delos:courbe2_fus',
format: 'image/png',
service: 'WMS',
version: '1.1.1',
request: 'GetMap',
srs: 'EPSG:2100',
bbox: '-228.22,635.84,241.77,1245.84',
width: '800',
height: '800',
transparent: true});
map.addLayer(wms);
map.addLayer(wms4);
//code servant à l'appel des attributs
map.events.register('click', map, function (e){
document.getElementById('nodelist').innerHTML = "...";
alert("salut1");
var params = {
REQUEST: "GetFeatureInfo",
EXCEPTIONS: "application/vnd.ogc.se_xml",
BBOX: map.getExtent().toBBOX(),
SERVICE: "WMS",
INFO_FORMAT: 'text/html',
QUERY_LAYERS: map.layers[0].params.LAYERS,
FEATURE_COUNT: 50,
Layers: 'at_delos',
WIDTH: map.size.w,
HEIGHT: map.size.h,
format: 'image/png',
styles: map.layers[0].params.STYLES,
srs: map.layers[0].params.SRS};
alert("salut2");
// handle the wms 1.3 vs wms 1.1 madness
if(map.layers[0].params.VERSION == "1.3.0") {
params.version = "1.3.0";
params.j = e.xy.x;
params.i = e.xy.y;
} else {
params.version = "1.1.1";
params.x = e.xy.x;
params.y = e.xy.y;
}
alert("salut3");
// merge filters
if(map.layers[0].params.CQL_FILTER != null) {
params.cql_filter = map.layers[0].params.CQL_FILTER;}
if(map.layers[0].params.FILTER != null) {
params.filter = map.layers[0].params.FILTER;}
if(map.layers[0].params.FEATUREID) {
params.featureid = map.layers[0].params.FEATUREID;}
alert("salut4");
OpenLayers.loadURL("http://<>:8080/geoserver/wms", params, this, setHTML, setHTML);
OpenLayers.Event.stop(e);
});
}
</script>
</head>
<body onload="init()">
<div id="map" style="width: 800px; height: 800px"></div>
<div id="scale"></div>
<div id="scaleBar"></div>
<div id="nodelist"></div>
</body>
</html>Tous mes messages d'alerte passent, mais en utilisant Firebug pour Firefox, j'obtiens un message d'erreur : "setHTML is not defined".
Avez-vous une idée du pourquoi et du comment régler ce problème ? Je ne sais pas si c'est à cause d'une erreur que j'écris ou bien s'il manque un élément dans mon code. Je bloque depuis pas mal de jours à essayer de réutiliser ce que GeoServer fait très bien, sans succès.
Merci pour votre aide.
ps: la même question a été posée sur forumsig à cette adresse..
Dernière modification par Winsclav (Tue 01 May 2012 10:45)
Hors ligne
#2 Thu 03 May 2012 17:49
- Erwan Trémiot
- Participant occasionnel
- Lieu: Dun sur Auron
- Date d'inscription: 14 May 2007
- Messages: 14
Re: [GeoServer+OpenLayers] Affichage d'attributs simples
Bonjour Winsclav,
il semblerait qu'il manque la fonction setHTML dans ton code. Si tu reprends le code généré par l'outil de prévisualisation OpenLayers dans Geoserver, il y a la fonction suivante
function setHTML(response){
document.getElementById('nodelist').innerHTML = response.responseText;
};
Cette fonction récupère le contenu renvoyé par Geoserver lors du getFeatureInfo et l'insère dans la div nodelist.
Cordialement.
Erwan
Hors ligne
#3 Sun 01 July 2012 12:27
- Winsclav
- Participant occasionnel
- Lieu: ÉfA
- Date d'inscription: 15 Feb 2012
- Messages: 23
Re: [GeoServer+OpenLayers] Affichage d'attributs simples
Solution trouvée : abandonner cette idée et faire autre chose.
Code:
var infowms = new OpenLayers.Control.WMSGetFeatureInfo({
url: URL_WMS,
title: 'Identify features by clicking',
queryVisible: true,
eventListeners:
{
getfeatureinfo: function(event)
{
map.addPopup(new OpenLayers.Popup.FramedCloud(
"ident",
map.getLonLatFromPixel(event.xy),
null,
event.text,
null,
true
));
}
}
});
map.addControl(infowms);Ça, ça marche impec' !
Hors ligne


