MapServer: проблема с SQL-запросами в MAP-файле

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Dimsan
Новоприбывший
Сообщения: 5
Зарегистрирован: 07 июн 2013, 09:55
Репутация: 0

MapServer: проблема с SQL-запросами в MAP-файле

Сообщение Dimsan » 07 июн 2013, 11:51

Здравствуйте. Возникла проблема с использованием SQL-запросов в map файле. При просмотре карты появляются розовые квадраты...
Спойлер
MAP
EXTENT 1 1 8 8
IMAGECOLOR 255 255 255
NAME "WMS"
OUTPUTFORMAT
NAME "png"
MIMETYPE "image/png"
DRIVER AGG/PNG
EXTENSION "png"
IMAGEMODE RGBA
FORMATOPTION "INTERLACE=OFF"
FORMATOPTION "QUANTIZE_FORCE=ON"
FORMATOPTION "QUANTIZE_DITHER=OFF"
FORMATOPTION "QUANTIZE_COLORS=256"
END

WEB
MINSCALE 2000000
MAXSCALE 50000000
#
# On Windows systems, /tmp and /tmp/ms_tmp/ should be created at the root
# of the drive where the .MAP file resides.
#
IMAGEPATH "c:/hntu.com.ua/www/tmp_gis"
IMAGEURL "/tmp_gis"
LOG "c:/hntu.com.ua/www/tmp_gis/gmap.log"
END

PROJECTION
"init=epsg:900913"
END

################## Лесные культуры
LAYER
NAME "polygons"
CONNECTIONTYPE postgis
CONNECTION "host=localhost dbname=hntu_com_ua user=postgres password= port=5432"
DATA "geom FROM (
SELECT geom
FROM geo_polygon
)
AS my_table USING SRID=900913"

TYPE POLYGON
OPACITY 70

STATUS ON
CLASS
STYLE
COLOR 56 201 46
OUTLINECOLOR 30 102 25
SYMBOL 0
END # Конец определения стиля
END # Конец определения класса

END # Конец определения слоя

##################################

END # Конец определения карты
Тут простейший запрос, чтобы разобраться в проблеме. Если же написать: DATA "geom FROM geo_polygon USING SRID=900913", то всё работает. Поэтому я и сделал вывод, то проблема в sql запросе.

Использую OpenLayers:
Спойлер

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

var lon = 3665941.92388;
        var lat = 5880439.46213;
        var zoom = 13;
        var options = {
            projection: new OpenLayers.Projection("EPSG:900913"),
            numZoomLevels: 3,
            displayProjection: new OpenLayers.Projection("EPSG:4326"),
        };
        map = new OpenLayers.Map('map',options);

   
        var gsat = new OpenLayers.Layer.Google(
            "Google Satellite",
            {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22, sphericalMercator: true}
        );
		
        var polygon_layer = new OpenLayers.Layer.WMS (
            "Лесные культуры",
            "<?php echo sfConfig::get('app_map_url')?>",	    
            {
                layers: 'polygons',
                map: "<?php echo sfConfig::get('app_map_cut_file')?>",
                transparent: true
            },
            {'reproject': true}
        );
Помогите, пожалуйста, разобраться.

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

Re: MapServer: проблема с SQL-запросами в MAP-файле

Сообщение Denis Rykov » 07 июн 2013, 15:54

Не понял, вы пишите что при использовании 900913 все работает - тогда в чем вопрос?

[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.

Dimsan
Новоприбывший
Сообщения: 5
Зарегистрирован: 07 июн 2013, 09:55
Репутация: 0

Re: MapServer: проблема с SQL-запросами в MAP-файле

Сообщение Dimsan » 07 июн 2013, 16:44

Нет, я наверное неправильно написал. Я имел в виду, что если вместо "( SELECT geom FROM geo_polygon ) AS my_table" написать "geo_polygon", то работает. Однако в моём случае нужно использовать именно sql запрос, чтобы сделать выборку.

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

Re: MapServer: проблема с SQL-запросами в MAP-файле

Сообщение Denis Rykov » 08 июн 2013, 12:54

Если какая-то проблема с map-файлом, то MapServer об этом явно сообщает, скопируйте из фаербага URL, который генерирует OpenLayers и откройте ее в браузере - в случае ошибки MapServer вернет xml документ с описанием ошибки или выведет ее текст. Да, и прочитайте документацию, там про SQL-запросы все расписано.
Spatial is now, more than ever, just another column- The Geometry Column.

Dimsan
Новоприбывший
Сообщения: 5
Зарегистрирован: 07 июн 2013, 09:55
Репутация: 0

Re: MapServer: проблема с SQL-запросами в MAP-файле

Сообщение Dimsan » 08 июн 2013, 13:23

Спасибо, документацию сейчас почитаю.
При переходе по ссылке браузер предлагает открыть/сохранить файл mapserv.exe.

Sergey Astakhov
Активный участник
Сообщения: 218
Зарегистрирован: 21 дек 2012, 01:57
Репутация: 52
Откуда: Питер

Re: MapServer: проблема с SQL-запросами в MAP-файле

Сообщение Sergey Astakhov » 08 июн 2013, 16:40

Dimsan писал(а):Спасибо, документацию сейчас почитаю.
При переходе по ссылке браузер предлагает открыть/сохранить файл mapserv.exe.
Сохраните его как текстовый и посмотрите его содержимое - обычно там описание ошибки в xml формате.

Dimsan
Новоприбывший
Сообщения: 5
Зарегистрирован: 07 июн 2013, 09:55
Репутация: 0

Re: MapServer: проблема с SQL-запросами в MAP-файле

Сообщение Dimsan » 08 июн 2013, 20:45

Сергей, большое спасибо!
Кто бы знал, что MapServer так замаскирует вывод ошибки...
Проблему решил. Нужно было в выборке дополнительно указать поле "oid" и дописать строку "USING UNIQUE oid".
Исправленный участок .map файла:
Спойлер
DATA "geom FROM (
SELECT geom, oid
FROM geo_polygon
)
AS my_table USING UNIQUE oid USING SRID=900913"

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: MapServer: проблема с SQL-запросами в MAP-файле

Сообщение ericsson » 08 июн 2013, 21:13

Dimsan писал(а):При переходе по ссылке браузер предлагает открыть/сохранить файл mapserv.exe.
Какая знатная фигня с mime-типами...

Ответить

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

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

Сейчас этот форум просматривают: Ahrefs [Bot] и 5 гостей