MEASUREMENT
COORDINATE MUTATION
TRANSFORMATION
FEATURE_CONVERSION
MISC
HELPER
RANDOM
GRIDS
AGGREGATION
META
ASSERTIONS
BOOLEANS
UNIT CONVERSION
DATA
JOINS
CLASSIFICATION

segmentReduce

简介

Turf.js的segmentReduce函数可通过对线段进行聚合来缩减线段的数量。该函数将线段分成多个特定长度的片段,并在每个片段上应用一个函数,将结果作为新的特性值返回。

语法

turf.segmentReduce(line, options, function(previousValue, currentValue), [startValue])

参数

  • lineFeature类型的对象,表示待处理的线段。
  • 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参数,则必须确保输入线段具有至少一个属性,否则将引发错误。