Страница 1 из 2
OpenLayers WMSGetFeatureInfo пример
Добавлено: 20 апр 2011, 13:14
SantoSB
Здравствуйте! у меня OpenLayers+WMS необходимо получить информацию об объекте по клику на него. нашел следующи пример использования WMSGetFeatureInfo
пример После добавления
Код: Выделить всё
infoControls = {
click: new OpenLayers.Control.WMSGetFeatureInfo({
url: 'http://demo.opengeo.org/geoserver/wms',
title: 'Identify features by clicking',
layers: [water],
queryVisible: true
}),
hover: new OpenLayers.Control.WMSGetFeatureInfo({
url: 'http://demo.opengeo.org/geoserver/wms',
title: 'Identify features by clicking',
layers: [water],
hover: true,
// defining a custom format options here
formatOptions: {
typeName: 'water_bodies',
featureNS: 'http://www.openplans.org/topp'
},
queryVisible: true
})
}
OpenLayers+WMS перестает работать ничего не показывается. Если кто-то писал подобную функциональность через WMSGetFeatureInfo можете привести пример?!
Заранее спасибо!
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 20 апр 2011, 14:04
Mavka
1 +
2 +
3
Все запросы к серверу прекрасно видно в Firebug на вкладке Console.
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 20 апр 2011, 15:42
SantoSB
Спасибо!
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 21 апр 2011, 13:55
SantoSB
почитал ссылки!Все сделал почему-то при клике на карту в заголовке нет REQUEST код:
Код: Выделить всё
<html>
<head>
<title>OpenLayers Example</title>
<script
src="../htdocs/OpenLayers.js"></script>
<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAINgesJb4VJ2iYHIcc-gT7hQGhS5yCmtMNZMUBKgpbJFW2uH_cRSd35D9AE7VSWY096Cd7dLkCk3bRA" type="text/javascript" encoding="utf-8"></script>
<script defer="defer" type="text/javascript">
var lon = 43;
var lat = 45;
var zoom = 8;
function load()
{
var map = new OpenLayers.Map('map');
map.addControl(new OpenLayers.Control.LayerSwitcher());
var gmap = new OpenLayers.Layer.Google(
"Google Streets", // the default
{numZoomLevels: 20}
);
var gsat = new OpenLayers.Layer.Google(
"Google Satellite",
{type: G_SATELLITE_MAP, numZoomLevels: 20}
);
var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"http://localhost/cgi-bin/mapserv.exe",
{
map: '/ms4w/apps/tutorial/htdocs/sk2.map',
transparent: 'TRUE',
layers: 'sk_rayon_deg',
},
{'reproject': true} );
var wms_info = new OpenLayers.Control.WMSGetFeatureInfo(
{
title: 'wmsinfo',
layers: ['sk_rayon_deg'],
url: 'http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/tutorial/htdocs/sk2.map&',
queryVisible: true
});
map.addLayers([gsat,gmap,wms]);
map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
map.addControl(new OpenLayers.Control.LayerSwitcher());
wms_info.events.register('getfeatureinfo', this, showInfo);
map.addControl(wms_info);
wms_info.activate();
}
function showInfo(evt)
{
var popup_markers = new OpenLayers.Popup.FramedCloud(
"chicken",
map.getLonLatFromPixel(evt.xy),
null,
evt.text,
null,
true
);
map.addPopup(popup_markers);
}
</script>
</head>
<body onload="load()">
<div style="width:100%; height:100%" id="map"></div>
</body>
</html>
это кусок кода из map файла
Код: Выделить всё
WEB
TEMPLATE '/ms4w/apps/tutorial/templates/template1.html'
IMAGEPATH '/ms4w/tmp/ms_tmp/'
IMAGEURL '/ms_tmp/'
METADATA
wms_title "Заголовок"
wms_abstract "Описание"
wms_onlineresource "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/tutorial/htdocs/sk2.map&"
wms_getfeatureinfo "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/tutorial/htdocs/sk2.map&"
wms_featureinfoformat "text/plain"
wms_feature_info_mime_type "text/html"
wms_srs "EPSG:4326"
END
END
Подскажите в чем может быть проблема?
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 21 апр 2011, 13:56
SantoSB
почитал ссылки!Все сделал почему-то при клике на карту в заголовке нет REQUEST код:
Код: Выделить всё
<html>
<head>
<title>OpenLayers Example</title>
<script
src="../htdocs/OpenLayers.js"></script>
<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAINgesJb4VJ2iYHIcc-gT7hQGhS5yCmtMNZMUBKgpbJFW2uH_cRSd35D9AE7VSWY096Cd7dLkCk3bRA" type="text/javascript" encoding="utf-8"></script>
<script defer="defer" type="text/javascript">
var lon = 43;
var lat = 45;
var zoom = 8;
function load()
{
var map = new OpenLayers.Map('map');
map.addControl(new OpenLayers.Control.LayerSwitcher());
var gmap = new OpenLayers.Layer.Google(
"Google Streets", // the default
{numZoomLevels: 20}
);
var gsat = new OpenLayers.Layer.Google(
"Google Satellite",
{type: G_SATELLITE_MAP, numZoomLevels: 20}
);
var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"http://localhost/cgi-bin/mapserv.exe",
{
map: '/ms4w/apps/tutorial/htdocs/sk2.map',
transparent: 'TRUE',
layers: 'sk_rayon_deg',
},
{'reproject': true} );
var wms_info = new OpenLayers.Control.WMSGetFeatureInfo(
{
title: 'wmsinfo',
layers: ['sk_rayon_deg'],
url: 'http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/tutorial/htdocs/sk2.map&',
queryVisible: true
});
map.addLayers([gsat,gmap,wms]);
map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
map.addControl(new OpenLayers.Control.LayerSwitcher());
wms_info.events.register('getfeatureinfo', this, showInfo);
map.addControl(wms_info);
wms_info.activate();
}
function showInfo(evt)
{
var popup_markers = new OpenLayers.Popup.FramedCloud(
"chicken",
map.getLonLatFromPixel(evt.xy),
null,
evt.text,
null,
true
);
map.addPopup(popup_markers);
}
</script>
</head>
<body onload="load()">
<div style="width:100%; height:100%" id="map"></div>
</body>
</html>
это кусок кода из map файла
Код: Выделить всё
WEB
TEMPLATE '/ms4w/apps/tutorial/templates/template1.html'
IMAGEPATH '/ms4w/tmp/ms_tmp/'
IMAGEURL '/ms_tmp/'
METADATA
wms_title "Заголовок"
wms_abstract "Описание"
wms_onlineresource "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/tutorial/htdocs/sk2.map&"
wms_getfeatureinfo "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/tutorial/htdocs/sk2.map&"
wms_featureinfoformat "text/plain"
wms_feature_info_mime_type "text/html"
wms_srs "EPSG:4326"
END
END
Подскажите в чем может быть проблема?
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 21 апр 2011, 14:47
Mavka
В контроллере WMSGetFeatureInfo измените на:
В Firebug через DOM докопайтесь до контроллера и проверьте какие слои он цепляет.
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 29 сен 2011, 10:08
Pavel
Доброго времени суток!
Дабы не плодить похожие темы (их и так уже хватает), отпишусь здесь:)
Все та же проблема с WMSGetFeatureInfo.
Что есть:
OpenSuse 11.3
Apache 2.2.15
GeoServer 2.1.1
WMS 1.1.1
Скрипт:
Код: Выделить всё
<script defer="defer" type="text/javascript">
var info;
var bounds = new OpenLayers.Bounds(minX,minY,maxX,maxY);
var options = {
controls:[],
maxExtent: bounds,
maxResolution: 147.527050781249955,
projection: "",//указана правильно
units: 'm'
};
var map = new OpenLayers.Map('map', options);
var wms = new OpenLayers.Layer.WMS( "test",
"http://192.168.1.3:8080/geoserver/nurc/wms",
{layers: 'nurc:poligon_test',
STYLES: 'color',format: 'image/gif'
}
);
map.addLayer(wms);
map.zoomToMaxExtent();
// build up all controls
map.addControl(new OpenLayers.Control.PanZoomBar({
position: new OpenLayers.Pixel(2, 15)
}));
map.addControl(new OpenLayers.Control.Navigation());
map.addControl(new OpenLayers.Control.Scale($('scale')));
//map.addControl(new OpenLayers.Control.MousePosition({element: $('location')}));
map.zoomToExtent(bounds);
wms_info = new OpenLayers.Control.WMSGetFeatureInfo({
title: 'wmsinfo',
layers: [wms],
url: 'http://192.168.1.3:8080/geoserver/nurc/wms',
infoFormat: 'application/vnd.ogc.gml',
queryVisible: true
});
wms_info.events.register('getfeatureinfo', this, showInfo);
map.addControl(wms_info);
wms_info.activate();
map.zoomToMaxExtent();
function showInfo(e) {
var reg = /^reg\./;
var text = '';
for(i in e.features) {
if (i != 0) text += '<br>';
if (reg.test(e.features[i].fid)) {
if (e.features.length != 1)
text += '<b>Цвет:</b><br>';
text += e.features[i].attributes.A + ' "' +
e.features[i].attributes.B;
}
}
var popup = new OpenLayers.Popup.FramedCloud("popup",
map.getLonLatFromPixel(e.xy),
new OpenLayers.Size(200,200),
text,
null,
true
);
map.addPopup(popup);
}
</script>
Карта отрисовывается правильно и красиво.
При щелчке кнопкой мыши ничего не происходит, а в консоле ошибок огнелисы появляется строка:
Код: Выделить всё
Ошибка: OpenLayers.Control.WMSGetFeatureInfo is not a constructor
Источник: http://127.0.0.1/exapmle2.html
Строка: 49
Это в принципе раз.
Второй момент. Не могу понять, нужно ли в скрипте рисовать html-окружение для вывода информации (атрибутики)? Или этим занимается сам GeoServer?
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 29 сен 2011, 11:25
Denis Rykov
Версия OpenLayers?
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 29 сен 2011, 11:35
Pavel
OpenLayers 2.8
Могу ошибаться, так как взято из стандартной поставки GeoServer. То есть они уже там сами стоят:)
Во всяком случае, в ReadMe так написано.
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 29 сен 2011, 11:46
Denis Rykov
Попробуйте новую версию, на текущий момент - это 2.11, похоже ошибка в этом.
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 29 сен 2011, 11:51
Pavel
Да, спасибо! Я уже начал догадываться, куда вы намекаете.
Поставил 2.11. Скрипт без изменений. Все пути правильные.
При выборе объекта на карте происходит следующее:
Код: Выделить всё
Ошибка: элемент не найден
Источник: http://127.0.0.1/exapmle2.html
Строка: 1
Код: Выделить всё
Ошибка: this.size is null
Источник: http://192.168.1.3:8080/geoserver/openlayers/OpenLayers.js
Строка: 1759
exapmle2.html - это как раз и есть выполняемый скрипт.
Больше всего удивила как раз первая ошибка.
Копать уже в самом файле или все-таки это опять OpenLayers?
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 29 сен 2011, 12:37
Denis Rykov
Приведите код example2.html. Для отладки советую использовать
не минифицированную версию OL.
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 29 сен 2011, 12:51
Pavel
По сути, кода-то и нет. Почти.
Стандартная шапка html:
Код: Выделить всё
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://localhost:8080/geoserver/openlayers/theme/default/style.css"/>
<script src="http://192.168.1.3:8080/geoserver/openlayers/OpenLayers.js" type="text/javascript"></script>
</head>
<body>
<div style="width: 640px; height: 480px; border: 2px solid black;" id="map"></div>
<script defer="defer" type="text/javascript">
...
</script>
<div>test</div>
</body>
</html>
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 29 сен 2011, 13:01
Pavel
С предыдущей ошибкой разобрался: несовпадали размеры выводимой карты. Исправил на
Стала выползать другая:
Код: Выделить всё
Ошибка: load is not defined
Источник: http://127.0.0.1/exapmle2.html
Строка: 1
Добавил function load() {} - вернулась страя ошибка:
Код: Выделить всё
Ошибка: this.size is null
Источник: http://192.168.1.3:8080/geoserver/openlayers/lib/OpenLayers/Popup.js
Строка: 917
Re: OpenLayers WMSGetFeatureInfo пример
Добавлено: 29 сен 2011, 13:25
Denis Rykov
Я не понял, new OpenLayers.Size(640,480) - это вообще к чему? Приведите полностью ваш код, а не по частям, чтобы было удобнее.