0

我有一个关于使用 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 中的图块示例:

图片1

但是,对于缩放级别 >13 的图块,会发生以下情况:

图片2

这太奇怪了……像素似乎完全对齐了?一开始以为是十进制分辨率的问题,但是数据的分辨率还是蛮好的(在mysql数据库中存储为double,比如35.6185989379883、139.731994628906,而在php中floats和doubles是一回事……)

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

提前致谢...

4

1 回答 1

0

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

于 2011-10-08T09:45:43.153 回答