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

2021-07-09 12:18:58 +08:00
 cyy564

例如('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 真的蛮少的

1499 次点击
所在节点    问与答
12 条回复
villivateur
2021-07-09 12:25:13 +08:00
怎么定义“中心”啊,如果只是简单的加起来除以二为啥不行?
3dwelcome
2021-07-09 12:33:31 +08:00
@villivateur 因为有投影的关系,所以中国地图上经纬度都是弯的。

你看楼主帖子里面的提到的 stackoverflow 代码,计算就比较复杂。
ShinichiYao
2021-07-09 12:41:33 +08:00
500 米那么短直接加加除以二就行了
koast
2021-07-09 12:41:58 +08:00
要不试试先转给正常的 wgs84,求出中心再转回火星坐标?拿那套公式推一下就行,就是不知道那套公式的误差有多大...
wutiantong
2021-07-09 13:51:01 +08:00
想象你站在北极点,A 点在你的前方 10 米处,B 点在你的后方 10 米处,它们的“中心点”是?
1. 北极点
2. 你的左边 10 米处
3. 你的右边 10 米处
anytk
2021-07-09 13:54:19 +08:00
你需要以第一个点为站心,转换第二个点到站心坐标系 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
2021-07-09 14:01:00 +08:00
ENU 坐标计算参考 https://github.com/tomojitakasu/RTKLIB/blob/180043ee24b6d2b168f98b64be15f69d50046b1a/src/rtkcmn.c#L1950

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

实际上,直接用 ecef 坐标来计算中间点也是可以的
cyy564
2021-07-09 14:16:56 +08:00
@anytk 谢谢大佬,我研究研究
TomVista
2021-07-09 14:43:43 +08:00
两个经纬度之间的中心点的经纬度
我觉得
直接相加 /2 就是正确答案,和地球是圆的没关系
TomVista
2021-07-09 14:45:08 +08:00
@TomVista 需要考虑正负
gam2046
2021-07-09 15:05:30 +08:00
@TomVista #9 球面是需要考虑的,只不过距离足够短,这种曲率可以忽略不计,极端情况是两个点位于球面的对立面,即分别处于南北极,直接除 2 的结果是不正确的。
xiaoliaoliao
2021-07-09 16:54:44 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/788502

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX