Turf.js lineArc函数角度参数异常引发坐标数组报错问题
Turf.js lineArc函数部分案例异常排查
以下代码中,R167B、D630C、R192B三个案例调用turf.lineArc正常,但R192A和R168A出现异常:
//R167B ok var centerw = turf.point([115.959444, -31.945]); var startAnglew = 233; var endAnglew = 253; var radiusw =35.965; var arc = turf.lineArc(centerw, radiusw * 1.852, startAnglew, endAnglew, options); //D630C ok var centerx = turf.point([152.711944, -27640556]); var startAnglex = 287; var endAnglex = 331; var radiusx = 35.057; var arc = turf.lineArc(centerx, radiusx * 1.852, startAnglex, endAnglex, options); //R192B ok var centery = turf.point([115.959444, -31.945]); var startAngley = 253; var endAngley = 278; var radiusy =69.83195; var arc = turf.lineArc(centery, radiusy * 1.852, startAngley, endAngley, options); //R192A not ok var centery = turf.point([115.959444, -31.945]); var startAngley = 253; var endAngley = 277; //change this to 276 or 278 and works fine?!? var radiusy =119.7195; var arc = turf.lineArc(centery, radiusy * 1.852, startAngley, endAngley, options); //R168A not ok var centerx = turf.point([115.959444, -31.945]); var startAnglex = 303; var endAnglex = 327; var radiusx = 60.0439; var arc = turf.lineArc(centerx, radiusx * 1.852, startAnglex, endAnglex, options);
报错信息如下:
turf.min.js:1 Uncaught Error: coordinates must be an array of two or more positions at h (turf.min.js:1:2371) at Object.bi [as lineArc] (turf.min.js:43:85958) at getOrderedPolyLines (?dataset=7a95f134-be37-49e6-9aca-0b0780f30258:223009:18) at drawVolume (?dataset=7a95f134-be37-49e6-9aca-0b0780f30258:222669:22) at HTMLDivElement.<anonymous> (?dataset=7a95f134-be37-49e6-9aca-0b0780f30258:222549:8) at HTMLDivElement.dispatch (jquery.min.js:2:43331) at y.handle (jquery.min.js:2:41315) at Object.trigger (jquery.min.js:2:71937) at E.fn.init.triggerHandler (jquery.min.js:2:72616) at Object.checkboxChange (gijgo.min.js:1:121495)
解决思路
- 拆分角度区间:针对R192A这类仅特定角度触发的异常,可将角度区间拆分为两段(比如253-276和276-277),分别调用
lineArc生成弧线后,用turf.lineMerge合并为一条线 - 微调临界角度:给异常的起止角度添加极小偏移(如±0.001),避开触发bug的临界值
- 升级Turf.js版本:当前使用的压缩版可能存在已知bug,尝试切换到最新稳定版,或使用未压缩版本定位具体计算错误
- 校验参数合法性:确认所有坐标、半径单位的一致性,D630C的纬度值
-27640556明显超出合法范围(纬度应为-90到90),虽案例正常,但可能干扰内部计算逻辑 - 手动构建弧线:若上述方法无效,可通过几何公式手动计算弧线的坐标点数组,再用
turf.lineString构建线要素,绕过lineArc的内部问题
内容的提问来源于stack exchange,提问作者tj26
相关产品推荐
相关产品推荐

