我有一个像这样的数组(它是动态创建的,所以长度是可变的):
var coord_list = [[-7.84 , 12.32],[-8.30 , 10.42],[-11.84 , 12.32]....]
问题是我需要将每个元素(坐标)"[-7.84 , 12.32]"
放入一个草皮模块中,即:
turf.lineString([[-7.42,9.125],[-8.43,9.800]]...(all of them), {name: 'line 2'});
。
我尝试直接放置var coord_list
数组,但是即使内部结构相同也无法正常工作。
turf.lineString([coord_list], {name: 'line 2'}); --> Gives the Error: coordinates must be an array of two or more positions
turf.lineString(coord_list, {name: 'line 2'}); --> Gives the Error: coordinates must contain numbers
如何将每一个放入草皮公式中?
答案 0 :(得分:0)
从显示错误的编辑中,我认为创建coord_list
时,实际上是将您的坐标添加为字符串而不是数字。
答案 1 :(得分:0)
根据turf documentation,语法示例为:
var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
也就是说,第一个参数是位置数组。
所以您的第二行似乎正确:
var coord_list = [[-7.84 , 12.32],[-8.30 , 10.42],[-11.84 , 12.32]....] // is an array of positions
turf.lineString(coord_list, {name: 'line 2'}); --> Gives the Error: coordinates must contain numbers
从错误消息中,您似乎动态生成的coord_list具有字符串而不是数字
要对此进行测试,可以控制台记录每个位置值的类型。
要将每个值转换为数字,请将每个位置的x,y值传递给:
let xNum = parseFloat(x);
let yNum = parseFloat(y);
在将它们送入turf.lineString([[xNum, yNum],[xNum2, yNum2],...],{name: 'line 2'})
如果您无法控制coord_list的生成方式,则可以像这样进行修复:
let arr = [['-7.84' , '12.32'],['-8.30' , '10.42'],['-11.84' , '12.32']];
let coord_list = arr.map(position => {
return [parseFloat(position[0]), parseFloat(position[1])];
})