WMTS: Czy konwertować geolokalizację (długość, długość) na indeks kafelków przy danym poziomie powiększenia?

15

Chciałem wiedzieć, jak uzyskać indeksy (x, y) kafelka WMTS dla danej geolokalizacji (szerokość, długość) i poziom powiększenia.

Na przykład, mam UM znajdujący się w (48.675, 2.7), chcę uzyskać odpowiedni kafelek mapy otwartej ulicy dla powiększenia 10.

Czy mogę zrobić matematykę? Czy potrzebuję usługi internetowej? Precyzja: muszę to zrobić programowo.

Neekobus
źródło
2
Proszę bardzo: wiki.openstreetmap.org/wiki/…
John Powell,
Przydatny artykuł MSDN na temat schematu kafelkowania map Bing zapewnia również dobry podkład. Zarówno ten, jak i artykuł OSM zakładają projekcję Web Mercator, ale zasada jest taka sama dla innych rzutowanych układów współrzędnych.
kes

Odpowiedzi:

22

Strona wiki OSM jest idealna: http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon..2Flat._to_tile_numbers_2

Oto wyodrębniona odpowiedź (w pseudo-kodzie) do szybkiego odniesienia.

Biorąc pod uwagę długość / szerokość geograficzną / zbliżenie do numerów kafelków:

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

Zauważ, że log()w tym pseudo-kodzie odnosi się do logu naturalnego (często „ln ()” we wspólnej składni matematycznej, ale często „log ()” w wielu językach programowania).

Podane liczby płytek na długości / szerokości geograficznej:

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
źródło
2
czekaj, slippy format OSM to format kafelkowy WMTS?
szpieg
5
Pamiętaj, że powyższy link ma implementacje w wielu językach! (27 obecnie)
Cyrille