WMSGetFeatureInfo с большим количеством слоёв

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
yarovka
Интересующийся
Сообщения: 18
Зарегистрирован: 05 мар 2010, 18:34
Репутация: 0

WMSGetFeatureInfo с большим количеством слоёв

Сообщение yarovka » 16 фев 2012, 14:23

Доброго времени суток!

При отображении карты с большим количеством слоёв и запросом атрибутов точечных данных (используя GeoExt.popup и WMSGetFeatureInfo), popup появляется только на первом отображаемом слое (любой первый выбранный), причем пустой, без необходимой информации. При выборе остальных - не появляется даже пустой popup.

Код следующий:

Код: Выделить всё


<script type="text/javascript">
Ext.onReady(function() {

var map = new OpenLayers.Map();

var googlemapsatellite = new OpenLayers.Layer.Google(
"Google Satellite",
{type: G_SATELLITE_MAP}
);
googlemapsatellite.setIsBaseLayer(true);
map.addLayer(googlemapsatellite);

var layers = [

new OpenLayers.Layer.WMS("слой 1",
"мой_первый_слой",
{
layers: "мой_первый_слой",
transparent: true
},
{reproject: true},
{
isBaseLayer: false,
buffer: 0
}),

new OpenLayers.Layer.WMS("слой 2",
"мой_второй_слой",
{
transparent: "TRUE",
layers: "мой_второй_слой",
},
{reproject: true},
{
isBaseLayer: false,
buffer: 0
}
)
];

var mappanel = new GeoExt.MapPanel({
renderTo: 'gxmap',
height: 600,
width: 750,
map: map,
title: 'Basic Map',
center: [-7.92114,42.90816],
zoom: 8,
layers: layers
});

var tree = new Ext.tree.TreePanel({
renderTo: 'layers',
border: true,
region: "west",
title: "Layers",
height: 600,
width: 250,
root: {},
rootVisible: false,
enableDD: true
});
tree.render(document.body);

var node = new GeoExt.tree.BaseLayerContainer({
text: "Base Layers"
});
tree.root.appendChild(node);

var node = new GeoExt.tree.OverlayLayerContainer({
text: "Overlay Layers",
expanded: true
});
tree.root.appendChild(node);
node.eachChild(function(child) {
child.ui.toggleCheck(false);
}
);


var legendPanel = new GeoExt.LegendPanel({
title: "Legend",
renderTo: "legend",
defaults: {
style: 'padding:5px'
},
width: 250,
height: 600,
border: true,
bodyStyle: 'padding:5px'
});
legendPanel.render(document.body);

map.addControl(
new OpenLayers.Control.WMSGetFeatureInfo({
autoActivate: true,
infoFormat: 'text/plain',
maxFeatures: 1000,
layers: layers,
queryVisible: true,
eventListeners: {
'getfeatureinfo': function(e) {
new GeoExt.Popup({
title: "Attributes",
width: 200,
height: 200,
map: map,
location: e.xy,
}).show();
}
}
}));
});



Почему так происходит?
Если кто-то сталкивался с подобной проблемой, подскажите решение, пожалуйста.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: WMSGetFeatureInfo с большим количеством слоёв

Сообщение Denis Rykov » 16 фев 2012, 14:35

Замечание сходу - OpenLayers.Layer.WMS принимает при создании 4 группы параметров, а у вас 5. Описание слоя должно выглядеть так:

Код: Выделить всё


new OpenLayers.Layer.WMS(
"Имя слоя",
"http://...",
{
layers: "мой_первый_слой",
transparent: true
},
{
reproject: true,
isBaseLayer: false,
buffer: 0
}
);

reproject - deprecated, не используйте это свойство.
Spatial is now, more than ever, just another column- The Geometry Column.

yarovka
Интересующийся
Сообщения: 18
Зарегистрирован: 05 мар 2010, 18:34
Репутация: 0

Re: WMSGetFeatureInfo с большим количеством слоёв

Сообщение yarovka » 16 фев 2012, 14:41

Без reproject мои слои неправильно накладываются на слой Google.

yarovka
Интересующийся
Сообщения: 18
Зарегистрирован: 05 мар 2010, 18:34
Репутация: 0

Re: WMSGetFeatureInfo с большим количеством слоёв

Сообщение yarovka » 16 фев 2012, 16:29

разобралась с порядком появления popup'a, однако, появляется он пустой. без данных... помогите, в чем ошибка?... в параметрах WMSGetFeatureInfo прописала для каждого слоя url, а в параметре layers указала layers - моя общая переменная для всех слоев. может в этом ошибка? может каждому слою надо присвоить переменную?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: WMSGetFeatureInfo с большим количеством слоёв

Сообщение Denis Rykov » 16 фев 2012, 21:05

yarovka писал(а):Без reproject мои слои неправильно накладываются на слой Google.
Для этого нужно указать sphericalMercator: true для гугло-слоя:

Код: Выделить всё


var googlemapsatellite = new OpenLayers.Layer.Google(
"Google Satellite",
{
type: G_SATELLITE_MAP,
sphericalMercator: true
}
);

И да, может перключиться на Google Maps API v3, v2 считается устаревшим.
Spatial is now, more than ever, just another column- The Geometry Column.

yarovka
Интересующийся
Сообщения: 18
Зарегистрирован: 05 мар 2010, 18:34
Репутация: 0

Re: WMSGetFeatureInfo с большим количеством слоёв

Сообщение yarovka » 16 фев 2012, 21:10

Последние 2 часа как раз занималась тем, что переходила на Google Maps v3. Сразу появились проблемы. С большинством справилась. Даже wmsgetfeatureinfo заработал. Однако перестали отображаться слои. Полагаю, это из-за проекции? Нужно сами слои редактировать (MapServer)?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: WMSGetFeatureInfo с большим количеством слоёв

Сообщение Denis Rykov » 16 фев 2012, 21:10

yarovka писал(а):в параметрах WMSGetFeatureInfo прописала для каждого слоя url, а в параметре layers указала layers - моя общая переменная для всех слоев. может в этом ошибка? может каждому слою надо присвоить переменную?
Ничего не понятно, url внутри WMSGetFeatureInfo? URL уже дожны быть прописаны при определении слоёв, поэтому куда вы поместили его внутри WMSGetFeatureInfo - не понятно, и layers: layers внутри WMSGetFeatureInfo означает, что этот контрол будет слушать только слои из массива layers. А в чем проблема-то, выводится пустой попап?
Spatial is now, more than ever, just another column- The Geometry Column.

yarovka
Интересующийся
Сообщения: 18
Зарегистрирован: 05 мар 2010, 18:34
Репутация: 0

Re: WMSGetFeatureInfo с большим количеством слоёв

Сообщение yarovka » 16 фев 2012, 21:24

Denis Rykov писал(а):
yarovka писал(а):в параметрах WMSGetFeatureInfo прописала для каждого слоя url, а в параметре layers указала layers - моя общая переменная для всех слоев. может в этом ошибка? может каждому слою надо присвоить переменную?
Ничего не понятно, url внутри WMSGetFeatureInfo? URL уже дожны быть прописаны при определении слоёв, поэтому куда вы поместили его внутри WMSGetFeatureInfo - не понятно, и layers: layers внутри WMSGetFeatureInfo означает, что этот контрол будет слушать только слои из массива layers. А в чем проблема-то, выводится пустой попап?
Да, именно так. Выводился пустой попап. Пришлось на каждый слой делать свой попап. Только так стали выводиться данные карты.

yarovka
Интересующийся
Сообщения: 18
Зарегистрирован: 05 мар 2010, 18:34
Репутация: 0

Re: WMSGetFeatureInfo с большим количеством слоёв

Сообщение yarovka » 16 фев 2012, 21:30

В дополнение к предыдущему сообщению:

Код: Выделить всё


map.addControl(
new OpenLayers.Control.WMSGetFeatureInfo({
url: 'карта_1',
autoActivate: true,
infoFormat: 'text/plain',
maxFeatures: 1000,
layers: layers,
queryVisible: true,
eventListeners: {
'getfeatureinfo': function(e) {
new GeoExt.Popup({
title: "Attributes",
width: 200,
map: map,
location: e.xy,
html: e.text
}).show();
}
}
}));

map.addControl(
new OpenLayers.Control.WMSGetFeatureInfo({
url: 'карта_2',
autoActivate: true,
infoFormat: 'text/plain',
maxFeatures: 1000,
layers: layers,
queryVisible: true,
eventListeners: {
'getfeatureinfo': function(e) {
new GeoExt.Popup({
title: "Attributes",
width: 200,
autoScroll: true,
map: map,
location: e.xy,
html: e.text,
}).show();
}
}
}));



только после такого редактирования стали работать правильно запросы wmsgetfeatureinfo к каждой карте

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: WMSGetFeatureInfo с большим количеством слоёв

Сообщение Denis Rykov » 16 фев 2012, 21:39

Так точно делать не нужно. И даже если оставить включенным ровно один из слоёв, используемых внутри layers - всё равно открывается пустой попап?
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя