Turf.js的segmentReduce
函数可通过对线段进行聚合来缩减线段的数量。该函数将线段分成多个特定长度的片段,并在每个片段上应用一个函数,将结果作为新的特性值返回。
turf.segmentReduce(line, options, function(previousValue, currentValue), [startValue])
line
:Feature
类型的对象,表示待处理的线段。options
:一个参数对象,其中包含以下属性:
interval
:要应用函数的线段长度(单位为米)。reverse
:一个布尔值,表示是否对线段进行反向处理。function(previousValue, currentValue)
:一个接收两个参数的回调函数,其中previousValue
为前一个片段的值,currentValue
为当前片段的值。函数应返回一个新的值,该值将作为下一个片段的previousValue
传递下去。startValue
:一个可选参数,表示第一个片段的值。如果未提供,则将第一个片段的值设置为该线段的第一个属性值。Feature
类型的对象,表示改变后的线段。
var line = turf.lineString([
[-79, 43],
[-78, 42],
[-77, 43],
[-76, 42]
]);
var options = {
interval: 120000, // 120km
reverse: true
};
var newLine = turf.segmentReduce(line, options, function(previousValue, currentValue) {
previousValue.properties.distance += turf.distance(currentValue, previousValue, {units: 'kilometers'});
return previousValue;
}, {
type: 'Feature',
geometry: {
type: 'LineString',
coordinates: [line.geometry.coordinates[line.geometry.coordinates.length - 1]]
},
properties: {
distance: 0
}
});
上述代码将输入线段进行反向处理,并将其分为长度为120km的片段。接着,代码会计算每个片段的距离,并将其存储到每个片段的properties.distance
属性中。最终,函数返回改变后的线段,其中每个片段的properties.distance
属性都包含该片段与前一片段之间的距离。
options.interval
应为正数。options.interval
,则输出结果将与输入结果相同。previousValue
类型相同的值。startValue
参数,则必须确保输入线段具有至少一个属性,否则将引发错误。