如何为 mapbox 地图查询 json 对象 属性?

How to query json object property for a mapbox map?

我正在使用 Mapbox 制作一个等值线图,该地图会根据用户定义的日期发生变化。颜色基于给定 dayprob。现在,我将 prob1 ... prob10 作为 geojson 中的属性传递,但我更希望有一个 prob 属性 包含一个我可以子集化的对象。

//initialize map on day 1
var day = 1;

//prepare color scale
function makeColorScale(d) {
  return ([
    'interpolate', ['linear'],
    ['get', 'prob' + d],        // how to get object property here?
    0, '#440154',
    0.04, '#3B528B',
    0.08, '#21908C',
    0.25, '#5DC863',
    0.4, '#FDE725',
    1, '#696969'
  ])
};


map.addSource('county-data', {
  type: 'geojson',
  data: data
});

map.addLayer({
    'id': 'counties-join',
    'type': 'fill',
    'source': 'county-data',
    'paint': {
      'fill-opacity': 0.3,
      'fill-color': makeColorScale(day)
    }
  }, 'waterway-label' // ensures polygons are rendered above waterway-labels
);

我试过,例如在将对象 prob: {'1': 0.05, '2':0.01}; 添加到我的 geojson 时修改为 ['get', 'prob.1'],但这不起作用。

我没有试过这个,但我相信你可以通过使用这种形式的 ['get'] 运算符来访问对象 属性 的属性:

["get", string, object]: value

因此,如果您的特征有一个看起来像 {'1': 0.05, '2': 0.01}prob 属性,那么您可以像这样编写 makeColorScale() 函数:

function makeColorScale(d) {
  return ([
    'interpolate', ['linear'],
    ['get', String(d), ['get', 'prob']],
    0, '#440154',
    0.04, '#3B528B',
    0.08, '#21908C',
    0.25, '#5DC863',
    0.4, '#FDE725',
    1, '#696969'
  ])
};

我想。 ['get', 'prob'] 获取对象,然后 ['get', String(d)] 在该对象中查找您想要的 属性。