2011-10-08 62 views
0

我有一個關於地圖瓷磚服務器和座標轉換谷歌地圖使用谷歌地圖工具庫的問題。使用谷歌地圖瓷磚服務器和PHP中的谷歌地圖工具顯示錯誤

我的瓷磚服務器訪問數以千計的GPS座標(緯度,經度)的數據庫,併爲每(緯度,經度)點,檢查點是瓷磚的地域範圍內;如果是,則使用GoogleMapsUtility庫對座標轉換(WGS84 - >墨卡託 - > X,瓦片內的Y偏移量)進行座標轉換並繪製瓦片內相應的像素。

在代碼方面,我做了以下內容:

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

它調用getOffsetPixelCoords功能(反過來下面的函數)從庫:

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

好了,現在的結果。對於縮放級別< 13它的偉大工程,下面是在縮放級別11瓦的例子:

Image1

然而,在縮放等級> 13瓦,將發生以下情況:

Image2

這太奇怪了......像素似乎完全一致?起初,我認爲這是一個小數分辨率的問題,但數據的分辨率是相當不錯的(在MySQL數據庫中存儲爲雙精度,例如35.6185989379883,139.731994628906,而在php浮點數和雙精度值是一樣的)

有人可以幫我解決這個問題嗎?

在此先感謝...

回答

0

爲什麼對數據庫查詢的結果使用類型轉換?在googlemapsutility這本書的例子中,它不在嗎?

+0

感謝您的回覆。最初那個演員不在那裏,我只是想檢查一下如果我在那裏添加一個演員會發生什麼。無論如何,我得到相同的結果,獨立的鑄造...... :( –