WMTS: преобразовать геолокацию (широта, долгота) в индекс плитки при заданном уровне масштабирования?

15

Я хотел знать, как получить индексы (x, y) тайла WMTS для данной геолокации (широта, долгота) и уровня масштабирования.

Например, у меня есть POI, расположенный в (48.675, 2.7), я хочу получить соответствующую плитку открытой карты улиц для увеличения 10.

Могу ли я сделать математику? Нужен ли мне веб-сервис? Точность: я должен сделать это программно.

Neekobus
источник
2
Вот и вы: wiki.openstreetmap.org/wiki/…
Джон Пауэлл
Полезная статья MSDN о схеме листов Bing Maps также предоставляет хороший учебник. И эта статья, и статья OSM предполагают проекцию Web Mercator, но принцип тот же для других проектируемых систем координат.
Кес

Ответы:

22

Вики-страница OSM идеально подходит: http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon..2Flat._to_tile_numbers_2

Вот извлеченный ответ (в псевдокоде) для быстрого ознакомления.

Заданная долгота / широта / масштаб для номеров плиток:

n = 2 ^ zoom
xtile = n * ((lon_deg + 180) / 360)
ytile = n * (1 - (log(tan(lat_rad) + sec(lat_rad)) / π)) / 2

Обратите внимание, что log()в этом псевдокоде подразумевается натуральный лог (часто «ln ()» в общем математическом синтаксисе, но часто «лог ()» во многих языках программирования).

Даны номера плиток по долготе / широте:

n = 2 ^ zoom
lon_deg = xtile / n * 360.0 - 180.0
lat_rad = arctan(sinh(π * (1 - 2 * ytile / n)))
lat_deg = lat_rad * 180.0 / π
Neekobus
источник
2
подождите, OSM Slippy формат является форматом плитки WMTS?
шпион
5
Обратите внимание, что ссылка выше имеет реализации на многих языках! (27 в настоящее время)
Сирил