Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用.NET在静态图像地图上绘制Lat/Lng值_.net_Google Maps_Coordinates_Mercator - Fatal编程技术网

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

使用.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

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

我想做的是将其他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));
这样我就可以计算出移动点(从左上角)的像素数量

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

我怎样才能做到这一点?我是不是遗漏了什么?
我非常感谢您的帮助:)

您可以试试其他纬度公式。我认为这是唯一的错误。尝试在纬度上使用墨卡托投影,如问题所示:不要更改经度方程。

根据维基百科,谷歌地图使用墨卡托投影的近似变体。您使用的是谷歌变体,还是标准墨卡托?我正在使用此链接中详细介绍的Google变体,您是否可能在使用
float
而不是
double
时遇到精度错误?当你放大时,你提到了问题的表现。@EricJ。不,这不仅仅是
浮点
双精度
之间的精度误差。我尝试使用
double
,但错误仍然存在。如果您确定投影代码工作正常,请检查以确保与纬度和经度坐标的顺序一致。否则我就看不到任何东西向我扑来。更多的代码可能会帮助我们更好地分析它。