我正在寻找一种算法,当给定纬度和经度对以及以米为单位的直角坐标(x,y)进行矢量平移时,该算法将为我提供一个新坐标。有点像反向的Haversine。我也可以进行距离和航向变换,但这可能会更慢并且不那么精确。理想情况下,当我在嵌入式系统上工作时,算法应该是快速的。精度并不严格,在10米以内就可以了。

评论

因此,您可以很好地将地球建模为一个球体吗?

是的,这很好,因为我期望的偏移量小于1公里。

#1 楼

如果您的位移不太大(不到几公里)并且您不在极点,请使用快速而肮脏的估计,y方向上的111111米(111.111公里)为1度(纬度), 111,111 * x方向的cos(纬度)米为1度(经度)。

评论


@托马斯:实际上,您可以非常接近两极。我使用1400 m的x和y位移对UTM计算进行了检查(因此总位移为2 km)。结果好到8.6米或更高。最差的纬度(对于这个方向和位移量)为81度:实际向北移动时,近似值实际上会更准确,并且误差会保持在10米以下,直到超过89.6度为止!

– hu
2010-10-27 21:36

顺便说一句,通过知道一些历史记录就很容易记住这些111111的魔幻数字:法国人最初对电表进行了定义,以使10 ^ 7米为从巴黎赤道到北极的子午线距离。因此,两个世纪前的法国测量师能力范围内,10 ^ 7/90 = 111,111.1米等于一个纬度。

– hu
10-10-27在21:38

因此,使用公式,如果我想在y方向上从10.0 N,10.0 E向+ 100m移动,我是否只需加上100/111111?如果沿x方向+ 100m移动,它将是100÷(111,111×(cos 10))?只要确保我做对了。

– Thomas O
10-10-27在21:47

@Thomas是的,是的。请注意,第二个公式应如何按原样扩展视x位移(通过除以小于1的数字),这是因为当您从赤道移向两极时,经度会变小。唯一可能的障碍是确保您和您的软件平台就“ cos”的含义达成共识:最好将cos(10)解释为10度的余弦,而不是10弧度! (如果不是,则10度= 10 * pi / 180弧度说明了简单的转换。)此时,@ haakon_d提供的代码对您来说应该是完全有意义的。

– hu
2010-10-27 21:54

有人试图编辑此答案,用“ km”代替“ meters”。他们可能在欧洲用小数点表示逗号。我遵循美国的约定(我也相信这也是国际出版物的约定),即使用逗号将长数字字符串分成三组和小数点“”。而不是逗号。 (在前面的注释中清楚地显示了此用法。)为避免歧义,我对答案进行了编辑以清楚地显示逗号和点的含义。

– hu
13年2月11日在16:20



#2 楼

就像利德曼在回答中所说的那样,威廉姆斯的航空公式是无价的,要使位移1公里以内的精度保持在10米以内,您可能需要使用更复杂的公式。如果您愿意接受点距大于200m的点超过10m的误差,则可以使用简化的平地计算。我认为对于1公里以内的偏移,误差仍将小于50m。

 //Position, decimal degrees
 lat = 51.0
 lon = 0.0

 //Earth’s radius, sphere
 R=6378137

 //offsets in meters
 dn = 100
 de = 100

 //Coordinate offsets in radians
 dLat = dn/R
 dLon = de/(R*Cos(Pi*lat/180))

 //OffsetPosition, decimal degrees
 latO = lat + dLat * 180/Pi
 lonO = lon + dLon * 180/Pi 


这应该返回:

评论


我只想指出,这与我提供的答案相同,只是您用111,319.5代替了我的每度111,111米的值。在高纬度时,您的值会稍好一些,而在低纬度(0至约40度)时,您的值会稍差。任一值均满足规定的精度要求。

– hu
10-10-27在21:42

+1用于提供代码。请注意,它比您怀疑的要准确(误差通常在2000 m内小于5 m)。

– hu
2010-10-27 21:55

我想知道是否应该在我的回答中加上一句话,即除了R的值外,这与您的解决方案相同,但为简洁起见,省略了它。谈到精度,只要您不对系统增加任何旋转误差,就对。使用在局部投影坐标系中测量的偏移量,旋转误差可能会变得非常大。

– haakon_d
10-10-28在8:33

这是一个很好的观点:我们隐式地假设x位移至少接近真实的东西向,而y位移接近南北。如果不是,则必须在计算它们的经纬度等效值之前将其转换为等效的E-W和N-S位移(不仅仅是“ eastings”和“ northings”)。

– hu
2010年11月2日,21:35

航空公式方程的d距离参数以弧度为单位,例如(距离/地球半径)。

–user1089933
2012年11月15日21:10

#3 楼

我发现航空公式对于这些类型的公式和算法非常有用。对于您的问题,请查看“纬度/经度给定的半径和距离”:此处

请注意,如果您想使三角函数的使用率保持在较低水平,则此算法可能对于您的使用而言过于复杂等

评论


谢谢你-看起来很理想。虽然我不知道距离是米还是其他度量单位。

– Thomas O
10-10-27在11:25

#4 楼

首先投影点可能很有意义。您可以编写以下伪代码:

falt_coordinate = latlon_to_utm(original_koordinate)
new_flat_coordinate = flat_coordinate + (x,y)
result_coordinate = utm_to_latlon(new_flat_coordinate)


其中(x,y)是所需的偏移量。

需要使用utm,任何在您所在地区有意义的平面坐标系都可以。

您正在使用什么软件?

#5 楼

我在Google Maps上创建了一个简单的自定义地图,该地图说明了公认的答案(1/111111 ==一米)中提到的估算算法。请随时在此处查看和使用它:

https://drive.google.com/open?id=1XWlZ8BM00PIZ4qk43DieoJjcXjK4z7xe&usp=sharing



#6 楼




应采用Vincenty的直接配方。

评论


欢迎使用GIS SE!作为新用户,请参观。一个好的答案应该是独立的,并包括所有必需的步骤和细节。请编辑您的答案以添加有关如何使用您的建议以及原因的解释。

– Midavalo♦
7月27日1:54