Страница 1 из 4

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

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

Пытаюсь отобразить атрибуты 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();

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

Добавлено: 29 апр 2011, 21:05
Protectr
Если у кого-нибудь есть рабочий пример вывода атрибутов в попап - скидывайте , на примерах легче учиться.

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

Добавлено: 29 апр 2011, 21:53
Voltron
Нагуглилось. Официальный пример

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

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

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

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

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

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

Добавлено: 30 апр 2011, 17:51
Protectr
Прошу написать простой рабочий пример кода !!!

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

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

На уровне OpenLayers можно подменять url.

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

Добавлено: 30 апр 2011, 22:37
Protectr
Спасибо , почитал !
Но какой будет url_straight в моем случае?
Будет чтото вроде:

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

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

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

Добавлено: 30 апр 2011, 23:01
Protectr
Делаю так , все равно в попапе вылазит та же билеберда что я описывал ....

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

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:

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

Добавлено: 01 май 2011, 15:17
Protectr
Неужели никто не поможет ????

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

Добавлено: 02 май 2011, 22:59
Protectr
Я так понял нужно изменить файл 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=";
но результат тот же , что еще не так?

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

Добавлено: 03 май 2011, 09:02
Mavka
У вас по ходу прокси-скрипт не срабатывает и отдается чистым текстом.
Гляньте здесь раздел Cross-domain security.

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

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

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

Добавлено: 03 май 2011, 13:49
Mavka
Кусок кода из моего рабочего проекта:

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

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 описана отдельно.

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

Добавлено: 04 май 2011, 06:12
Protectr
А что у вас значат строки

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

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

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

Добавлено: 04 май 2011, 08:31
Mavka
layers - вероятно, можно убрать совсем.
layerUrls - тоже что и у вас, переменная содержащая строку-адрес сервера