在mapbox中,如何将地图项移至顶部(明智地使用z-index)?

时间:2018-08-29 22:28:10

标签: mapbox mapbox-gl-js

我有一层充满状态边框“功能”的图层。当用户单击某个州时,我想将该州的地图项移动到堆栈顶部(明智的使用z-index)。

export function drawStateBorders() {
  $.getJSON('https://www.mapbox.com/mapbox-gl-js/assets/us_states.geojson').then((data) => {
    this.stateGeoJSON = data;

    this.map
      .addSource('states', {
        type: 'geojson',
        data,
      })
      .addLayer({
        id: 'state-borders',
        type: 'line',
        source: 'states',
        paint: {
          'line-color': [
            'case', ['boolean', ['feature-state', 'selected'], false],
            '#8d8b76',
            '#bfe2ab',
          ],
          'line-width': [
            'case', ['boolean', ['feature-state', 'selected'], false],
            6,
            3,
          ],
        },
      });
  });
}

当我选择状态

export function stateSelected(state) {
  const stateFeatures = this.map.queryRenderedFeatures({
    layers: ['state-borders'],
    filter: [
      '==', 'STATE_NAME', state,
    ],
  });

  const features = this.stateGeoJSON.features;
  const currentFeature = stateFeatures[0];

  if (!currentFeature) {
    return;
  }

  // same state
  if (currentFeature.id === this.selectedStateId) return;

  // move to front HERE ?????

  // old selected state
  if (this.selectedStateId) {
    this.map.setFeatureState({
      source: 'states',
      id: this.selectedStateId,
    }, {
      selected: false,
    });
  }

  this.selectedStateId = currentFeature.id;

  this.map.setFeatureState({
    source: 'states',
    id: this.selectedStateId,
  }, {
    selected: true,
  });
}

到目前为止,我已经尝试过

  features.splice(features.indexOf(currentFeature), 1);
  features.push(currentFeature);
  this.map.getSource('states').setData(this.stateGeoJSON);

这似乎对阵列做了一些非常疯狂的事情(复制某些状态,删除其他状态)。不知道发生了什么

1 个答案:

答案 0 :(得分:0)

将状态添加到另一层是可行的(感谢@AndrewHarvey的建议)。

万一有兴趣的人是我的代码

OrderFactory.php

这也是我正在使用的shapefile:http://eric.clst.org/assets/wiki/uploads/Stuff/gz_2010_us_040_00_500k.json