例如('31.318318', '120.62872')和('31.31866', '120.63027')之间
1.两点距离很短,500 米左右的
这文里面的方法用过,但是计算出是负数
3.坐标系属于火星坐标
4.网上关于这个需求的 api 真的蛮少的
1
villivateur 2021-07-09 12:25:13 +08:00 via Android
怎么定义“中心”啊,如果只是简单的加起来除以二为啥不行?
|
2
3dwelcome 2021-07-09 12:33:31 +08:00
|
3
ShinichiYao 2021-07-09 12:41:33 +08:00
500 米那么短直接加加除以二就行了
|
4
koast 2021-07-09 12:41:58 +08:00 via Android
要不试试先转给正常的 wgs84,求出中心再转回火星坐标?拿那套公式推一下就行,就是不知道那套公式的误差有多大...
|
5
wutiantong 2021-07-09 13:51:01 +08:00
想象你站在北极点,A 点在你的前方 10 米处,B 点在你的后方 10 米处,它们的“中心点”是?
1. 北极点 2. 你的左边 10 米处 3. 你的右边 10 米处 |
6
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 计算更简单,网上应该可以找站心坐标转换源码 |
7
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 坐标来计算中间点也是可以的 |
9
TomVista 2021-07-09 14:43:43 +08:00
两个经纬度之间的中心点的经纬度
我觉得 直接相加 /2 就是正确答案,和地球是圆的没关系 |
11
gam2046 2021-07-09 15:05:30 +08:00
@TomVista #9 球面是需要考虑的,只不过距离足够短,这种曲率可以忽略不计,极端情况是两个点位于球面的对立面,即分别处于南北极,直接除 2 的结果是不正确的。
|
12
xiaoliaoliao 2021-07-09 16:54:44 +08:00
https://turfjs.org/docs/#center
调 API 就完事了 |