Странная ощибка GetFeatureInfo

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Protectr
Участник
Сообщения: 69
Зарегистрирован: 01 фев 2011, 18:16
Репутация: 0

Странная ощибка GetFeatureInfo

Сообщение Protectr » 29 апр 2011, 21:04

Доброго времени суток!
Обращаюсь к вам за советом , а проблема вот в чем:

Пытаюсь отобразить атрибуты Shape слоя в Popup
Использую Openlayers+Mapserver
Popup отображаеться по клику , но вместо атрибутов в нем вот это :
#!/usr/bin/env python """This is a blind proxy that we use to get around browser restrictions that prevent the Javascript from loading pages not on the same server as the Javascript. This has several problems: it's less efficient, it might break some sites, and it's a security risk because people can use this proxy to browse the web and possibly do bad stuff with it. It only loads pages via http and https, but it can load any content type. It supports GET and POST requests.""" import urllib2 import cgi import sys, os # Designed to prevent Open Proxy type stuff. allowedHosts = ['www.openlayers.org', 'openlayers.org', 'labs.metacarta.com', 'world.freemap.in', 'prototype.openmnnd.org', 'geo.openplans.org', 'sigma.openplans.org', 'demo.opengeo.org', 'www.openstreetmap.org', 'sample.azavea.com', 'v-swe.uni-muenster.de:8080', 'vmap0.tiles.osgeo.org'] method = os.environ["REQUEST_METHOD"] if method == "POST": qs = os.environ["QUERY_STRING"] d = cgi.parse_qs(qs) if d.has_key("url"): url = d["url"][0] else: url = "http://www.openlayers.org" else: fs = cgi.FieldStorage() url = fs.getvalue('url', "http://www.openlayers.org") try: host = url.split("/")[2] if allowedHosts and not host in allowedHosts: print "Status: 502 Bad Gateway" print "Content-Type: text/plain" print print "This proxy does not allow you to access that location (%s)." % (host,) print print os.environ elif url.startswith("http://") or url.startswith("https://"): if method == "POST": length = int(os.environ["CONTENT_LENGTH"]) headers = {"Content-Type": os.environ["CONTENT_TYPE"]} body = sys.stdin.read(length) r = urllib2.Request(url, body, headers) y = urllib2.urlopen(r) else: y = urllib2.urlopen(url) # print content type header i = y.info() if i.has_key("Content-Type"): print "Content-Type: %s" % (i["Content-Type"]) else: print "Content-Type: text/plain" print print y.read() y.close() else: print "Content-Type: text/plain" print print "Illegal request." except Exception, E: print "Status: 500 Unexpected Error" print "Content-Type: text/plain" print print "Some unexpected error occurred. Error text was:", E
Кто раньше стыкался? помогите !

вот как я это делаю

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

info = new OpenLayers.Control.WMSGetFeatureInfo({
            url: 'http://localhost:8080/WMSTileCache-V0.2/WMS/water', 
            title: '',
            queryVisible: true,
            eventListeners: {
                getfeatureinfo: function(event) {
                    map.addPopup(new OpenLayers.Popup.FramedCloud(
                        "chicken", 
                        map.getLonLatFromPixel(event.xy),
                        null,
                        event.text,
                        null,
                        true
                    ));
                }
            }
        });
        map.addControl(info);
        info.activate();
Последний раз редактировалось Protectr 29 апр 2011, 22:36, всего редактировалось 2 раза.

Protectr
Участник
Сообщения: 69
Зарегистрирован: 01 фев 2011, 18:16
Репутация: 0

Re: Странная ощибка GetFeatureInfo

Сообщение Protectr » 29 апр 2011, 21:05

Если у кого-нибудь есть рабочий пример вывода атрибутов в попап - скидывайте , на примерах легче учиться.

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Странная ощибка GetFeatureInfo

Сообщение Voltron » 29 апр 2011, 21:53

Нагуглилось. Официальный пример

P.S. Пожалуйста, пользуйте тегами

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

 и [quote] для кода и больших объемов текста, а то читать жутко неудобно.

Protectr
Участник
Сообщения: 69
Зарегистрирован: 01 фев 2011, 18:16
Репутация: 0

Re: Странная ощибка GetFeatureInfo

Сообщение Protectr » 29 апр 2011, 22:07

Я использую Тilecache , может это в нем причина?
Оффициальный пример с сайта работает отлично , но его исходник у меня на машине выдает ту же ошибку
(текст ошибки в попапе)

Protectr
Участник
Сообщения: 69
Зарегистрирован: 01 фев 2011, 18:16
Репутация: 0

Re: Странная ощибка GetFeatureInfo

Сообщение Protectr » 30 апр 2011, 17:51

Прошу написать простой рабочий пример кода !!!

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Странная ощибка GetFeatureInfo

Сообщение Mavka » 30 апр 2011, 21:52

Protectr
Кэш хранит только тайлы. Что бы ответить на GetFeatureInfo, ему нужно обратиться на сервер WMS. GeoJazzy не умеет пробрасывать такие запросы. (В GWC такая возможность есть.)

На уровне OpenLayers можно подменять url.
лангольеры под окном жрали время ом-ном-ном

Protectr
Участник
Сообщения: 69
Зарегистрирован: 01 фев 2011, 18:16
Репутация: 0

Re: Странная ощибка GetFeatureInfo

Сообщение Protectr » 30 апр 2011, 22:37

Спасибо , почитал !
Но какой будет url_straight в моем случае?
Будет чтото вроде:

http://localhost/cgi-bin/mapserv.exe?ma ... t&mode=map ????
тогда в массив layerUrls вписываем URL кешированной картики?

правильно понимаю ???

Protectr
Участник
Сообщения: 69
Зарегистрирован: 01 фев 2011, 18:16
Репутация: 0

Re: Странная ощибка GetFeatureInfo

Сообщение Protectr » 30 апр 2011, 23:01

Делаю так , все равно в попапе вылазит та же билеберда что я описывал ....

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

info = new OpenLayers.Control.WMSGetFeatureInfo({
            url: 'http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&layer=veget&mode=map',    #STRAIGHT URL
			layerUrls:['http://localhost:8080/WMSTileCache-V0.2/WMS/water'],   #URL КЕШИРОВАННОГО ИЗОБРАЖЕНИЯ
            title: '123',
            queryVisible: true,
            eventListeners: {
                getfeatureinfo: function(event) {
                    map.addPopup(new OpenLayers.Popup.FramedCloud(
                        "chicken", 
                        map.getLonLatFromPixel(event.xy),
                        null,
                        event.text,
                        null,
                        true
                    ));
                }
            }
        });
        map.addControl(info);
        info.activate();
странно что если поменять

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

event.text
на

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

event.ху
то в попапе спокойно отображаються координаты щелчка!!! :evil:

Protectr
Участник
Сообщения: 69
Зарегистрирован: 01 фев 2011, 18:16
Репутация: 0

Re: Странная ощибка GetFeatureInfo

Сообщение Protectr » 01 май 2011, 15:17

Неужели никто не поможет ????

Protectr
Участник
Сообщения: 69
Зарегистрирован: 01 фев 2011, 18:16
Репутация: 0

Re: Странная ощибка GetFeatureInfo

Сообщение Protectr » 02 май 2011, 22:59

Я так понял нужно изменить файл PROXY.CGI
Я это сделал добавил в AllowedHosts все что нужно:

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

allowedHosts = ['www.openlayers.org', 'openlayers.org', 
                'labs.metacarta.com', 'world.freemap.in', 
                'prototype.openmnnd.org', 'geo.openplans.org',
                'sigma.openplans.org', 'demo.opengeo.org',
                'www.openstreetmap.org', 'sample.azavea.com',
                'v-swe.uni-muenster.de:8080', 
                'vmap0.tiles.osgeo.org','/cgi-bin/proxy.cgi?url=',"localhost:8080"]
и прописал в основном НTML OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";
но результат тот же , что еще не так?

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Странная ошибка GetFeatureInfo

Сообщение Mavka » 03 май 2011, 09:02

У вас по ходу прокси-скрипт не срабатывает и отдается чистым текстом.
Гляньте здесь раздел Cross-domain security.
Последний раз редактировалось Mavka 03 май 2011, 13:50, всего редактировалось 1 раз.
лангольеры под окном жрали время ом-ном-ном

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Странная ошибка GetFeatureInfo

Сообщение Mavka » 03 май 2011, 13:40

Так как у вас и сайт и mapserver работают на одном и том же веб-сервере (apache), то использовать прокси по идее не нужно. Уберите OpenLayers.ProxyHost.
Последний раз редактировалось Mavka 03 май 2011, 13:53, всего редактировалось 2 раза.
лангольеры под окном жрали время ом-ном-ном

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Странная ошибка GetFeatureInfo

Сообщение Mavka » 03 май 2011, 13:49

Кусок кода из моего рабочего проекта:

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

click_ctrl = new OpenLayers.Control.WMSGetFeatureInfo({
    url: url_server_2,
    layerUrls: [url_server_1],
    layers: [lay_points],
    queryVisible: true
});
click_ctrl.events.register('getfeatureinfo', this, point_click);
map.addControl(click_ctrl);
click_ctrl.activate(); 
Функция point_click описана отдельно.
лангольеры под окном жрали время ом-ном-ном

Protectr
Участник
Сообщения: 69
Зарегистрирован: 01 фев 2011, 18:16
Репутация: 0

Re: Странная ощибка GetFeatureInfo

Сообщение Protectr » 04 май 2011, 06:12

А что у вас значат строки

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

url: url_server_2,
    layerUrls: [url_server_1],
    layers: [lay_points],
ато я не совсем понял?

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Странная ошибка GetFeatureInfo

Сообщение Mavka » 04 май 2011, 08:31

layers - вероятно, можно убрать совсем.
layerUrls - тоже что и у вас, переменная содержащая строку-адрес сервера
лангольеры под окном жрали время ом-ном-ном

Ответить

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

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

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