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.



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 / π

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.