geojson作为url源+ turf.js +操作特征属性的子集

时间:2017-11-06 16:31:13

标签: mapbox mapbox-gl-js mapbox-gl

mapbox-gl-js版本:> = 0.27.0< = 0.38.0

(1)我有一个Feature geojson类型的单个多边形从网址源添加到我的地图。

(2)我还有一个FeatureCollection geojson类型的~4k多边形也从网址源添加到地图中。

我使用(1)和(2)之间的turf.intersect来选择(2)的交叉多边形。

然后我将相交的多边形[(2)的子集]存储到数组中。

然后我操纵那些交叉多边形的某些属性的值 简单的数学。

我现在想用数组的结果值更新(2)。

我希望使用类似setData的内容来更新(2),但对于也不是(a)geojson数据对象或(b)指定的url的子集而言,这是不可能的在docs

希望我已经充分解释了这一点。如果是这样,在这种情况下建议的工作流程是什么?

1 个答案:

答案 0 :(得分:1)

如果你让它加载GeoJSON,Mapbox不擅长分享;请参阅https://github.com/mapbox/mapbox-gl-js/issues/1762如果您想自己操作数据,则应自行加载,然后将其传递给Mapbox。例如:

// load your data via ajax however you want
const promises = {
  polygon: $.get('.../geojson.json'),
  collection: $.get('.../feature-collection.json'),
};

// setup your map
const map = new mapboxgl.Map({...});
map.on('load', () => {
  RSVP.hash(promises).then((data) => {
    map.addSource('my-data', {
      type: 'geojson',
      // transform does intersection and updates,
      // then outputs a GeoJSON formatted object
      data: transform(data.polygon, data.collection),
    });
  });
});