使用.NET在静态图像映射上绘制Lat / Lng值

时间:2014-09-25 20:21:48

标签: .net google-maps coordinates mercator

我正在使用Google Maps Image APIs来获取地图的静态图像。我有中心位置坐标和缩放级别。

我想要做的是在静态地图图像上放置其他Lat / Lng坐标,这样我就应该将Lat / Lng坐标转换为XY坐标。

我的方法:

首先,我使用类似于World Coordinates的墨卡托投影计算中心点的this。 然后我使用下面的公式计算出静态图像的边界:

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 是西南点和东北点(图像映射边界)的世界坐标。然后我使用以下公式计算这些点的Pixel Coordinates

pixelCoordinate = worldCoordinate * 2^zoomLevel

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

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

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

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

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

我该如何使这项工作?我在这里错过了什么吗? 我真的很感激帮助:)

1 个答案:

答案 0 :(得分:1)

您可以尝试其他纬度方程。我认为这是唯一的错误。尝试在纬度上使用墨卡托投影,就像这个问题一样:Convert lat/lon to pixel coordinate?并且不要改变经度方程。