当从其他点只知道dx dy时,获取pos的lat lon

2024-09-21 04:36:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到的问题是,当我知道一个原点位置和到另一个点的偏移量(以米为单位)时,得到一个位置的经纬度

我想使用以下函数(或任何其他能给我正确的lat2和lon2的函数):

import geographiclib
geographiclib.geodesic.Geodesic.Direct(self, lat1, lon1, azi1, s12)

我有一些数据示例:

^{2}$

这是我希望达到的结果:

azi1 = -120.95109978727244
s12 = 61691.57175978693         
lat2 = 55.69834 
lon2 = 10.77969

当我使用UTM2latlon转换器时,我得到的位置离我很远。。 我认为用来计算dx和dy的坐标系是ESPG:5596。在

由于距离很大,而且考虑到了地球的距离,塞塔戈拉定理不适用于计算s12和azi1。对功能等有什么建议吗。?在


Tags: 函数import距离单位偏移量经纬度geodesicdirect
2条回答

您可以通过两个步骤获得接近预期值的结果:

from geographiclib.geodesic import Geodesic

lon1 = 11.62113333
lat1 = 55.9862

dx = -51659.25 #meter
dy = -33702.33 #meter

tmp = Geodesic.WGS84.Direct(
    lat1, lon1,
    90, # Go East ...
    dx) #         ... (negatively, so actually West)

destination = Geodesic.WGS84.Direct(
    tmp['lat2'], tmp['lon2'],
    0,  # Go North ...
    dy) #          ... (negatively, so actually South)

lat2, lon2 = destination['lat2'], destination['lon2']
# 55.680721562111955, 10.793499275609594

但这种计算在概念上仍然是错误的。在

如果我们假设地球是一个球体(而不是椭球体),那么第二步(向北/向南)就可以了,因为你在子午线上移动,这是一个大圆。沿着一个大圆的任何一条路都是它的起点和终点之间最短的(在表面上)路径,除非它绕球体超过一半。测地线是椭球体上的最短路径,所以这很适合。在

然而,第一步,我们想向东走dx米(或向西-dx米)。沿着测地线往西走最初不会这样做,因为平行线(除了赤道)不是很好的圆/测地线。因此,计算的路径将偏离平行线,您可以通过查看中间位置很容易看到:

^{pr2}$

那里的纬度(tmp['lat2'])不是我们的初始纬度,方位角(tmp['azi2'])也从90度(直西方)变了!在

因此,测地计算可能不是解决问题的正确方法。还请注意,当这样计算时,顺序或步骤(无论是先向北/向南,然后是东/西,还是先东/西,然后是北/南)将显著影响结果。在

哪个顺序是“正确的”(如果有的话)是由dxdy引用的投影/笛卡尔坐标系决定的。在

谢谢你的尝试!在

不幸的是,我使用了一些旧的算法,所以“正确答案”是一个更简单的函数。在

def melat(lat):
    return  degrees( log ( tan ( radians( lat / 2 + 45 ) ) ))

def latit(mlt):
    return ( degrees(atan ( exp ( radians(mlt) ) )) - 45 ) * 2

def XY2LatLong(x, y):
    EQUATOR_MINUTE_LENGTH = 1851.8518519
    GeoPoint = namedtuple('GeoPoint', ('lat', 'lon'))
    Point = namedtuple('Point', ('x', 'y'))
    base = GeoPoint(55.98619572, 11.62113936)
    factor = cos( radians(base.lat) ) * EQUATOR_MINUTE_LENGTH * 60.
    return GeoPoint(
        latit(melat(base.lat) + y / factor),
        base.lon + x / factor) 

相关问题 更多 >

    热门问题