如何计算地图上第二个点的坐标?

How to calculate the coordinates of the second point on the map?

Example picture我有地图上第一个点的坐标,点之间有距离,并且有相对于基点(从罗盘)的旋转度数。请告诉我如何计算地图上第二个点的坐标?

我试着用计算点间距离的公式重建它,但我不知道如何使用旋转度数,最后我完全糊涂了。

这个问题可以有多种答案,具体取决于您所说的纬度、经度和罗盘的确切含义,以及您需要的精度。

最简单的情况是纬度和经度是相对于球形地球模型(地球半径为R),亚米精度就足够了。然后我们可以计算:

lat1Rad = lat1 * pi/180 // latitude of source point in radians
lon1Rad = lon1 * pi/180 // longitude of source point in radians
slat = R  // R is earth radius 
slon = R*cos( lat1Rad)
bRad = compass*pi/180  // compass reading in radians
dN = dist*cos( bRad)   // change in northing
dE = dist*sin( bRad)   // change in easting
lat2Rad = lat1Rad + dN/slat  // target latitude in radians
lon2Rad = remainder( lon2Rad + dE/slon, 2.0*pi)  // target longitude in radians

这只是平面几何,除了经度的比例(即经度的微小变化以米为单位值多少)随纬度的余弦而变化。

对于 100 米的距离,这应该优于一毫米,对于长达 1 公里的距离,这应该优于一厘米。

您可能想知道在计算经度时调用余数。在你的具体情况下它不是必需的(即可以省略),但多年来我已经养成了编写代码的习惯,即使你靠近 180 East(或 West)

一些比较复杂的情况: 您的纬度和经度可能与地球的椭圆体模型(例如 WGS84)有关。在这种情况下,slat 和 slon 变量需要使用所用椭圆体的详细信息进行不同的计算。

你的指南针是一个磁性装置。在这种情况下,您需要校正指南针的磁差(又名磁偏角)以获得相对于真北的读数。

您需要更高的准确度。在大地测量学中通常将问题解释为遵循点之间的测地线(球形地球的大圆)。然后需要完全重写代码。对于球形地球,可以使用(相对)简单的公式。对于椭圆形地球,周围有代码可以进行此计算。