请教一下,如何判断两个经纬度之间的中心点的经纬度 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cyy564

请教一下,如何判断两个经纬度之间的中心点的经纬度

  •  
  •   cyy564 2021 年 7 月 9 日 2079 次点击
    这是一个创建于 1751 天前的主题,其中的信息可能已经有所发展或是发生改变。

    例如('31.318318', '120.62872')和('31.31866', '120.63027')之间

    1.两点距离很短,500 米左右的

    2.https://stackoverflow.com/questions/6671183/calculate-the-center-point-of-multiple-latitude-longitude-coordinate-pairs?rq=1

    这文里面的方法用过,但是计算出是负数

    3.坐标系属于火星坐标

    4.网上关于这个需求的 api 真的蛮少的

    12 条回复    2021-07-09 16:54:44 +08:00
    villivateur
        1
    villivateur  
       2021 年 7 月 9 日 via Android
    怎么定义“中心”啊,如果只是简单的加起来除以二为啥不行?
    3dwelcome
        2
    3dwelcome  
       2021 年 7 月 9 日
    @villivateur 因为有投影的关系,所以中国地图上经纬度都是弯的。

    你看楼主帖子里面的提到的 stackoverflow 代码,计算就比较复杂。
    ShinichiYao
        3
    ShinichiYao  
       2021 年 7 月 9 日
    500 米那么短直接加加除以二就行了
    koast
        4
    koast  
       2021 年 7 月 9 日 via Android
    要不试试先转给正常的 wgs84,求出中心再转回火星坐标?拿那套公式推一下就行,就是不知道那套公式的误差有多大...
    wutiantong
        5
    wutiantong  
       2021 年 7 月 9 日
    想象你站在北极点,A 点在你的前方 10 米处,B 点在你的后方 10 米处,它们的“中心点”是?
    1. 北极点
    2. 你的左边 10 米处
    3. 你的右边 10 米处
    anytk
        6
    anytk  
       2021 年 7 月 9 日
    你需要以第一个点为站心,转换第二个点到站心坐标系 ENZ,然后把 ENZ 坐标中 ENZ 全部取 0.5,再从站心坐标反算到 BLH 上就行。
    其他用高斯投影也行,中央经线选择其中 1 点经线就可以,原理类似。
    如果你装有 proj 的话,可以快速测算:
    # 计算 2 点投影坐标
    proj +lon_0=120 +x_0=500000 +proj=tmerc +ellps=WGS84 -f %.8f
    120.62872 31.318318 0.0
    559845.61411542 3466437.62013044 0.0
    120.63027 31.31866 0.0
    559992.93900665 3466476.38304797 0.0

    # 取中值
    (559845.61411542 + 559992.93900665) * .0.5 = 559919.2765610351
    (3466437.62013044 + 3466476.38304797) * 0.5 = 3466457.001589205

    # 投影反算
    invproj +lon_0=120 +x_0=500000 +proj=tmerc +ellps=WGS84 -f %.8f
    559919.2765610351 3466457.001589205 0.0
    120.62949500 31.31848900 0.0

    如果用站心 ENZ 计算更简单,网上应该可以找站心坐标转换源码
    anytk
        7
    anytk  
       2021 年 7 月 9 日
    ENU 坐标计算参考 https://github.com/tomojitakasu/RTKLIB/blob/180043ee24b6d2b168f98b64be15f69d50046b1a/src/rtkcmn.c#L1950

    BLH 通过 pos2ecef 转换到 ecef,ecef2enu 获得 ENU 坐标
    ENU 通过 enu2ecef 转换到 ecef,ecef2pos 还原 BLH

    实际上,直接用 ecef 坐标来计算中间点也是可以的
    cyy564
        8
    cyy564  
    OP
       2021 年 7 月 9 日
    @anytk 谢谢大佬,我研究研究
    TomVista
        9
    TomVista  
       2021 年 7 月 9 日
    两个经纬度之间的中心点的经纬度
    我觉得
    直接相加 /2 就是正确答案,和地球是圆的没关系
    TomVista
        10
    TomVista  
       2021 年 7 月 9 日
    @TomVista 需要考虑正负
    ntdll
        11
    ntdll  
       2021 年 7 月 9 日
    @TomVista #9 球面是需要考虑的,只不过距离足够短,这种曲率可以忽略不计,极端情况是两个点位于球面的对立面,即分别处于南北极,直接除 2 的结果是不正确的。
    xiaoliaoliao
        12
    xiaoliaoliao  
       2021 年 7 月 9 日
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1187 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 48ms UTC 17:45 PVG 01:45 LAX 10:45 JFK 13:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86