Обчисліть широкі межі тривалості для окремих плиток, створених з gdal2tiles


16

У мене є кілька джерел плиток, створених за допомогою gdal2tiles, які я хотів би представити на одній карті. Тож, представляючи плитку, мені потрібно визначити, з якого джерела подавати її, перевіряючи межі.

Хто-небудь знає, як обчислити межі лат-лону для однієї плитки на основі суто масштабу, x та y (з файлової структури, породженої gdal2tiles)? BTW: Я використовую API Google Maps v3 у випадку, якщо вам потрібно зателефонувати в API, щоб допомогти у розрахунках.

Причиною, що я обмежений суто збільшенням, x і y, є те, що плитки викликаються не просто накладанням на карту, а й певною функцією друку, яка дозволяє друкувати поза картою.

Відповіді:


22

Математика описана на:

http://www.maptiler.org/google-maps-coordinate-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. Спочатку перетворять х, у та збільшують у лат / довгий, використовуючи tile2long () та tile2lat (). 2. Використовуйте lat / long, створені на етапі, для створення меж? Як мені це зробити?
Вішал

@Petr У вас є щось для c ++?
Маджид Ходжаті

це не враховує розмір плитки?
Мухаммед Умер

@ 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 отримати коробку від кодинатного номера та збільшення

Як обчислити масштаб числа координат google, перетворити, Lat довгих і т.д.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.