Berechnen Sie die Lat-Lon-Grenzen für einzelne Kacheln, die aus gdal2tiles generiert wurden


16

Ich habe mehrere Kachelquellen mit gdal2tiles generiert, die ich auf derselben Karte präsentieren möchte. Wenn ich also eine Kachel präsentiere, muss ich anhand der Grenzen feststellen, von welcher Quelle sie geliefert werden soll.

Weiß jemand, wie man die Lat-Lon-Grenzen für eine einzelne Kachel berechnet, die nur auf Zoom, X und Y basiert (aus der von gdal2tiles generierten Dateistruktur)? Übrigens: Ich verwende Google Maps API v3, falls Funktionen über die API aufgerufen werden müssen, um Berechnungen durchzuführen.

Der Grund, warum ich mich nur auf Zoom, X und Y beschränke, ist, dass die Kacheln nicht nur durch ein Overlay auf der Karte aufgerufen werden, sondern auch durch einige benutzerdefinierte Druckfunktionen, die das Drucken außerhalb der Karte ermöglichen.

Antworten:


22

Die Mathematik ist beschrieben unter:

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

… Einschließlich des Quellcodes für das Befehlszeilendienstprogramm und einer Online-Demonstration.

Es ist auch ziemlich einfach Mathe:

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

Beachten Sie den Unterschied zwischen XYZ / Google und TMS auf der y-Achse.

Mit Google Maps API V3 erhalten Sie auch die erforderlichen Funktionen über .fromPointToLatLng()von map.getProjection().


Ich versuche nur, die obige Lösung zu verstehen, da ich das gleiche Problem habe. Meinen Sie in der obigen Lösung, dass ich 1. Zuerst x, y konvertieren und mit tile2long () und tile2lat () nach lat / long zoomen sollte. 2. Verwenden Sie lat / long, das in step erstellt wurde, um Grenzen zu erstellen? Wie soll ich das machen
Vishal

@Petr Hast du was für c ++?
Majid Hojati

Berücksichtigt es nicht die Fliesengröße?
Muhammad Umer

@ petr-pridal Daraus ergibt sich nach meiner Kenntnis ein Punkt, bei dem eine Fliese eine Fläche oder Oberfläche ist. Könnten Sie Code für einen Begrenzungsrahmen bereitstellen? Danke im Voraus.
Herbert

Aus diesem Artikel gist.github.com/tmcw/4954720 geht hervor , dass TMS dieselben Kacheln enthält, jedoch rückwärts indiziert ist. Dies ist die Umrechnungsformel: Math.floor (Math.pow (2, z) - y - 1)
Haggai


0

Das ist mein Arbeitscode:

jsfiddle Beispiel für eine Google Image Map-Überlagerung

jsfiddle ein weiteres Beispiel für ein Google-Overlay-Bild

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 holt sich bbox von coodinate number und zoom

wie man Google-Koordinatenzahlzoom berechnet, umwandelt, langes Lat usw.….

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.