我正在使用Google Maps Image API来获取地图的静态图像。我有中心位置坐标和缩放级别。
我想要做的是在静态地图图像上放置其他 Lat/Lng 坐标,所以我应该将 Lat/Lng 坐标转换为 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));
这样我就可以计算出移动点的像素数量(从左上角开始)。
这种方法是有效的,但是它并不准确,特别是当缩放级别非常高时。该点偏移了不可接受的距离。
我怎样才能使这项工作?我在这里错过了什么吗?我真的很感激帮助:)