geodesy 是对大地椭球体表面点进行运算的库。可以计算地表两点间的最短距离和路径。或已知距离和方位求终点,并且可以对结果进行格式化输出。
使用方法
在页面中使用
<!doctype html><title>geodesy example</title><meta charset="utf-8">
<script type="module">
import LatLon from 'https://cdn.jsdelivr.net/npm/geodesy@2.3.0/latlon-spherical.min.js';
const p1 = new LatLon(50.06632, -5.71475);
const p2 = new LatLon(58.64402, -3.07009);
const d = p1.distanceTo(p2);
console.assert(d.toFixed(3) == '968874.704');
const mid = p1.midpointTo(p2);
console.assert(mid.toString('dms') == '54° 21′ 44″ N, 004° 31′ 51″ W');
</script>
在Nodejs中使用
对于无法使用 import ... from "..."
语句的场景,可以用import("...")
函数引入,在异步和同步场景下也有差异。
安装
一般直接安装geodesy
,TS项目中需要安装@types/geodesy
。
npm install geodesy
import引入
import LatLon from 'geodesy/latlon-spherical.js';
const p1 = new LatLon(50.06632, -5.71475);
const p2 = new LatLon(58.64402, -3.07009);
异步函数中使用
async function amain(){
const { default: LatLon } = await import('geodesy/latlon-spherical.js');
const p1 = new LatLon(52.205, 0.119);
}
amain()
同步函数中使用
import('geodesy/latlon-spherical.js')
.then((s) => {
const LatLon = s.default
const p1 = new LatLon(52.205, 0.119);
})
主要功能
- 计算两个经纬度点的距离。
- 已知一点坐标及其与另一点的距离和方位,求另一点。
- 求两点的途经点。
- 坐标格式转换。
已知两点求路径距离、方位和途径点
使用球面算法和vincenty算法具有相同的功能,区别在于球面算法计算速度更快,vincenty算法步骤繁琐但是更精确。
//import LatLon from 'geodesy/latlon-spherical.js';//球面算法
import LatLon from 'geodesy/latlon-ellipsoidal-vincenty.js';//vincenty算法
let p1 = new LatLon(28.2, 113.00);
let p2 = new LatLon(28.3,112.9);
let dist = p1.distanceTo(p2) //两点最短距离
let brng1 = p1.initialBearingTo(p2) //曲线起始处在的方位
let brng2 = p1.finalBearingTo(p2) //曲线在终止处的方位
let mid = p1.intermediatePointTo(p2,0.5) //途径点,0.5指路径的二分之一处
console.log(dist,brng1,brng2,mid)
已知起始点和距离、方向,求终点
import LatLon from 'geodesy/latlon-ellipsoidal-vincenty.js';//vincenty算法
const dist = 100000;//已知两点间距离
const brng1 = 45; //已知曲线起始处在的方位
let p1 = new LatLon(28.2, 113.00);
let p2 = p1.destinationPoint(dist, brng1); //求终点
let brng2 = p1.finalBearingOn(dist,brng1); //曲线在终止处的方位
console.log(p2,brng2)
格式化坐标点
let s1= p1.toString('dms')
console.log(s1)
参考文档
完整文档:Movable Type — Information Design & Management (movable-type.co.uk)