按给定属性对TopoJSON几何进行分组

时间:2016-03-29 14:05:22

标签: geojson topojson

是否有人知道是否可以在多个几何体中对具有给定相同属性的TopoJSON几何进行分组?

例如,给定具有区域高程等值线的TopoJSON,这样就可以对具有相同高程的几何进行分组,从而保持属性。

我在TopoJSON文档中找到了这个: https://github.com/mbostock/topojson/blob/master/bin/topojson-group

我使用不同高程的ID对其进行了测试,但输出并未保留属性(即使使用-p参数)。

1 个答案:

答案 0 :(得分:0)

使用topjson.js将topojson转换为geojson功能。然后,您可以根据高程对要素进行分组。您可以使用geojson-groupby根据任何属性进行分组,然后使用mutligeojson将几何图形组合到MultiGeometry。

var features = [f1, f2, ..,fn]
var grouped = GeoJSONGroupBy(features, 'properties.elevation');
// grouped is
// {
//   '100': [f1, f3, ..],
//   '200': [f5, f8, f6, ..],
//     ....
// }
var merged = {};   // final output merged with geometry and other attributes
Object.keys(grouped).reduce(function(merged,groupKey) {
  var group = grouped[groupKey];
  var reduced = {
    geomCollection: []
    attributes: {
      elevation: group[0].attributes.elevation,
      length: 0   // any other that you want to include
    }
  };
  group.reduce(function(reduced, cur) {
    reduced.geomCollection.push(cur.geometry);
    reduced.attributes.length += length(cur.geometry); //length functon
  },reduced);
  return {
    type: 'Feature',
    geometry: multigeojson.implode(reduced.geomCollection),
    attributes: reduced.attributes
  }
},merged);