Export tuile dans une zone déterminée

Bonjour à tous,

Je développe actuellement une application de sentier de randonnée offrant une navigation en mode offline.
L’application sur Android est en cours de finalisation.

Par contre, suite à la création d’une randonnée par un backoffice, le serveur (php) doit télécharger automatiquement les tuiles pour un zoom de 10 à 16 ( env. 3km²).
Donc je dois mettre en place une procédure pour télécharger ces tuiles dans une zone bien déterminée (box) à partir de coordonnées haut/gauche et bas/droite.

Je n’ai pas trouvé de fonctionnalité déjà disponible pour cela.

J’ai trouvé les infos suivantes :

$xtile = floor((($lon + 180) / 360) * pow(2, $zoom));
		$ytile = floor((1 - log(tan(deg2rad($lat)) + 1 / cos(deg2rad($lat))) / pi()) /2 * pow(2, $zoom));
		return array($xtile, $ytile);

Je me disais que :

  • récupérer les coordonnées basdroite
  • les comparer à latmax/lonmax de ma box
    -si > alors je refais la même chose aux coordonnées de départ +0.00000001
  • etc …

Mais par contre je ne trouve pas de fonctionnalité qui pourrait me retourner les coordonnées (bas/droite) de la tuile.

Est ce que cette fonctionnalité est disponible ? Ou je me trompe peut être de voie !?


Si quelqu’un avait la possibilité de m’éclairer …? , merci par avance.

Au pire en faisant le même calcul pour le coin bas/droite tu aura une rangée et une colonne de tuiles en trop. Ca fera tant que ça ?
Au zoom 10, 3km2 ça va tenir dans très très peu de tuiles, il en faudra peu être un peu plus autour pour ne pas avoir de zone vide.

Attention aussi au fair-use… télécharger en masse des tuiles n’est pas forcément très bien vu par les serveurs qui les mettent à disposition gratuitement.

Merci de t’intérésser à mon sujet.

Avec ma technique je suis obligé de connaitre les coordonnées bas droite de la tuile.
Serais tu si il y a une méthode de calcul pour trouver les coordonnées hautgauche et bas droite d’une tuile ?

Edit :
A première vue la coordonnée hautgauche se calcul avec :

$n = pow(2, $zoom);
		$lon = $xtile / $n * 360.0 - 180.0;
		$lat = rad2deg(atan(sinh(pi() * (1 - 2 * $ytile / $n))));
		return array($lat, $lon);

Il me manque la coordonnée bas droite :frowning:

Edit 2 :slight_smile:
Je pense avoir trouvé, il suffit de calculer les coordonnées de la tuile X+1 et Y+1, pour récupérer les coordonnées hautgauche de la tuile x+1/y+1 donc basdroite de la tuile x/y

Je ne ferrais pas de téléchargement en masse, à terme cela pourra concerner une centaine de randonnée, les fichiers seront stockés sur mon serveur puis télécharger par l’application depuis le serveur.

Bonjour
Je réitère les remarques de Christian sur l’aspiration de tuiles : c’est un sujet sensible chez tous ceux qui désignent des cartes avec des moyens d’hébergement limités.
Ton IP va apparaitre dans leur liste, et le risque est grand de te voir bannir. Il y a déjà pas mal d’app de smartphone qui sont bannies, mais cela peut aussi arriver avec des serveurs !

Pourquoi ne pas s’appuyer sur mapsforge : c’est une solution android de cartes offline basées sur des données OSM.
Avec Osmosis et un plugin dédié tu extraits les données OSM au format mapforge pour la zone donnée (zone de n’importe quelle forme)
Le rendu est réalisé par l’androphone avec un fichier de style modifiable et le fichier de données précédemment produit.

http://code.google.com/p/mapsforge/
Le mieux est d’installer l’appli de démo AdvancedMapViewer pour voir comment cela marche.

Je suis utilisateur de c:geo (appli de geochaching) qui s’appuie sur mapsforge pour le rendu offline: pouvoir faire un zoom 20 sur la carte pour les geocache en ville, c’est incomparable !