fill-extrusion неправильно отображается с помощью mapbox-gl-js

Вот как выглядит мой набор данных:

Набор данных о преступности в Сиэтле

Что я хочу сделать, так это изменить высоту экструзии на основе столбца частоты. Я могу успешно отображать их в виде точек, но у меня возникают проблемы с этим всякий раз, когда я использую заливку-экструзию. Можете ли вы помочь указать мне в правильном направлении?

    map.addLayer({
    'id': 'total',
    'type': 'circle',
    'source': {
        type: 'vector',
        url: 'mapbox://askakdagr8.9tklrr8g'
    },
    'source-layer': 'GroupedOutput-9i6ink',
    'paint': {
        // make circles larger as the user zooms from z12 to z22
        'circle-radius': {
            'base': 1.75,
            'stops': [
                [12, 2],
                [22, 180]
            ]
        },
        'circle-color': '#ff7770'
    }
});

person askakdagr8    schedule 28.05.2018    source источник


Ответы (1)


Так как в mapbox-gl-js на данный момент нет функционала для вытягивания круга, то нужно заменить точки многоугольником, а интерполировать круг, например, функцией turf.circle:

  map.on('sourcedata', function(e) {
    if (e.sourceId !== 'total') return
    if (e.isSourceLoaded !== true) return

    var data = {
      "type": "FeatureCollection",
      "features": []
    }
    e.source.data.features.forEach(function(f) {
      var object = turf.centerOfMass(f)
      var center = object.geometry.coordinates
      var radius = 10;
      var options = {
        steps: 16,
        units: 'meters',
        properties: object.properties
      };
      data.features.push(turf.circle(center, radius, options))
    })
    map.getSource('extrusion').setData(data);
  })

[ http://jsfiddle.net/zjLek40n/]

person stdob--    schedule 29.05.2018
comment
Есть новости по этому поводу? Я задал здесь довольно похожий вопрос: stackoverflow. com/questions/52359776/ не уверен, как это применимо в моем случае. Я проверил ваш JSFiddle, и он больше ничего здесь не отображает. Как это влияет на производительность при использовании этого обходного пути? Можете ли вы объединить это с другими слоями 3D-экструзии? - person LBes; 17.09.2018
comment
@LBes С тех пор я не узнал ничего нового по этой теме. Пример ссылки теперь работает. - person stdob--; 17.09.2018
comment
спасибо за обновление кода. Не знаете ли вы, может ли это работать непосредственно на слое экструзии 3D-здания? Можно ли это также применить к кластерам? Потому что я хотел бы, чтобы моя сгруппированная точка тоже имела какую-то высоту. Не стесняйтесь публиковать в качестве ответа на мой пост, я был бы более чем счастлив принять в качестве ответа (часть с 3D-экструзией кругов тоже). - person LBes; 17.09.2018
comment
Хорошо, попытался заставить это работать с локальным файлом geojson, и это не сработало. Я обновил свой вопрос здесь, если у вас есть время взглянуть: stackoverflow.com/questions/52372543/ - person LBes; 17.09.2018