WMTS: Converter geolocalização (lat, long) em índice de bloco, em um determinado nível de zoom?

14

Eu queria saber como obter os índices (x, y) de um bloco WMTS para uma determinada localização geográfica (latitude, longitude) e nível de zoom.

Por exemplo, eu tenho um POI localizado em (48.675, 2.7), desejo obter o bloco de mapa de ruas abertas correspondente para o zoom 10.

Posso fazer as contas? Preciso de um serviço web? Precisão: eu tenho que fazer isso programaticamente.

Neekobus
fonte
1
Aqui está: wiki.openstreetmap.org/wiki/…
John Powell
Um artigo útil do MSDN sobre o esquema de ladrilhos do Bing Maps também fornece uma boa cartilha. Tanto este como o artigo do OSM assumem a projeção do Web Mercator, mas o princípio é o mesmo para outros sistemas de coordenadas projetados.
KES

Respostas:

22

A página wiki do OSM é perfeita: http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon..2Flat._to_tile_numbers_2

Aqui está a resposta extraída (em pseudo-código) para referência rápida.

Dada a longitude / latitude / zoom para os números do bloco:

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

Observe que log()neste pseudocódigo refere-se ao log natural (geralmente "ln ()" na sintaxe matemática comum, mas frequentemente "log ()" em muitas linguagens de programação).

Dados os números do bloco em longitude / latitude:

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
fonte
2
espere, o formato OSM slippy é o formato WMTS lado a lado?
spy
5
Observe que o link acima tem implementações em vários idiomas! (27 atualmente)
Cyrille