2011-10-08 3 views
0

J'ai une question concernant la conversion du serveur de tuiles de cartes et des coordonnées dans Google Maps à l'aide de la bibliothèque Google Maps Utility.Afficher l'erreur en utilisant le serveur de tuiles google maps et l'utilitaire Google Maps en PHP

Mon serveur de tuiles accède à une base de données avec des milliers de coordonnées gps (lat, lng), et pour chaque point (lat, lng), vérifie si le point est à l'intérieur des limites géographiques de la tuile; si c'est le cas, coordonne la conversion (WGS84 -> Mercator -> X, Y offset à l'intérieur de la tuile) et peint le pixel correspondant à l'intérieur de la tuile, en utilisant la bibliothèque GoogleMapsUtility.

En termes de code, je fais ce qui suit:

$point = GoogleMapUtility::getOffsetPixelCoords((float)$row['lat'], (float)$row['lng'], $zoom, $X, $Y); 

qui appelle la fonction getOffsetPixelCoords (et à son tour les fonctions ci-dessous) de la bibliothèque:

public static function getOffsetPixelCoords($lat,$lng,$zoom, $X, $Y) 
    { 
     $pixelCoords = GoogleMapUtility::getPixelCoords($lat, $lng, $zoom); 
     return new Point(
      $pixelCoords->x - $X * GoogleMapUtility::TILE_SIZE, 
      $pixelCoords->y - $Y * GoogleMapUtility::TILE_SIZE 
     ); 
    } 


public static function getPixelCoords($lat, $lng, $zoom) 
    { 
     $normalised = GoogleMapUtility::_toNormalisedMercatorCoords(GoogleMapUtility::_toMercatorCoords($lat, $lng)); 
     $scale = (1 << ($zoom)) * GoogleMapUtility::TILE_SIZE; 
     return new Point(
      (int)($normalised->x * $scale), 
      (int)($normalised->y * $scale) 
     ); 
    } 

private static function _toNormalisedMercatorCoords($point) 
    { 
     $point->x += 0.5; 
     $point->y = abs($point->y-0.5); 
     return $point; 
    } 

Ok, maintenant les résultats . Pour un niveau de zoom < 13 il fonctionne très bien, au-dessous est un exemple d'une tuile de niveau Zoom 11:

Image1

Cependant, pour une tuile dans le niveau de zoom> 13, ce qui suit se produit:

Ce qui est si étrange ... les pixels semblent être parfaitement alignés? Au début, je pensais que c'est un problème de résolution décimale, mais la résolution des données est assez bonne (stockée comme double dans une base de données MySQL, par exemple, 35.6185989379883, 139.731994628906, et en php flotteurs et doubles sont la même chose ...)

Quelqu'un pourrait m'aider sur la façon de résoudre ce problème?

Merci à l'avance ...

Répondre

0

Pourquoi utilisez-vous clichage sur le résultat de la requête de base de données? Dans l'exemple du livre googlemapsutility ce n'est pas là?

+0

Merci pour la réponse. Au départ, ce casting n'était pas là, je voulais juste vérifier ce qui se passe si j'ajoute un casting là-bas. De toute façon, j'obtiens le même résultat, indépendant du casting ... :( –