Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
-
Pavel
- Активный участник
- Сообщения: 171
- Зарегистрирован: 15 июл 2009, 07:45
- Репутация: 7
Сообщение
Pavel » 29 сен 2011, 13:35
Хорошо. Вот:
Код: Выделить всё
<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/lib/OpenLayers.js" type="text/javascript"></script>
<script defer="defer" type="text/javascript">
var info;
function load() {
var bounds = new OpenLayers.Bounds(...);
var options = {
controls:[],
maxExtent: bounds,
maxResolution: 147.527050781249955,
projection: "EPSG:32638",
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: 'PH-test',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+ ' "'
}
}
var popup = new OpenLayers.Popup.FramedCloud("popup",
map.getLonLatFromPixel(e.xy),
new OpenLayers.Size(640,480),
text,
null,
true
);
map.addPopup(popup);
}
}
</script>
</head>
<body onload="load()">
<div style="width: 640px; height: 480px; border: 2px solid black;" id="map"></div>
<div>test</div>
</body>
</html>
Быстро, качественно, недорого - выбирайте любые два пункта...
-
Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
-
Контактная информация:
Сообщение
Denis Rykov » 29 сен 2011, 13:44
Spatial is now, more than ever, just another column- The Geometry Column.
-
Pavel
- Активный участник
- Сообщения: 171
- Зарегистрирован: 15 июл 2009, 07:45
- Репутация: 7
Сообщение
Pavel » 29 сен 2011, 13:52
Нет. Там нормальные координаты. Карта отображается правильно. Трудности возникают только при попытке сделать что-нибудь отличное от приблизить/отдалить/переместить.
Быстро, качественно, недорого - выбирайте любые два пункта...
-
Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
-
Контактная информация:
Сообщение
Denis Rykov » 30 сен 2011, 06:47
Похоже на проблему отображения попапа в случае пустого ответа. Попробуйте перед var popup = new OpenLayers.Popup.FramedCloud написать следующую строку, должно помочь:
Код: Выделить всё
(text === '') ? text = ' ' : text = text;
Spatial is now, more than ever, just another column- The Geometry Column.
-
Pavel
- Активный участник
- Сообщения: 171
- Зарегистрирован: 15 июл 2009, 07:45
- Репутация: 7
Сообщение
Pavel » 30 сен 2011, 07:35
Спасибо! Помогло!:)
Ну и на закуску.
При щелчке на объект показывает пустое всплывающее окошко.
В ошибках:
Код: Выделить всё
Ошибка: элемент не найден
Источник: http://127.0.0.1/exapmle3.html
Строка: 1
Смотреть опять в сторону html?
Быстро, качественно, недорого - выбирайте любые два пункта...
-
Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
-
Контактная информация:
Сообщение
Denis Rykov » 30 сен 2011, 08:34
От сервера ответ приходит?
Вот попытался воспроизвести ваш проект, только с другим WMS.
Spatial is now, more than ever, just another column- The Geometry Column.
-
Pavel
- Активный участник
- Сообщения: 171
- Зарегистрирован: 15 июл 2009, 07:45
- Репутация: 7
Сообщение
Pavel » 30 сен 2011, 09:02
Ответы приходят, окошки выскакивают. Но в них пусто.
(см.вложение)
Я начинаю подозревать, что проблемы в самом слое. С атрибутикой.
Сейчас посмотрел исходный код (и ваш и мой) и возникли два вопроса. Если ошибаюсь, то поправьте меня:
1.
Код: Выделить всё
text += e.features[i].attributes.address+ ' "'
Я так понимаю здесь address - это колонка в таблице атрибутов?
2.
Что за значение такое /^car/?
-
Вложения
-

- Снимок.png (25.98 КБ) 13581 просмотр
Быстро, качественно, недорого - выбирайте любые два пункта...
-
Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
-
Контактная информация:
Сообщение
Denis Rykov » 30 сен 2011, 09:24
1. Да
2. А это я у вас взял (по сути можно без этого, но я подумал, что вы специально такое условие накрутили) - это регулярка, только у вас var reg = /^reg\./, а у меня var reg = /^car/. В условии if (reg.test(e.features.fid)) матчатся только те фичи, fid которых соответствует регулярке, то есть в моём случае -начинающиеся с "car". Я в консоль вывожу объект ответа, так что можете изучить - что приходит у меня и посмотреть, что приходит у вас. С фаербагом дружите?
Spatial is now, more than ever, just another column- The Geometry Column.
-
Pavel
- Активный участник
- Сообщения: 171
- Зарегистрирован: 15 июл 2009, 07:45
- Репутация: 7
Сообщение
Pavel » 30 сен 2011, 09:30
_DR_ писал(а): С фаербагом дружите?
Да.
А по поводу регулярных условий... Стянул с примера.

Вот и пытаюсь понять, как все это делло работает.
Быстро, качественно, недорого - выбирайте любые два пункта...
-
Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
-
Контактная информация:
Сообщение
Denis Rykov » 30 сен 2011, 09:43
Тогда сделайте по-простому. Перепишите функцию showInfo, чтобы выглядела так:
Код: Выделить всё
function showInfo(e) {
var popup = new OpenLayers.Popup.FramedCloud("popup",
map.getLonLatFromPixel(e.xy),
new OpenLayers.Size(640,480),
e.text,
null,
true
);
map.addPopup(popup);
}
И в контроле WMSGetFeatureInfo уберите строку infoFormat: 'application/vnd.ogc.gml'.
Результат.
Spatial is now, more than ever, just another column- The Geometry Column.
-
Pavel
- Активный участник
- Сообщения: 171
- Зарегистрирован: 15 июл 2009, 07:45
- Репутация: 7
Сообщение
Pavel » 30 сен 2011, 12:24
Как все забавно получается...
Стал проверять - openlayers.org упал...
Надеюсь, не я его сломал...

Чуть по позже попробую и отпишусь
Быстро, качественно, недорого - выбирайте любые два пункта...
-
Pavel
- Активный участник
- Сообщения: 171
- Зарегистрирован: 15 июл 2009, 07:45
- Репутация: 7
Сообщение
Pavel » 03 окт 2011, 08:37
Итак... После тщательного разбора, нашел, что у меня не работает скрипт proxy.cgi. Толи поддержка не включена, толи еще что-то. Это будем копать...
При щелчке на объекте во всплывающем окне пишется
Код: Выделить всё
Access forbidden!
You don't have permission to access the requested object. It is either read-protected or not readable by the server.
If you think this is a server error, please contact the webmaster.
Что очень странно, так как все разрешения стоят правильно.
Исходя из этого вопрос: можно ли использовать popup без объявления прокси? Этот скрипт обязателен для всех запросов GetFeatureInfo? Или можно обойтись без него?
Быстро, качественно, недорого - выбирайте любые два пункта...
-
Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
-
Контактная информация:
Сообщение
Denis Rykov » 03 окт 2011, 09:42
Да, для запроса данных по AJAX - прокси обязателен.
Spatial is now, more than ever, just another column- The Geometry Column.
-
Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Сообщение
Mavka » 03 окт 2011, 15:52
Cross-domain security -
viewtopic.php?f=41&t=6353
P.S. Проверьте путь к python
лангольеры под окном жрали время ом-ном-ном
-
Pavel
- Активный участник
- Сообщения: 171
- Зарегистрирован: 15 июл 2009, 07:45
- Репутация: 7
Сообщение
Pavel » 05 окт 2011, 07:33
Получилось наконец-то запустить все это дело! Правда, как всегда с костылями...
Пришлось отказаться от апача (так и не смог настроить в нем cgi и привязать к питону, что странно) и поставить nginx. Несколько "легких" движений и все заработало.
_DR_ и Mavka , большое спасибо за помощь и разъяснения!
Быстро, качественно, недорого - выбирайте любые два пункта...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей