问题描述
我正在使用mapBox和turf.js允许用户在地图上绘制多边形,然后得到周长距离。我能够使其执行所需的功能,并且正在接收/显示正确的测量值,但是现在出现“未捕获的错误:需要坐标”。我认为这是我试图创建一个变量以遍历坐标(var to和var from)的地方,但是我还没有找到解决该问题的解决方案。
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)
解决方法
这两行的组合看起来是错误的:
turf.point(undefined)
您将打给for (i = 0; i<coordinates.length - 1; i++){
。
第一行可能应该是:
dropdown-divider