Javascript “迭代问题”;未捕获错误:需要坐标“;
我使用mapbox和thrup.js允许用户在地图上绘制一个多边形,然后反过来获得周长距离。我能够让它执行我想要的功能,并且我正在接收/显示正确的测量值,但现在我得到了“未捕获错误:需要坐标”。我想这就是我试图创建一个变量来遍历坐标(var-to和var-from)的地方,但我还没有找到解决方案来修复它Javascript “迭代问题”;未捕获错误:需要坐标“;,javascript,mapbox,mapbox-gl-js,turfjs,Javascript,Mapbox,Mapbox Gl Js,Turfjs,我使用mapbox和thrup.js允许用户在地图上绘制一个多边形,然后反过来获得周长距离。我能够让它执行我想要的功能,并且我正在接收/显示正确的测量值,但现在我得到了“未捕获错误:需要坐标”。我想这就是我试图创建一个变量来遍历坐标(var-to和var-from)的地方,但我还没有找到解决方案来修复它 function measurements(e) { var data = draw.getAll(); var answer = document.getElementById('ca
function measurements(e) {
var data = draw.getAll();
var answer = document.getElementById('calculated-perimeter');
if (data.features.length > 0) {
var coordinates = data.features[0].geometry.coordinates[0];
var calc_distances = []
var i;
for (i = 0; i<coordinates.length; i++){
var from = turf.point(coordinates[i]);
var to = turf.point(coordinates[i+1]);
var options = {units: 'kilometers'};
var distance = turf.distance(from, to ,options);
calc_distances.push(distance);
console.log(calc_distances);
var perimeter = calc_distances.reduce((a, b) => a + b, 0);
var strg_per = perimeter.toString();
var strg_per = Math.round(strg_per * 1000)
answer.innerHTML ='<p><strong>' + strg_per + '</strong></p><p>meters</p>';}
} else {
answer.innerHTML = '';
if (e.type !== 'draw.delete')
alert('Use the draw tools to draw a polygon!');
}
}
-------------------------------
EDIT : here is the full stack trace:
turf.min.js:1 Uncaught Error: coordinates is required
at Object.r [as point] (turf.min.js:1)
at r.measurements ((index):173)
at r.zt.fire (evented.js:119)
at r.i.fire (setup.js:52)
at q.Jt.onStop (draw_polygon.js:81)
at Object.stop (object_to_mode.js:57)
at Object.stop (mode_handler.js:57)
at Object.c [as changeMode] (events.js:169)
at q.changeMode (mode_interface_accessors.js:151)
at q.Jt.onKeyUp (draw_polygon.js:66)
功能测量(e){
var data=draw.getAll();
var-answer=document.getElementById('computed-permiture');
如果(data.features.length>0){
变量坐标=数据。特征[0]。几何体。坐标[0];
变量计算距离=[]
var i;
对于(i=0;i a+b,0);
var strg_per=周长.toString();
var strg_per=数学四舍五入(strg_per*1000)
answer.innerHTML=''+strg_per+'米';}
}否则{
answer.innerHTML='';
如果(e.type!=='draw.delete')
警报('使用绘制工具绘制多边形!');
}
}
-------------------------------
编辑:以下是完整的堆栈跟踪:
turp.min.js:1未捕获错误:需要坐标
在Object.r[作为点](turp.min.js:1)
r.测量值((指数):173)
在r.zt.fire(事件js:119)
在r.i.fire(setup.js:52)
在q.Jt.onStop(绘制多边形js:81)
在Object.stop(Object_到_mode.js:57)
at Object.stop(mode_handler.js:57)
在Object.c[as changeMode](events.js:169)
在q.changeMode(mode\u interface\u accessors.js:151)
在q.Jt.onKeyUp(绘制多边形js:66)
这两行的组合看起来是错误的:
for (i = 0; i<coordinates.length; i++){
...
var to = turf.point(coordinates[i+1]);`
请粘贴完整的堆栈跟踪。@Konowy我在上面编辑并添加了它
for (i = 0; i<coordinates.length - 1; i++){