我有一个关于使用 Google Maps Utility 库在 Google Maps 中的地图图块服务器和坐标转换的问题。
我的瓦片服务器访问具有数千个 gps 坐标 (lat,lng) 的数据库,并且对于每个 (lat,lng) 点,检查该点是否在瓦片的地理范围内;如果是这样,则使用 GoogleMapsUtility 库进行坐标转换(WGS84 -> Mercator -> 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 中的图块示例:
但是,对于缩放级别 >13 的图块,会发生以下情况:
这太奇怪了……像素似乎完全对齐了?一开始以为是十进制分辨率的问题,但是数据的分辨率还是蛮好的(在mysql数据库中存储为double,比如35.6185989379883、139.731994628906,而在php中floats和doubles是一回事……)
有人可以帮我解决这个问题吗?
提前致谢...