我正在使用Google Maps Image API获取地图的静态图像。我有中心位置坐标和缩放级别。
我想做的是在静态地图图像上放置其他Lat/Lng坐标,这样我就应该将Lat/Lg坐标转换为XY坐标。
我的方法:
首先,我使用类似的墨卡托投影来计算中心点的世界坐标。然后我使用以下公式计算出静态图像的边界:
PointF SWPoint = new PointF((float)(centerPointWorldCoordinates.X - (mapWidth / 2.0f) / scale), (float)(centerPointWorldCoordinates.Y + (mapHeight / 2.0f) / scale));
PointF NEPoint = new PointF((float)(centerPointWorldCoordinates.X + (mapWidth / 2.0f) / scale), (float)(centerPointWorldCoordinates.Y - (mapHeight / 2.0f) / scale));
SWPoint和NEPoint界坐标(图像地图边界)。然后我使用以下公式计算这些点的像素坐标:
pixelCoordinate = worldCoordinate * 2^zoomLevel
在获取边界的像素坐标后,我还使用相同的公式计算每个Lat/Lng点(我想在地图上绘制)的像素坐标。
为了在图像上放置某个点,我使用:
PointF point = new PointF((float)(pointPixelCoordinates.X - SWpixelCoordinate.X), (float)(pointPixelCoordinates.Y - NEpixelCoordinate.Y));
通过这种方式,我可以计算出移动点的像素数量(从左上角开始)。
这种方法是有效的,但是,它并不是非常准确,特别是当缩放级别非常高时。该点偏移了不可接受的距离。
我怎样才能做到这一点?我是不是遗漏了什么?我真的很感谢您的帮助:)
您可以尝试其他纬度公式。我认为这是唯一的错误。试着在纬度上使用mercator投影,比如这个问题:将纬度/经度转换为像素坐标?不要改变经度方程式。