Calculer les limites lat lon pour la tuile individuelle générée à partir de gdal2tiles

16

J'ai plusieurs sources de tuiles générées à l'aide de gdal2tiles que je voudrais présenter sur la même carte. Donc, lors de la présentation d'une tuile, je dois déterminer la source à partir de laquelle la servir, en vérifiant les limites.

Quelqu'un sait comment calculer les limites lat lon pour une seule tuile basée uniquement sur le zoom, x et y (à partir de la structure de fichiers générée par gdal2tiles)? BTW: J'utilise Google Maps API v3 au cas où il serait nécessaire d'appeler certaines fonctionnalités de l'API pour aider aux calculs.

La raison pour laquelle je suis limité au zoom, x et y est uniquement parce que les tuiles ne sont pas simplement appelées par une superposition sur la carte, mais également par une fonctionnalité d'impression personnalisée qui permet d'imprimer en dehors de la carte.

Gavin
la source

Réponses:

22

Le calcul est décrit à:

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

… Y compris le code source de l'utilitaire de ligne de commande et une démonstration en ligne.

C'est aussi un calcul assez simple:

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

Notez la différence entre XYZ / Google vs TMS sur l'axe y.

API Google Maps V3 vous donne les fonctions requises par trop .fromPointToLatLng()de map.getProjection().

Petr Pridal
la source
J'essaie juste de comprendre la solution ci-dessus car j'ai le même problème. Voulez-vous dire dans la solution ci-dessus que je devrais 1. Convertissez d'abord x, y et zoomez en lat / long en utilisant tile2long () et tile2lat (). 2. Utilisez lat / long créé à l'étape pour créer des limites? Comment dois-je procéder?
Vishal
@Petr Avez-vous quelque chose pour c ++?
Majid Hojati
il ne prend pas en compte la taille des carreaux?
Muhammad Umer
@ petr-pridal Cela se traduit par un point, à ma connaissance une tuile est une zone ou une surface. Pourriez-vous fournir le code d'une boîte englobante? Merci d'avance.
Herbert
De cet article gist.github.com/tmcw/4954720 , TMS est les mêmes tuiles, mais indexées en arrière. Voici la formule de conversion: Math.floor (Math.pow (2, z) - y - 1)
Haggai
0

Voici mon code de travail:

Exemple jsfiddle de superposition de type de carte image google

jsfiddle un autre échantillon de l'image de superposition 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 récupère la bbox à partir du numéro coodinate et zoom

comment calculer le nombre de coordonnées google zoom, convertir, lat long etc ....

hoogw
la source