-1

我正在使用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));

SWPointNEPoint是西南点和东北点的世界坐标(图像地图边界)。然后我使用以下公式计算这些点的像素坐标:

pixelCoordinate = worldCoordinate * 2^zoomLevel

在获取边界的像素坐标后,我还使用相同的公式计算每个 Lat/Lng 点(我想在地图上绘制)的像素坐标。

为了在图像上放置某个点,我使用:

PointF point = new PointF((float)(pointPixelCoordinates.X - SWpixelCoordinate.X), (float)(pointPixelCoordinates.Y - NEpixelCoordinate.Y));

这样我就可以计算出移动点的像素数量(从左上角开始)。

这种方法是有效的,但是它并不准确,特别是当缩放级别非常高时。该点偏移了不可接受的距离。

我怎样才能使这项工作?我在这里错过了什么吗?我真的很感激帮助:)

4

1 回答 1

1

您可以尝试其他纬度方程。我认为这是唯一的错。尝试在纬度上使用墨卡托投影,如以下问题:将纬度/经度转换为像素坐标?并且不要改变经度方程。

于 2014-10-06T10:20:38.450 回答