1
anytk 2021-08-06 09:04:33 +08:00 1
参考: https://geographiclib.sourceforge.io/html/python/geodesics.html#introduction
先 Geodesic.Inverse 然后距离平分再 Geodesic.Direct |
2
liyang5945 2021-08-06 09:08:14 +08:00 1
之前用过 turf.js ,需要用里面三个方法,先算出 ab 两点的距离,比如 100Km,然后计算 ab 之间的方位角,比如 45 度(即 b 在 a 的东北方向,正北为 0 度),再根据点、距离和角度计算目标点(以 a 为基准点,45 度上任意距离点的坐标)
文档地址: https://turfjs.fenxianglu.cn/category/measurement/destination.html |
3
VensonEEE 2021-08-06 09:08:36 +08:00
先切经线 再切纬线
|
4
ck65 2021-08-06 09:10:24 +08:00 via iPhone 1
看看 linear referencing 的知识,你的问题不复杂。比如 PostGIS 的 line interpolate points 函数或许可以直接解决你的问题 https://postgis.net/docs/ST_LineInterpolatePoints.html
|
5
urmyfaith 2021-08-06 09:12:59 +08:00
先转换空间,然后等分,再将空间转换回来。
|
7
sadfQED2 2021-08-06 09:22:12 +08:00 via Android
先把经纬度坐标系转换成墨卡托投影坐标系,然后再进行几何计算,计算完以后再转换成经纬度坐标
|
8
3dwelcome 2021-08-06 09:23:23 +08:00 via Android
不用那么复杂,四元数就是专门干在球面上,两点之间插值算法的。线性插值就是了。
|
9
no1xsyzy 2021-08-06 09:27:30 +08:00
用坐标系变换做会更简单一点。
原点不变,不作切变,只做旋转,三个自由度 a 点变换到 $(1,0,0)$ b 点变换到 $(\cos\theta, \sin\theta, 0)$ 4 个变量四个方程(实际上是 6 个方程但有两个同解) 更直接的求解是按 x=y=0 轴把 a 转到 y=0 平面,再按 x=z=0 轴把 a 转到 z=0 平面,再用 y=z=0 轴把 b 转到 z=0 平面。 从而得知等分后的点为 $(\cos\frac{k\theta}{n+1}}, \sin\frac{k\theta}{n+1}}, 0)$ 之后再旋转回去。 |
10
3dwelcome 2021-08-06 09:30:25 +08:00 via Android
|
11
no1xsyzy 2021-08-06 09:53:57 +08:00
|
13
no1xsyzy 2021-08-06 10:01:11 +08:00 1
@3dwelcome 墨卡托没有破坏直线,方法是投影到赤道圈沿极轴无限延伸形成的圆柱,然后沿任意经线切开或者循环表示。
但是破坏了距离,所以不能用于等分插值。简单的示例是极点到赤道上任意一点的二等分插值,应在 45 度纬度,但墨卡托下极点在无穷远处,平面插值二分之一无穷远也是无穷远。 |
14
no1xsyzy 2021-08-06 10:03:16 +08:00
|
15
KouShuiYu 2021-08-06 10:09:01 +08:00
先将经纬度换算成 xyz 坐标,然后当球体等分处理就行了
|
16
ChristianChen 2021-08-06 11:20:41 +08:00
两点分别算经纬度弧长,平分后再反求经差,纬差;投影那是另外一个问题
公式可以参阅 http://www.whigg.cas.cn/resource/zysk/dlxx/201011/P020101127664602088413.pdf P15:2-13,P16:2-17 自己验证吧,我已经完全没有记忆了 |
17
cht 2021-08-07 06:22:28 +08:00
写了个简单 demo,如果有 Xcode 的话可以试一下:aHR0cHM6Ly9naXRodWIuY29tL3lvMTk5NS9EYWlseV9Td2lmdF9UYXNrcy90cmVlL21hc3Rlci9HZW9kZXRpY0RpdmlkZUFMaW5l
仅供参考 |