Есть ли способ добавить слой к данным, сгенерированным с помощью обратного вызова AJAX, используя Mapbox? - PullRequest
0 голосов
/ 25 апреля 2019

Используя приведенный ниже код (который генерирует данные о событиях из API), я хочу создать слой mapbox, который затем можно использовать для создания маркеров и символов на карте.Однако я не хочу использовать маркеры Mapbox, так как это вызывает проблемы с моим кодом и не является тем, что я хочу использовать.

Мне уже удалось добиться этого для жестко закодированных данных, и я хочу сделать то же самоедля данных, полученных от API.Iv'e пытался преобразовать данные, сгенерированные в GeoJSON, а также пытался зацикливать данные (это приводит к созданию нескольких идентификаторов и нарушению кода)

callbackEventbrite(function(result){
console.log("env", result)
//var geo = GeoJSON.parse(result.events,{Point: [result.location.latitude, result.location.longitude]});
//console.log(geo);
const keys = Object.values(result);
for(const key of keys){
    geojson = {
        type: 'featureCollection',
        features: [{
            type: 'feature',
            geometry: {
                type: 'Point',
                coordinates: [key.venue.longitude, key.venue.latitude]
            }
        }]
    }
    eventInfo.push(
        {"longitude": key.venue.longitude , "latitude": key.venue.latitude , "name": key.name.text, "venue": key.venue.name, "date": key.start.local, "category": key.category_id}
    );

}
});

function callbackEventbrite(callback){
$.ajax(briteSettings).done(function(data){
    callback(data.events);
});
}
// What Iv'e got to work (hard coded data)
map.on("load", function(){
map.addLayer({
    "id": "locations",
    "type": "symbol",
    "source": {
        "type": "geojson",
        "data": {
            "type": "FeatureCollection",
            "features": [
                {
                  "type": "Feature",
                  "properties": {
                    "Title": "The Congress Inn",
                    "Description": "Pub located in Longton",
                    "Type": "Pub",
                    "Address": "14 Sutherland Rd, Stoke-on-Trent ST3 1HJ",
                    "Longitude": 2.1316,
                    "Latitude": 52.9878,
                    "icon": "bar"
                  },
                  "geometry": {
                    "coordinates": [
                      -2.131836,
                      52.987238
                    ],
                    "type": "Point"
                  }
                }

В рабочем состоянии каждый результат генерируется изAPI должен иметь свой собственный символ на карте, сгенерированный методом addLayer.Любая помощь очень ценится!

1 Ответ

1 голос
/ 04 мая 2019

Вот пример вызова AJAX через d3, который используется для добавления источника и слоя на карту: https://docs.mapbox.com/mapbox-gl-js/example/timeline-animation/

Отказ от ответственности: я работаю в Mapbox.

...