使用谷歌地图瓷砖服务器和PHP中的谷歌地图工具显示错误

问题描述:

我有一个关于地图瓷砖服务器和坐标转换谷歌地图使用谷歌地图工具库的问题。使用谷歌地图瓷砖服务器和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浮点数和双精度值是一样的)

有人可以帮我解决这个问题吗?

在此先感谢...

为什么对数据库查询的结果使用类型转换?在googlemapsutility这本书的例子中,它不在吗?

+0

感谢您的回复。最初那个演员不在那里,我只是想检查一下如果我在那里添加一个演员会发生什么。无论如何,我得到相同的结果,独立的铸造...... :( –