Geodesy

坐标点之间的距离角度计算不能简单的用平面几何来算,得按照球面计算,PostgreSQL 提供了 gis 数据的计算支持,各种图形关系判断,距离计算等等。但是我们有时候也需要在 js 里面计算,开始的时候尝试自己按照公式写来着,写了一些发现太蛋疼了,因为只是单纯的看公式,缺少空间概念,算的对不对啥的都不知道。后来发现了这个 js 库,简直太贴心了。

提供了我用过的几个功能

  1. 度数表示转换,小数点形式到度分秒形式的互转。在 utm.js 里面。
  2. 计算线的真北角。point1.bearingTo(point2),真北角计算是和线的方向有关系的。
  3. 和当前点夹角是 x,距离是 y 的点,point1.destinationPoint(y, x)。
  4. 两点之间的距离,point1.distanceTo(point2)

然后顺便记录一些东西。

// 两条线的夹角的一半,普通角度
let angle = (360 + 180 + bearing1 - bearing2) % 360 // 360 保证只有正的
let halfAngle = angle > 180 ? (360 - angle)/2 : angle/2 // 只要锐角

// 计算两条线夹角中线的真北角
// left,right bearing 需要是真北角
let rightBearing = 90 + (bearing1 + bearing2)/2
let leftBearing = 180 + rightBearing

// Math.sin 之类的方法使用的应该是小数形式的度数表示
let angleToDecimal = halfAngle*Math.PI/180