我正在使用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));
这样我可以计算移动点的像素数量(从左上角开始)。
这种方法很有效,但它并不准确,特别是当缩放级别非常高时。该点被不可接受的距离抵消。
我该如何使这项工作?我在这里错过了什么吗? 我真的很感激帮助:)
答案 0 :(得分:1)
您可以尝试其他纬度方程。我认为这是唯一的错误。尝试在纬度上使用墨卡托投影,就像这个问题一样:Convert lat/lon to pixel coordinate?并且不要改变经度方程。