OpenLayers активный слой

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 12 сен 2012, 08:32

Нет, я получаю слой через GWC

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

    var M4Azs = new OpenLayers.Layer.WMS("RoadLayer", "http://localhost:8080/geowebcache/service/wms?format=image/png",  {transparent: 'true', layers: 'azs', format: 'png',TILED: 'true'});
Как мне в таком случае задать урлы в WMSGetFeatureInfo? Получается я обращаюсь к тайлам GWC, который берет их у MapServer.

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

Re: OpenLayers активный слой

Сообщение Denis Rykov » 12 сен 2012, 10:36

В GWC же вы какой-то URL до WMS сервиса используете, его и пропишите.
Spatial is now, more than ever, just another column- The Geometry Column.

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 12 сен 2012, 10:51

Прописал

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

var ClickLayer = new OpenLayers.Control.WMSGetFeatureInfo({
    url: "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/wms - mezhuzl.map&",
    layerUrls: "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/wms - mezhuzl.map&",
    layers: [M4Azs],
    queryVisible: true,
    infoFormat: 'application/vnd.ogc.gml',
    maxFeatures: 50,
    autoActivate: true,
    vendorParams: {
        radius: 10
    },
    eventListeners: {
        'getfeatureinfo': function(e) {
            //alert(e.features[0].attributes['id']);
            alert(e.text);
         }
    }
}); 
Реакции ноль, вообще ничего не происходит

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

Re: OpenLayers активный слой

Сообщение Denis Rykov » 12 сен 2012, 11:54

А если опцию url убрать из контрола? Вообще в таких случаях удобно пользоваться отладчиком. Используйте для этих целей неминифицированную версию OpenLayers.
Spatial is now, more than ever, just another column- The Geometry Column.

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 12 сен 2012, 12:02

Если убрать выдает:

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

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator,
 admin@example.com and inform them of the time the error occurred,
and anything you might have done that may have
caused the error.</p>
<p>More information about this error may be available
in the server error log.</p>
</body></html>

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

Re: OpenLayers активный слой

Сообщение Denis Rykov » 12 сен 2012, 12:07

А можно URL GetFeatureInfo запроса, который вызывает такую ошибку?
Spatial is now, more than ever, just another column- The Geometry Column.

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 12 сен 2012, 12:17

Дебагер говорит так:

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

"NetworkError: 500 Internal Server Error - http://localhost/cgi-bin/proxy.cgi?url=http%3A%2F%2Flocalhost%3A8080%2Fgeowebcache%2Fservice%2Fwms%3Fformat%3Dimage%2Fpng%26LAYERS%3Dazs%26QUERY_LAYERS%3Dazs%26STYLES%3D%26SERVICE%3DWMS%26VERSION%3D1.1.1%26REQUEST%3DGetFeatureInfo%26BBOX%3D1321918.952986%252C5206161.493394%252C7583640.309236%252C7686390.186846%26FEATURE_COUNT%3D50%26HEIGHT%3D5

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

http://localhost:8080/geowebcache/service/wms?format=image/png&LAYERS=azs&QUERY_LAYERS=azs&STYLES=&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetFeatureInfo&BBOX=1321918.952986%2C5206161.493394%2C7583640.309236%2C7686390.186846&FEATURE_COUNT=50&HEIGHT=507&WIDTH=1280&FORMAT=png&INFO_FORMAT=application%2Fvnd.ogc.gml&SRS=EPSG%3A900913&X=262&Y=163&RADIUS=10

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 12 сен 2012, 12:29

Закоментил

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

OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";
Теперь

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

alert(e.text);
выводит пустое сообщение

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

var ClickLayer = new OpenLayers.Control.WMSGetFeatureInfo({
    layerUrls: "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/wmsmezhuzl.map&",
    layers: [M4Azs],
    queryVisible: true,
    infoFormat: 'application/vnd.ogc.gml',
    maxFeatures: 50,
    autoActivate: true,
    vendorParams: {
        radius: 10
    },
    eventListeners: {
        'getfeatureinfo': function(e) {
            alert(e.text);
         }
    }
});

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

Re: OpenLayers активный слой

Сообщение Denis Rykov » 12 сен 2012, 13:13

Ну кто-же алертами дебажит :) Используйте console.log(e), тут вы можете посмотреть и text и прочие свойства объекта. Ошибка, похоже происходит из-за того, что GetFeatureInfo запрос всё-таки идёт не туда, как можно видеть из URL - он идёт к GWC.
Spatial is now, more than ever, just another column- The Geometry Column.

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 13 сен 2012, 05:29

Ну кто-же алертами дебажит
Ну я только учусь:)
Настроил вывод в консоль, в принципе нового не узнал. Действительно запросы уходят не туда, хотя все урлы прописаны к mapserver.
Как быть? Настраивать proxy.cgi? Уже пытался, не получается. Есть где-нибудь пошаговый ман?

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 13 сен 2012, 07:20

Настроил прокси.
Все работает!

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

Re: OpenLayers активный слой

Сообщение Denis Rykov » 13 сен 2012, 07:21

Поздравляю! :)
Spatial is now, more than ever, just another column- The Geometry Column.

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 13 сен 2012, 08:51

Спасибо!
Но радоваться рано:)

При клике по слою я не всегда получаю ответ.

Причину вижу в том, что слой azs представлен точками, к каждой точке привязан растрик (условный знак). Если я кликом попадаю в точку, то WMSGetFeatureInfo мне возвращает ID. Если же я тычу в растрик, но не попадаю в точку - ответа нет.

Задавал разные значения radius - разницы не заметил.

Еще бесит то, что при тычке курсор мыши меняется на загрузочный, ладно еще если я тычу в значок и жду реакцию, а если я просто тычу в карту....
Можно ли как-то настроить, чтобы WMSGetFeatureInfo работал асинхронно, чтобы юзер вообще не видел, что идет какая-то загрузка или процесс

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

Re: OpenLayers активный слой

Сообщение Denis Rykov » 13 сен 2012, 09:09

WMSGetFeatureInfo и так работает асинхронно, а свойство radius задавали внутри объекта vendorParams? Может вам стоит попробрвать TileMill, который поддерживает UTFGrid, в этом случае приложение будет выглядеть более отзывчивым, но там есть некоторые ограничения.
Spatial is now, more than ever, just another column- The Geometry Column.

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 13 сен 2012, 09:14

Вот настройки контрола:

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

var ClickLayer = new OpenLayers.Control.WMSGetFeatureInfo({
   // Url: "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/wmsmezhuzl.map&",
    //layerUrls: "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/wmsmezhuzl.map&",
    layers: [M4Azs],
    queryVisible: true,
    infoFormat: 'application/vnd.ogc.gml',
    maxFeatures: 50,
    autoActivate: true,
    vendorParams: {
        radius: 1000
    },
    eventListeners: {
        'getfeatureinfo': function(e) {
           console.log(e.features[0].attributes['id']);
         }
    }
}); 

Ответить

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

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

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