Mapbox queryRenderedFeatures при загрузке - PullRequest
0 голосов
/ 05 июня 2018

Я хотел бы использовать queryRenderedFeatures после загрузки страницы, чтобы заполнить список, но, похоже, он продолжает срабатывать до загрузки слоя.Я получаю сообщение об ошибке в консоли ниже:

The layer 'Points' does not exist in the map's style and cannot be queried for features.

Как я могу запросить слой после загрузки объекта?Я пытался следовать предложениям в этих ответах, но он продолжает возвращать пустой

JavaScript, который выполняется после загрузки страницы

вызов функции после полной загрузки страницы

Это то, что у меня сейчас есть

map.on('load', function() {
  map.addLayer({
      'id': 'Points',
      'type': 'circle',
      'source': 'Points-45d56v',
      'source-layer': 'Points-45d56v',
      'layout': {
          'visibility': 'visible',
      },
      'paint': {
        'circle-radius': 6,
        'circle-color': 'red'
      }
  });
});

$(document).ready(function(){
  var features = map.queryRenderedFeatures({layers:['Points']});
  console.log(features);
});

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Я получил следующий код из ссылки Github в предыдущем ответе, который работал для меня:

map.addLayer(...) // make your change
map.on('render', afterChangeComplete); // warning: this fires many times per second!

function afterChangeComplete () {
  if (!map.loaded()) { return } // still not loaded; bail out.

  // now that the map is loaded, it's safe to query the features:
  map.queryRenderedFeatures(...);

  map.off('render', afterChangeComplete); // remove this handler now that we're done.
}

Обязательно поместите его в тот же map.on('load', function() {});, что и запрашиваемый слой.

0 голосов
/ 06 июня 2018

С https://github.com/mapbox/mapbox-gl-js/issues/4222#issuecomment-279446075:

Вы можете проверить map.loaded() (https://www.mapbox.com/mapbox-gl-js/api/#map#loaded), чтобы определить, загружена ли карта и безопасно ли запрашивать объекты.

Например, кодсм. связанный комментарий к проблеме на GitHub.

...