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

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
random
Интересующийся
Сообщения: 23
Зарегистрирован: 02 июн 2009, 09:13
Репутация: 0

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

Сообщение random »

как я понимаю MapServer отдает тайл по запросу: координаты левого нижнего угла и координаты правого верхнего если это не так то пожалуйста поправьте меня...

Вопрос в следующем зная только одну точку на карте как мне получить координаты тайла в которой она находится? если ли какая либо формула или функция, в том же openlayers?
victor-vk
Интересующийся
Сообщения: 16
Зарегистрирован: 25 мар 2009, 09:23
Репутация: 0
Контактная информация:

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

Сообщение victor-vk »

random
Интересующийся
Сообщения: 23
Зарегистрирован: 02 июн 2009, 09:13
Репутация: 0

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

Сообщение random »

спасибо за дельную статью, единственное а есть ли что нить подобное но для mapserver...

у него же какая то своя система координат? метры там или что
victor-vk
Интересующийся
Сообщения: 16
Зарегистрирован: 25 мар 2009, 09:23
Репутация: 0
Контактная информация:

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

Сообщение victor-vk »

random писал(а):спасибо за дельную статью, единственное а есть ли что нить подобное но для mapserver...

у него же какая то своя система координат? метры там или что
MapServer вроде-бы поддерживает WMS сервисы (по крайней мере, было бы очень странно, если нет). Тот же OpenLayers на сколько я помню, поддерживает взаимодействие с сервером WMS. Коли так, то в принципе, координаты (позицию в матрице тайлов для заданного зума) тайла знать не нужно. На сервер приходит запрос по географическим координатам вершин тайла
random
Интересующийся
Сообщения: 23
Зарегистрирован: 02 июн 2009, 09:13
Репутация: 0

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

Сообщение random »

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

у него же какая то своя система координат? метры там или что
MapServer вроде-бы поддерживает WMS сервисы (по крайней мере, было бы очень странно, если нет). Тот же OpenLayers на сколько я помню, поддерживает взаимодействие с сервером WMS. Коли так, то в принципе, координаты (позицию в матрице тайлов для заданного зума) тайла знать не нужно. На сервер приходит запрос по географическим координатам вершин тайла
согласен что MapServer прекрасно уживается с OpenLayers и не нужно знать координаты тайла, но так уж сложилось что пишу сам приложение без использования OpenLayers(ибо не подходит) и поэтому спрашаю у вас, мне и нужен по сути принцип OpenLayers или что то близкое к нему... то есть мне нужно получить координаты тайла в который попадает заданная точка. есть какие нить идеи кроме ковыряния самого OpenLayers
Последний раз редактировалось random 03 июн 2009, 14:59, всего редактировалось 1 раз.
KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

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

Сообщение 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
и получаете свой результат. Меняя координаты можно добиться нужного размера (масштаба) карты.
victor-vk
Интересующийся
Сообщения: 16
Зарегистрирован: 25 мар 2009, 09:23
Репутация: 0
Контактная информация:

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

Сообщение victor-vk »

random писал(а): согласен что MapServer прекрасно уживается с OpenLayers и не нужно знать координаты тайла, но так уж сложилось что пишу сам приложение без использования OpenLayers(ибо не подходит) и поэтому спрашаю у вас, мне и нужен по сути принцип OpenLayers или что то близкое к нему... то есть мне нужно получить координаты тайла в который попадает заданная точка. есть какие нить идеи кроме ковыряния самого OpenLayers
Понятно. Ну в общем, это чисто математика/геометрия/здравый смысл. У меня похожий код есть. Если нужно, оставь личное сообщение с информацией, куда сбросить, если найду...
random
Интересующийся
Сообщения: 23
Зарегистрирован: 02 июн 2009, 09:13
Репутация: 0

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

Сообщение 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 то есть сдвинутый на доли что произойдет?
victor-vk
Интересующийся
Сообщения: 16
Зарегистрирован: 25 мар 2009, 09:23
Репутация: 0
Контактная информация:

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

Сообщение victor-vk »

А можно узнать, чем OpneLayers или Google Maps API не устраивает?
random
Интересующийся
Сообщения: 23
Зарегистрирован: 02 июн 2009, 09:13
Репутация: 0

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

Сообщение random »

victor-vk писал(а):А можно узнать, чем OpneLayers или Google Maps API не устраивает?

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

а по поводу OpenLayers: имелось ввиду чтоб скрипт определял координаты и передавал их в flash или что?
KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

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

Сообщение KolesovDmitry »

random писал(а): а если я ему отправлю такой запрос: 33.76,45 и 45,57.25 то есть сдвинутый на доли что произойдет?
Нарисует сдвинутый на доли. Без разницы, какие координаты - целые или дробные, поскольку под каждый запрос MapServer генерирует отдельную картинку, а не отдает заранее созданный кусок карты.
random
Интересующийся
Сообщения: 23
Зарегистрирован: 02 июн 2009, 09:13
Репутация: 0

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

Сообщение random »

хорошо тогда другой вопрос как нормальные координаты перевести в то что кушает MapServer? счас посмотрел в firebug там вот такие страшные числа, как подобные получать: 4197491.660000 ?
geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 6
Откуда: москва
Контактная информация:

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

Сообщение 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
Да и другие сервисы придерживаются этого принципа.
random
Интересующийся
Сообщения: 23
Зарегистрирован: 02 июн 2009, 09:13
Репутация: 0

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

Сообщение 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 наверное со своими заморочками)
KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

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

Сообщение KolesovDmitry »

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

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

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

Сейчас этот форум просматривают: sb_map и 2 гостя