使用.NET在静态图像地图上绘制Lat/Lng值
我正在使用获取地图的静态图像。我有中心位置坐标和缩放级别 我想做的是将其他Lat/Lng坐标放置在静态地图图像上,以便将Lat/Lng坐标转换为XY坐标 我的方法: 首先,我使用类似于的墨卡托投影计算中心点的位置。 然后,我使用以下公式计算静态图像的边界:使用.NET在静态图像地图上绘制Lat/Lng值,.net,google-maps,coordinates,mercator,.net,Google Maps,Coordinates,Mercator,我正在使用获取地图的静态图像。我有中心位置坐标和缩放级别 我想做的是将其他Lat/Lng坐标放置在静态地图图像上,以便将Lat/Lng坐标转换为XY坐标 我的方法: 首先,我使用类似于的墨卡托投影计算中心点的位置。 然后,我使用以下公式计算静态图像的边界: PointF SWPoint = new PointF((float)(centerPointWorldCoordinates.X - (mapWidth / 2.0f) / scale), (float)(centerPointWorldC
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));
这样我就可以计算出移动点(从左上角)的像素数量
这种方法是可行的,但是,它不是真正准确的,特别是当缩放级别非常高时。该点偏移了不可接受的距离
我怎样才能做到这一点?我是不是遗漏了什么?
我非常感谢您的帮助:)您可以试试其他纬度公式。我认为这是唯一的错误。尝试在纬度上使用墨卡托投影,如问题所示:不要更改经度方程。根据维基百科,谷歌地图使用墨卡托投影的近似变体。您使用的是谷歌变体,还是标准墨卡托?我正在使用此链接中详细介绍的Google变体,您是否可能在使用
float
而不是double
时遇到精度错误?当你放大时,你提到了问题的表现。@EricJ。不,这不仅仅是浮点
和双精度
之间的精度误差。我尝试使用double
,但错误仍然存在。如果您确定投影代码工作正常,请检查以确保与纬度和经度坐标的顺序一致。否则我就看不到任何东西向我扑来。更多的代码可能会帮助我们更好地分析它。