คำนวณ Lat Laton Bound สำหรับแต่ละไทล์ที่สร้างจาก gdal2tiles


16

ฉันมีแหล่งข้อมูลหลายแหล่งที่สร้างขึ้นโดยใช้ gdal2tiles ที่ฉันต้องการนำเสนอบนแผนที่เดียวกัน ดังนั้นเมื่อนำเสนอไทล์ฉันจำเป็นต้องกำหนดแหล่งที่มาที่จะให้บริการจากการตรวจสอบกับขอบเขต

ใครรู้วิธีการคำนวณ lat lon bounds สำหรับไทล์เดี่ยวโดยอ้างอิงจากการซูม, x และ y (จากโครงสร้างไฟล์ที่สร้างโดย gdal2tiles)? BTW: ฉันใช้ Google Maps API v3 ในกรณีที่มีความจำเป็นต้องเรียกใช้ฟังก์ชันบางอย่างจาก API เพื่อช่วยในการคำนวณ

เหตุผลที่ฉัน จำกัด เพียงการซูม x และ y ล้วนเป็นเพราะไทล์ไม่ใช่เพียงการซ้อนทับบนแผนที่ แต่ยังมีฟังก์ชั่นการพิมพ์แบบกำหนดเองที่อนุญาตให้พิมพ์นอกแผนที่ได้

คำตอบ:


22

คณิตศาสตร์อธิบายไว้ที่:

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

... รวมถึงซอร์สโค้ดสำหรับยูทิลิตี้บรรทัดคำสั่งและการสาธิตออนไลน์

นอกจากนี้ยังเป็นคณิตศาสตร์ง่ายๆ

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))));
}

สังเกตความแตกต่างระหว่าง XYZ / Google กับ TMS ในแกน y

Google Maps API V3 ช่วยให้คุณมีฟังก์ชั่นที่จำเป็นมากเกินไปผ่านทาง ของ.fromPointToLatLng()map.getProjection()


ฉันแค่พยายามที่จะเข้าใจวิธีการแก้ปัญหาข้างต้นเนื่องจากฉันมีปัญหาเดียวกัน คุณหมายถึงวิธีการแก้ปัญหาข้างต้นฉันควร 1 ก่อนอื่นให้แปลง x, y และซูมเป็น lat / long โดยใช้ tile2long () และ tile2lat () 2. ใช้ lat / long สร้างในขั้นตอนเพื่อสร้างขอบเขต? ฉันควรทำอย่างไร
Vishal

@Petr คุณมีอะไรสำหรับ c ++ ไหม
Majid Hojati

ไม่คำนึงถึงขนาดไทล์หรือไม่
มูฮัมหมัดอูเมอ

@ petr-pridal ผลลัพธ์ในจุดที่ดีที่สุดของความรู้ของฉันกระเบื้องเป็นพื้นที่หรือพื้นผิว คุณสามารถให้รหัสสำหรับกล่องที่มีขอบเขตได้หรือไม่? ขอบคุณล่วงหน้า.
เฮอร์เบิร์ต

จากบทความนี้gist.github.com/tmcw/4954720 TMS เป็นไทล์เดียวกัน แต่จัดทำดัชนีไว้ด้านหลัง นี่คือสูตรการแปลง: Math.floor (Math.pow (2, z) - y - 1)
Haggai


0

นี่คือรหัสการทำงานของฉัน:

ตัวอย่าง jsfiddle ของการซ้อนทับประเภทแผนที่รูปภาพของ google

jsfiddle อีกตัวอย่างภาพซ้อนทับของ 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 รับ bbox จากหมายเลข coodinate และซูม

วิธีการคำนวณจำนวนพิกัด google, ซูม, แปลง, เวลานาน ฯลฯ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.