Hitung batas lat lat untuk ubin individu yang dihasilkan dari gdal2tiles

16

Saya memiliki beberapa sumber ubin yang dihasilkan menggunakan gdal2tiles yang ingin saya tampilkan di peta yang sama. Jadi, ketika menyajikan ubin saya harus menentukan dari mana sumber untuk melayani itu, memeriksa terhadap batas.

Adakah yang tahu cara menghitung batas lat lon untuk ubin tunggal berdasarkan murni pada zoom, x, dan y (dari struktur file yang dihasilkan oleh gdal2tiles)? BTW: Saya menggunakan Google Maps API v3 kalau-kalau ada kebutuhan untuk memanggil beberapa fungsionalitas dari API untuk membantu dengan perhitungan.

Alasan saya dibatasi murni untuk memperbesar, x, dan y adalah karena ubin tidak hanya dipanggil oleh hamparan pada peta tetapi juga beberapa fungsi cetak khusus yang memungkinkan pencetakan di luar peta.

Gavin
sumber

Jawaban:

22

Matematika dijelaskan di:

http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/

... termasuk kode sumber untuk utilitas baris perintah dan demonstrasi online.

Ini juga matematika yang cukup sederhana:

function tile2long(x,z) { return (x/Math.pow(2,z)*360-180); }

function tile2lat(y,z) {
    var n=Math.PI-2*Math.PI*y/Math.pow(2,z);
    return (180/Math.PI*Math.atan(0.5*(Math.exp(n)-Math.exp(-n))));
}

Perhatikan perbedaan antara XYZ / Google vs TMS di sumbu y.

Google Maps API V3 memberi Anda fungsi yang dibutuhkan juga melalui .fromPointToLatLng()dari map.getProjection().

Petr Pridal
sumber
Saya hanya mencoba memahami solusi di atas karena saya memiliki masalah yang sama. Maksud Anda dalam solusi di atas saya harus 1. Konversi pertama x, y dan zoom ke lat / long menggunakan tile2long () dan tile2lat (). 2. Gunakan lat / long yang dibuat pada langkah untuk membuat batas? Bagaimana saya harus melakukannya?
Vishal
@Petr Apakah Anda punya sesuatu untuk c ++?
Majid Hojati
itu tidak memperhitungkan ukuran ubin?
Muhammad Umer
@ petr-pridal Ini menghasilkan suatu titik, sejauh pengetahuan saya, ubin adalah area atau permukaan. Bisakah Anda memberikan kode untuk kotak pembatas? Terima kasih sebelumnya.
Herbert
Dari artikel ini gist.github.com/tmcw/4954720 , TMS adalah ubin yang sama, tetapi diindeks mundur. Ini adalah rumus konversi: Math.floor (Math.pow (2, z) - y - 1)
Haggai
0

Ini adalah kode kerja saya:

jsfiddle sampel overlay tipe peta gambar google

jsfiddle contoh lain gambar hamparan google

function tile2long(x,z) {

  return (x/Math.pow(2,z)*360-180);

}





function tile2lat(y,z) {

  var n=Math.PI-2*Math.PI*y/Math.pow(2,z);

  return (180/Math.PI*Math.atan(0.5*(Math.exp(n)-Math.exp(-n))));

}





 var x = coord.x;

 var y = coord.y;

 var z = zoom;



 var NW_long = tile2long(x,z);



 var SW_long = tile2long(x,z);

 var SW_lat =  tile2lat(y+1,z);



 var NE_long = tile2long(x+1,z);

  var NE_lat =  tile2lat(y,z);







  var export_bbox = SW_long + ',' + SW_lat + ',' + NE_long + ',' + NE_lat;



     var url_param = '&format=png&size=256,256&transparent=true&f=image&bboxSR=4326&imageSR=4326';





   var url_layers =''





       var root_url = 'https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/export?bbox=';



     var tile_url = root_url + export_bbox + url_param + url_layers;

maptiler dapatkan bbox dari angka coodinate dan zoom

cara menghitung zoom koordinat angka google, mengkonversi, lat panjang dll ....

hoogw
sumber