mapserver5.0- неправильная картинки при другом projection

Кроме QGIS
dmitrijk
Новоприбывший
Сообщения: 9
Зарегистрирован: 14 мар 2014, 18:49
Репутация: 0

mapserver5.0- неправильная картинки при другом projection

Сообщение dmitrijk » 14 мар 2014, 19:06

B мап-файле данные представлены в epsg:4326. клиент (браузер) отображает в epsg:900913.
В запросе тайла клиент шлет координаты квадрата, который клиент считает именно квадратом (на экране он так и отображается). но для меркатора, используемого в мап-файле это совсем не квадрат - пиксельное расстояние между широтами не совпадает. поэтому MapServer пытается растянуть данные по предполагаемому холсту (скажем 256х256).

Проблема в том, что он делает это по своим хитрым правилам: растягивает в обоих измерениях и смещает центр, в итоге картинке на выходе рисуется со смещением и неправильным размером

Я не смог заставить мапсервер вписать "ящик с этими координатами" в "этот пиксельный размер".

Вот запрос (координаты уже переделаны в epsg:4326, но угловые размеры от epsg:900913):

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

<server>/mapserv.exe?map=example.map&mapsize=256%20256&mode=map&layers=all&mapext=87.89%2069.349%2088.066%2069.411
Кусок map-файла:

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

...
MAP
 IMAGETYPE	PNG
 EXTENT		88.008001 69.336491 88.373237 69.500044
 SIZE		512 512
 IMAGECOLOR	255 2 250

 LAYER
  CONNECTION "../R45093v_LAYER24.TAB"
  NAME l1
  TYPE POLYGON
  CONNECTIONTYPE OGR
  STATUS OFF
  STYLEITEM "AUTO"
  CLASS
  END
 END
.....
Есть идеи?
Последний раз редактировалось dmitrijk 17 мар 2014, 07:43, всего редактировалось 2 раза.

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

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение Denis Rykov » 14 мар 2014, 20:08

MapServer ничего никуда не растягивает. Судя по тем данным, что вы привели клиент запрашивает данные в 4326, их и получает, 900913 здесь вообще откуда взялось? И это, режим map - это старье, используете WMS.
Spatial is now, more than ever, just another column- The Geometry Column.

dmitrijk
Новоприбывший
Сообщения: 9
Зарегистрирован: 14 мар 2014, 18:49
Репутация: 0

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение dmitrijk » 17 мар 2014, 08:36

клиент работает с 900913 (он же - 3857), 4326 запрашивается уже после трансформации квадрата из 900913 (трансформация производится на клиенте перед запросом). представлю наглядно:
работа_maperver.png
работа_maperver.png (151.48 КБ) 13073 просмотра
не открою Америку - очевидно что в 900913 имеет место нелинейная зависимость в пиксельном расстоянии между широтами. именно в таком виде и представлено на клиенте.

теперь к примеру браузер пытается получить картинку тайла с островом Северный в Баренцевом море (верхний рисунок). он запрашивает у сервера сектор между широтами 60-80 и долготами 50-80 (в 4326) и требует отобразить это в картинке размером 256х256.
сервер же видит что в 4326 это не квадрат (следующий рисунок). и отрисовывает как на нижнем рисунке.

возможно термин "растягивает" не уместен для мапсервера, но факт есть факт - картинка растянута в обоих измерениях и к тому же сдвинута. по логике картинка должна быть растянута только по вертикали и никуда не сдвигаться.

вопрос - как этого добиться

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

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение Denis Rykov » 17 мар 2014, 08:45

Смотрите, если вы работаете с растром, то должны запрашивать тайл в той проекции, в которой работаете. Если на клиенте вы используете 900913, то и изображение сервер должен отдавать в этой проекции. Обычно, и bbox передают в той же проекции, что и сами данные. То есть вам необходимо на стороне сервера активировать поддержку гугломеркатора и запрашивать данные в нём. Зачем вы просите у сервера данные в 4326, если вам нужен меркатор для отображения?
Spatial is now, more than ever, just another column- The Geometry Column.

dmitrijk
Новоприбывший
Сообщения: 9
Зарегистрирован: 14 мар 2014, 18:49
Репутация: 0

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение dmitrijk » 17 мар 2014, 09:26

пока что ищу быстрый способ скрещивания ужа с ежом. просто есть векторные карты, поставляемые в 4236. они подключаются в мап-файл как было показано выше. заставить сервер отдавать в 900913 не получается. если знаете как - буду признателен за совет.

PS. конвертации карт в 900913 хотелось бы избежать

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

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение Denis Rykov » 17 мар 2014, 09:54

Естественно, исходные данные трогать не нужно. Не знаю как с режимом map (еще раз советую вам отказаться от его использования и перейти на WMS), но в случае если MapServer используется как WMS сервер, то в map-файле на уровне объекта MAP указываете проекцию исходных данных, а в wms_srs - проекции, которые вам требуются от MapServer на выходе:

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

MAP
  ....
  PROJECTION
    "init=epsg:4326"
  END

WEB
  ...
  METADATA
    "wms_title"           "WMS Demo Server"
    "wms_onlineresource"  "http://my.host.com/cgi-bin/mapserv?map=wms.map&"
    "wms_srs"             "EPSG:3857"
  END
END
Если для блока LAYER не указана проекция, то она наследуется от блока MAP (если у вас все слои в 4326, то это как раз ваш случай). Далее при обращении по WMS в URL передается необходимый bbox, идентификатор системы координат, размер выходного изображения и прочие необходимые параметры, определяемые стандартом WMS. В 99% случаев эти запросы генерирует WMS-клиент (если вы работаете в браузере, то и OpenLayers и Leaflet поддерживают WMS), но вы можете формировать их и руками, если потребуется. Документация по настройке WMS-сервера тут. Вот еще статья, правда она устарела.
Spatial is now, more than ever, just another column- The Geometry Column.

dmitrijk
Новоприбывший
Сообщения: 9
Зарегистрирован: 14 мар 2014, 18:49
Репутация: 0

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение dmitrijk » 17 мар 2014, 13:47

убрал mode=map, привел запрос к такому виду^
<server>?map=example3.map&LAYERS=all&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=
&FORMAT=image%2Fjpeg&SRS=EPSG%3A900913&WIDTH=256&HEIGHT=256
&BBOX=9823075.3776172,10860172.977246,9842643.2568555,10879740.856484

выдается XML с текстом:
msWMSLoadGetMapParams(): WMS server error. Invalid layer(s) given in the LAYERS parameter.

ошибка исчезает при возвращении в запрос параметра mode=map

поиск решения не дал


PS. example.map :

MAP
NAME "wms"
IMAGETYPE PNG
EXTENT -90 -180 90 180
SIZE 256 256
IMAGECOLOR 255 2 250

PROJECTION
"init=epsg:4236"
END

WEB
METADATA
"wms_enable_request" "*"
"wms_exceptions_format" "application/vnd.ogc.se_xml"
"wms_title" "l1"
"wms_onlineresource" "http://localhost:90/cgi-bin/mapserv.exe ... ample3.map&"
"wms_srs" "EPSG:900913"
wms_getfeatureinfo "http://localhost:90/cgi-bin/mapserv.exe ... ample3.map&"
wms_featureinfoformat "text/plain"
wms_include_items "all"
END
END


LAYER
CONNECTION "../R45093v_LAYER24.TAB"
NAME l1
TYPE POLYGON
CONNECTIONTYPE OGR
STATUS OFF
STYLEITEM "AUTO"
CLASS
END
END

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

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение Denis Rykov » 17 мар 2014, 15:22

Нет такого слоя all, укажите явно имена слоев через запятую, например, LAYERS=l1.

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

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

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение Denis Rykov » 17 мар 2014, 15:24

Еще, лучше не использовать код 900913, а вместо него использовать 3857, так как зачастую многие прлграммы не понимают его, с 3857 такой проблемы не встречал.

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

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

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение Denis Rykov » 17 мар 2014, 15:26

И не 4236, а 4326.

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

dmitrijk
Новоприбывший
Сообщения: 9
Зарегистрирован: 14 мар 2014, 18:49
Репутация: 0

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение dmitrijk » 17 мар 2014, 15:29

не помогает ни то ни другое. пробовал также по некоторым рекомендация указывать номер слоя (layers=0)
в одном из постов было предположение, что mapserver на самом деле шлет формализованное сообщение об ошибке, и дело может быть совсем не в слоях

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

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение Denis Rykov » 17 мар 2014, 15:46

Где вы такого начитались. Никаких номеров слоев MapServer не использует. Поменяйте имя слоя на что нибудь внятное, сейчас l1 еще где-то в map-файле используется и покажите тут URL запроса полностью и текст ошибки, если она будет.

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

dmitrijk
Новоприбывший
Сообщения: 9
Зарегистрирован: 14 мар 2014, 18:49
Репутация: 0

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение dmitrijk » 17 мар 2014, 15:51

localhost/cgi-bin/mapserv_dev.exe?map=../apps/altay/htdocs/example3.map&LAYERS=layer1&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image/png&SRS=EPSG:3857&BBOX=9823075.3776172,10860172.977246,9842643.2568555,10879740.856484&WIDTH=256&HEIGHT=256

layer=layer1 (внутри map-файла он так же обозван layer1)

возвращается :
<ServiceExceptionReport xmlns="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.3.0" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/wms/1.3.0/ex ... _1_3_0.xsd">
<ServiceException code="LayerNotDefined">
msWMSLoadGetMapParams(): WMS server error. Invalid layer(s) given in the LAYERS parameter.
</ServiceException>
</ServiceExceptionReport>

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

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение Denis Rykov » 17 мар 2014, 16:01

Понятно, у вас слой не правильно сконфигурирован для работы wms, не хватает секции WEB и вложенной в нее METADATA с указанием wms_title.

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

dmitrijk
Новоприбывший
Сообщения: 9
Зарегистрирован: 14 мар 2014, 18:49
Репутация: 0

Re: mapserver5.0- неправильная картинки при другом projectio

Сообщение dmitrijk » 17 мар 2014, 16:17

блок web уже вставлен в map (см выше)
если вы имеете в виду что надо вставить его и в блок layer типа вот так:

LAYER
WEB
METADATA
"wms_title" "layer1"
"wms_onlineresource" "http://localhost/cgi-bin/mapserv_orig.e ... ample3.map&"
"wms_srs" "EPSG:3857"
END
END

то это приводит к ошибке:
loadLayer(): Unknown identifier. Parsing error near (WEB):(line 29)
поскольку layer не должен по идее содержать WEB

если же неправильно создан текущий web внутри map, то прошу указать на конкретную ошибку

Ответить

Вернуться в «Свободные, бесплатные, открытые ГИС»

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

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