2016-03-27 2 views
4

У меня есть карта Mapbox GL с одним слоем и несколькими маркерами на этом слое, я пытаюсь обновить определенный маркер, поэтому я использую setData для обновления только одного маркера но setData сбрасывает маркеры всего слоя, чтобы добавить только то, что я пытаюсь обновить как единственный маркер на всем слое, тем самым удалив все старые маркеры.Mapbox GL setData для обновления слоя с несколькими маркерами

При попытке добавить несколько маркеров в формате GeoJSON как массив объектов GeoJSON, как показано ниже, я получаю сообщение об ошибке:

Uncaught Error: Input data is not a valid GeoJSON object. 

код:

  map.getSource('cafespots').setData([{ 
      "type": "Feature", 
      "geometry": { 
       "type": "Point", 
       "coordinates": [31.331849098205566, 30.095422632059062] 
      }, 
      "properties": { 
       "marker-symbol": "cafe" 
      } 
      },{ 
      "type": "Feature", 
      "geometry": { 
       "type": "Point", 
       "coordinates": [31.39, 30.10] 
      }, 
      "properties": { 
       "marker-symbol": "cafe" 
      } 
      }]); 

оценит его так много, если кто-то пожалуйста, помогите, сообщив мне, что я делаю неправильно/отсутствует здесь, спасибо

ответ

10

setData ожидает полного объекта GeoJSON (а не только его функции) или URL-адрес, указывающий на объект GeoJSON.

Вам нужно будет управлять состоянием GeoJSON в вашем коде и обновить весь объект через setData при внесении изменений.

var geojson = { 
    "type": "FeatureCollection", 
    "features": [] 
}; 

map.on('load', function() { 
    map.addSource('custom', { 
    "type": "geojson", 
    "data": geojson 
    }); 

    // Add a marker feature to your geojson object 
    var marker { 
    type: 'Feature', 
    geometry: { 
     type: 'Point', 
     coordinates: [0, 0] 
    } 
    }; 

    geojson.features.push(marker); 
    map.getSource('custom').setData(geojson); 
}); 

https://www.mapbox.com/mapbox-gl-js/example/measure/ - хороший пример, демонстрирующий это поведение.

Смежные вопросы