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

Java 如何计算地图上第二个点的坐标?,java,math,gps,Java,Math,Gps,我有地图上第一个点的坐标,这些点之间有一段距离,还有相对于基点的旋转度(从指南针)。请告诉我如何计算地图上第二个点的坐标 我试着用公式计算点之间的距离并重新构建它,但我不知道如何使用旋转度,最后我完全搞糊涂了。这个问题可能有多种答案,具体取决于你所说的纬度、经度和指南针的确切含义,以及你所要求的精度 最简单的情况是,纬度和经度相对于地球的球形模型(地球半径为R),亚米精度就足够了。然后我们可以计算: lat1Rad = lat1 * pi/180 // latitude of source po

我有地图上第一个点的坐标,这些点之间有一段距离,还有相对于基点的旋转度(从指南针)。请告诉我如何计算地图上第二个点的坐标


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

这个问题可能有多种答案,具体取决于你所说的纬度、经度和指南针的确切含义,以及你所要求的精度

最简单的情况是,纬度和经度相对于地球的球形模型(地球半径为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度,代码也能正常工作

一些更复杂的情况: 您的lat和long可能与地球的椭球模型有关(例如WGS84)。在这种情况下,slat和slon变量需要使用所用椭球体的细节进行不同的计算

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


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

你能举个例子吗?这样就更容易理解了。例如,我站在A点,写下它的坐标和我走的方向,走完这段距离,然后写下来。现在我怎么才能找到我停下来的点的坐标呢?如果你用油漆或其他东西画一个例子并展示出来,那就太好了。我现在还不太清楚。现在对我来说这听起来像是简单的矢量加法,这可能是错误的,因为你提到了一些关于旋转的东西。添加了一张图片