Слой GeoJSON не будет загружаться в MapBox GL JS

#mapbox #geojson #mapbox-gl #mapbox-gl-js

#mapbox #geojson #mapbox-gl #mapbox-gl-js

Вопрос:

Я пытаюсь добавить слой данных GeoJSON на базовую карту MapBox, но это не сработает. Я пробовал несколько их руководств, таких как это и этот, но они не будут работать.

Это мой код:

 var map = new mapboxgl.Map({
      container: 'themap',
      center: [-73.9939914, 40.7274072],
      zoom: 17,
      style: 'mapbox://styles/mapbox/streets-v9'
  });

  map.on('load', function () {

    map.addSource('plutodata', {
    type: 'geojson',
    url: 'http://url.geojson'
    });
   map.addLayer({
   id: 'pluto',
   type: 'fill',
   source: 'plutodata',
   'source-layer': 'plutodata',
       layout: {
         visibility: 'visible'
       },
       paint: {
         'fill-color': 'rgba(61,153,80,0.55)'
       }
    });
  });
  

Карта загружается, но слой GeoJSON не отображается. Есть идеи, где я ошибаюсь?

Полное решение:

сообщение tmcw ниже было первым шагом в устранении этой проблемы. Я добавил заголовки, разрешающие КОР, в мой файл .htaccess. Вторым шагом было то, что свойство «url» в map.addSource должно было быть «data». Теперь все работает.

Ответ №1:

Чтобы Mapbox GL JS загружал данные с этого сервера, ему необходимо использовать совместное использование ресурсов из разных источников, а этот URL-адрес этого не поддерживает. Вам нужно будет включить CORS на сервере или в файле, чтобы разрешить другим серверам запрашивать данные.

Ответ №2:

Вы можете загрузить свой geojson в виде набора листов в Mapbox, затем создать новый слой в одном из ваших стилей и ввести свой набор листов geojson на вкладке «Слой из данных». Если, например, вы назвали свой новый слой ‘mygeojson’, то вы можете вызвать его в своем .js, например:

 map.on('load', function() {
    map.addLayer({
        'id': 'mygeojson',
        'source': 'composite',
        'source-layer': 'mygeojson',
        'type': 'fill',
        'paint': {
            'fill-color': '#f00'
        }
    });
});