WMTS: Konversi geolokasi (lat, panjang) ke indeks ubin, pada tingkat zoom yang diberikan?

14

Saya ingin tahu cara mendapatkan indeks (x, y) dari ubin WMTS untuk geolokasi tertentu (garis lintang, bujur) dan tingkat zoom.

Sebagai contoh, saya memiliki POI yang terletak di (48.675, 2.7), saya ingin mendapatkan ubin peta jalan terbuka yang sesuai untuk zoom 10.

Bisakah saya menghitungnya? Apakah saya memerlukan layanan web? Presisi: Saya harus melakukan ini secara terprogram.

Neekobus
sumber
1
Di sini Anda pergi: wiki.openstreetmap.org/wiki/...
John Powell
Artikel MSDN yang berguna tentang Skema Ubin Bing Maps juga menyediakan primer yang bagus. Baik ini dan artikel OSM mengasumsikan proyeksi Web Mercator, tetapi prinsipnya sama untuk sistem koordinat yang diproyeksikan lainnya.
kes

Jawaban:

22

Halaman wiki OSM sempurna: http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon..2Flat._to_tile_numbers_2

Inilah jawaban yang diekstraksi (dalam kode semu) untuk referensi cepat.

Diberikan Longitude / latitude / zoom ke nomor ubin:

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

Perhatikan bahwa log()dalam kode pseudo ini merujuk ke log natural (sering "ln ()" dalam sintaksis matematika umum, tetapi sering "log ()" dalam banyak bahasa pemrograman).

Jumlah ubin yang diberikan ke bujur / lintang:

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
sumber
2
tunggu, format OSM slippy adalah format tile WMTS?
mata
5
Perhatikan bahwa tautan di atas memiliki implementasi dalam banyak bahasa! (27 saat ini)
Cyrille