Turf.js计算方位角距离结果与在线计算器不一致问题咨询
问题解答
这个结果差异既不是Turf的计算逻辑问题,也不是在线方位计算器的计算错误,根源是你传入Turf的坐标顺序不符合规范。
核心规则说明
Turf全系列空间计算方法严格遵循GeoJSON标准坐标约定:
- 所有坐标点必须按照
[经度, 纬度]的顺序传入,也就是先传东西向的经度值,再传南北向的纬度值 - 你代码里传入的p1、p2点写反了经纬度顺序,用了
[纬度, 经度]的格式,相当于把点位定位到了错误的位置,自然算出的方位角结果完全不对
问题复现
你当前写的计算代码:
import * as turfBearing from '@turf/bearing' import * as turfDistance from '@turf/distance' distance( p1, p2 ) { return Math.round( turfDistance.default( p1, p2 ) * 1000 ) } bearing( p1, p2 ) { return ( Math.round( turfBearing.default( p1, p2 ) ) + 360 ) % 360 }
传入的错误格式测试数据:
// 错误:顺序为[纬度, 经度],不符合Turf入参要求 const p1 = [ 48.1039072, 11.6558318 ] const p2 = [ 48.1035817, 11.6555873 ]
得到的错误计算结果:
bearing = 233, dist = 45
这里距离数值看起来接近正确值,是因为两点的经纬度差值量级接近,经纬度互换后两点的球面距离巧合偏差不大,但方位角计算完全错位。
修正方法
把两个坐标点的经纬度顺序调换,改成Turf要求的[经度, 纬度]格式即可:
// 正确:顺序为[经度, 纬度] const p1 = [ 11.6558318, 48.1039072 ] const p2 = [ 11.6555873, 48.1035817 ]
修正后重新计算得到的结果为:方位角约213度、距离45米,和在线计算器的结果基本一致,仅存在取整、大圆航线计算近似规则带来的微小正常误差。
内容的提问来源于stack exchange,提问作者injecteer
相关产品推荐
相关产品推荐

