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

Как узнать координаты тайла в Mapserver

Добавлено: 03 июн 2009, 09:19
random
как я понимаю MapServer отдает тайл по запросу: координаты левого нижнего угла и координаты правого верхнего если это не так то пожалуйста поправьте меня...

Вопрос в следующем зная только одну точку на карте как мне получить координаты тайла в которой она находится? если ли какая либо формула или функция, в том же openlayers?

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 12:40
victor-vk

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 13:05
random
спасибо за дельную статью, единственное а есть ли что нить подобное но для mapserver...

у него же какая то своя система координат? метры там или что

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 14:41
victor-vk
random писал(а):спасибо за дельную статью, единственное а есть ли что нить подобное но для mapserver...

у него же какая то своя система координат? метры там или что
MapServer вроде-бы поддерживает WMS сервисы (по крайней мере, было бы очень странно, если нет). Тот же OpenLayers на сколько я помню, поддерживает взаимодействие с сервером WMS. Коли так, то в принципе, координаты (позицию в матрице тайлов для заданного зума) тайла знать не нужно. На сервер приходит запрос по географическим координатам вершин тайла

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 14:51
random
victor-vk писал(а):
random писал(а):спасибо за дельную статью, единственное а есть ли что нить подобное но для mapserver...

у него же какая то своя система координат? метры там или что
MapServer вроде-бы поддерживает WMS сервисы (по крайней мере, было бы очень странно, если нет). Тот же OpenLayers на сколько я помню, поддерживает взаимодействие с сервером WMS. Коли так, то в принципе, координаты (позицию в матрице тайлов для заданного зума) тайла знать не нужно. На сервер приходит запрос по географическим координатам вершин тайла
согласен что MapServer прекрасно уживается с OpenLayers и не нужно знать координаты тайла, но так уж сложилось что пишу сам приложение без использования OpenLayers(ибо не подходит) и поэтому спрашаю у вас, мне и нужен по сути принцип OpenLayers или что то близкое к нему... то есть мне нужно получить координаты тайла в который попадает заданная точка. есть какие нить идеи кроме ковыряния самого OpenLayers

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 14:59
KolesovDmitry
random писал(а):как я понимаю MapServer отдает тайл по запросу: координаты левого нижнего угла и координаты правого верхнего если это не так то пожалуйста поправьте меня...

Вопрос в следующем зная только одну точку на карте как мне получить координаты тайла в которой она находится? если ли какая либо формула или функция, в том же openlayers?
Не совсем так. Как таковых тайлов у MapServer нет. Просто пользователь настраивает map-файл для работы (более подробно тут), а потом в адресной строке задает параметры карты, которые ему нужны в данный момент - масштаб карты, слои и тд.
Например, если вас интересует квадрат с координатами углов 33.75,45,45,56.25, размером 256x256 пикселей, то делаете запрос:

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

http://.../cgi-bin/mapserv?MAP=...&LAYERS=...&BBOX=33.75,45,45,56.25&WIDTH=256&HEIGHT=256&MODE=MAP
и получаете свой результат. Меняя координаты можно добиться нужного размера (масштаба) карты.

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 15:04
victor-vk
random писал(а): согласен что MapServer прекрасно уживается с OpenLayers и не нужно знать координаты тайла, но так уж сложилось что пишу сам приложение без использования OpenLayers(ибо не подходит) и поэтому спрашаю у вас, мне и нужен по сути принцип OpenLayers или что то близкое к нему... то есть мне нужно получить координаты тайла в который попадает заданная точка. есть какие нить идеи кроме ковыряния самого OpenLayers
Понятно. Ну в общем, это чисто математика/геометрия/здравый смысл. У меня похожий код есть. Если нужно, оставь личное сообщение с информацией, куда сбросить, если найду...

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 15:06
random
KolesovDmitry писал(а):
random писал(а):как я понимаю MapServer отдает тайл по запросу: координаты левого нижнего угла и координаты правого верхнего если это не так то пожалуйста поправьте меня...

Вопрос в следующем зная только одну точку на карте как мне получить координаты тайла в которой она находится? если ли какая либо формула или функция, в том же openlayers?
Не совсем так. Как таковых тайлов у MapServer нет. Просто пользователь настраивает map-файл для работы (более подробно тут), а потом в адресной строке задает параметры карты, которые ему нужны в данный момент - масштаб карты, слои и тд.
Например, если вас интересует квадрат с координатами углов 33.75,45,45,56.25, размером 256x256 пикселей, то делаете запрос:

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

http://.../cgi-bin/mapserv?MAP=...&LAYERS=...&BBOX=33.75,45,45,56.25&WIDTH=256&HEIGHT=256&MODE=MAP
и получаете свой результат. Меняя координаты можно добиться нужного размера (масштаба) карты.

ну это конечно так но тогда не понятно: мы же все равно даем запрос MapServer'у о том чтоб он выдал квадрат у которого координаты нижнего левого угла 33.75,45 и верхнего правого 45,56.25

а если я ему отправлю такой запрос: 33.76,45 и 45,57.25 то есть сдвинутый на доли что произойдет?

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 15:07
victor-vk
А можно узнать, чем OpneLayers или Google Maps API не устраивает?

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 15:11
random
victor-vk писал(а):А можно узнать, чем OpneLayers или Google Maps API не устраивает?

всмысле узнать, хорошо сказжу так: я пишу флеш клиент со своими картами и MapSever и мне как то всё равно на Google Maps,

а по поводу OpenLayers: имелось ввиду чтоб скрипт определял координаты и передавал их в flash или что?

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 15:17
KolesovDmitry
random писал(а): а если я ему отправлю такой запрос: 33.76,45 и 45,57.25 то есть сдвинутый на доли что произойдет?
Нарисует сдвинутый на доли. Без разницы, какие координаты - целые или дробные, поскольку под каждый запрос MapServer генерирует отдельную картинку, а не отдает заранее созданный кусок карты.

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 15:22
random
хорошо тогда другой вопрос как нормальные координаты перевести в то что кушает MapServer? счас посмотрел в firebug там вот такие страшные числа, как подобные получать: 4197491.660000 ?

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 16:07
geologic
Проекция гугла известна - это меркатор на сфере. Софт тут ни при чем, алгоритмы вычислений одинаковые. Основы привязки тайлов, как правильно вам подсказали, можно поглядеть на Мапбилдере, формулы и алгоритм для тайлов в ГИС - вот тут статья.

Если сразу формулы, то вычислить пиксели по географии вот:
Xp = BM0 * (1 + Lon/180); Yp = BM0 * (1 - 0.5*ln((1+sin(Lat))/(1-sin(Lat)))/Pi;
BM0 здесь центр всего массива Google Map в пикселах, точнее, ширина, деленная пополам. Для 18-го уровня, это будет 33554432/2 = 16777216.
Номер тайла Xp/Yp div 256 если нужен.
Меркаторские координаты X = XYres * (Xp - BM0); Y = XYres * (BM0 - Yp);
XYres - разрешение (размер пикселя) по уровням, на 18-м 1.19299213862542 метра, на соседних в два раза отличается. Вообще, как известно, сам гугл нынче отдает тайлы по меркаторским XY (точнее, номерам блоков 256 на 256), например, вот:
http://khm0.google.ru/kh/v=39&x=39617&y=20478&z=16
Да и другие сервисы придерживаются этого принципа.

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 16:26
random
geologic писал(а):Проекция гугла известна - это меркатор на сфере. Софт тут ни при чем, алгоритмы вычислений одинаковые. Основы привязки тайлов, как правильно вам подсказали, можно поглядеть на Мапбилдере, формулы и алгоритм для тайлов в ГИС - вот тут статья.

Если сразу формулы, то вычислить пиксели по географии вот:
Xp = BM0 * (1 + Lon/180); Yp = BM0 * (1 - 0.5*ln((1+sin(Lat))/(1-sin(Lat)))/Pi;
BM0 здесь центр всего массива Google Map в пикселах, точнее, ширина, деленная пополам. Для 18-го уровня, это будет 33554432/2 = 16777216.
Номер тайла Xp/Yp div 256 если нужен.
Меркаторские координаты X = XYres * (Xp - BM0); Y = XYres * (BM0 - Yp);
XYres - разрешение (размер пикселя) по уровням, на 18-м 1.19299213862542 метра, на соседних в два раза отличается. Вообще, как известно, сам гугл нынче отдает тайлы по меркаторским XY (точнее, номерам блоков 256 на 256), например, вот:
http://khm0.google.ru/kh/v=39&x=39617&y=20478&z=16
Да и другие сервисы придерживаются этого принципа.

слушайте что то не совсем понимаю...


у меня есть координата заданная в нормальных географических коордантах, MapServer воспринимает координаты в каких то иных размерностях в метрах чтоли, причем он просит две пары координат для выдачи тайла что мне нжуно сделать что бы из моих координат получить то что нужно ему, ( на гугл мне счас как то далеко, с ним я отдельно общался и всё... счас у меня MapServer наверное со своими заморочками)

Re: как узнать координаты тайла

Добавлено: 03 июн 2009, 19:39
KolesovDmitry
random писал(а): у меня есть координата заданная в нормальных географических коордантах, MapServer воспринимает координаты в каких то иных размерностях в метрах чтоли, причем он просит две пары координат для выдачи тайла что мне нжуно сделать что бы из моих координат получить то что нужно ему, ( на гугл мне счас как то далеко, с ним я отдельно общался и всё... счас у меня MapServer наверное со своими заморочками)
Мы с вами по третьему круго одно и то же начинаем :) Ну нет никаких тайлов у MapServer. Елки-палки, да вы просто попробуйте создать карту на основе MS своими руками, потратите времени полдня, зато бОльшая часть вопросов сразу пропадет