Есть ли способ конвертировать данные API в слой Mapbox? - PullRequest
1 голос
/ 25 апреля 2019

У меня есть функция обратного вызова, которая может генерировать данные из API Eventbrite.В настоящее время эта функция может генерировать маркеры на моей карте Mapbox с помощью метода 'new Marker'.Однако вместо маркера я хочу сгенерировать эти данные в слои на карте с помощью метода «Mapbox addLayer».

    callbackEventbrite(function(result){
    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}
        );
    }
});

Я в основном хочу это, чтобы генерировать символы на карте на основекоординаты геометрии, но с данными API.

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"
                      }
                    },

Любая помощь очень ценится!* 1007 большое спасибо *

1 Ответ

2 голосов
/ 25 апреля 2019

Это должно быть довольно просто, вам просто нужно построить массив объектов из ответа Eventbrite.

  1. Сначала создайте массив функций геоджона для использования в вашем источнике.

  2. Затем добавьте источник на карту, отдельно и перед добавлением слоя. Вы будете использовать массив объектов, который вы только что создали в источнике.

  3. После добавления источника на карту вы можете создать слой и ссылаться на источник в вашем слое.

Попробуйте приведенный ниже код, чтобы начать работу. Дайте мне знать, если это работает для вашего случая.

var featureArr;
callbackEventbrite(function(result) {
  const keys = Object.values(result);
  for (const key of keys) {
    var feature = {
      "type": "Feature",
      "id": key.venue.id,
      "geometry": {
        "type": "Point",
        "coordinates": [key.venue.longitude, key.venue.latitude]
      },
      "properties": {
        "title": key.venue.name,
        "description": key.venue.description,
        "icon": "bar"
      }
    };
    featureArr.push(feature);
  }
}


map.addSource("mySource", {
  "type": "geojson",
  "data": {
    "type": "FeatureCollection",
    "features": featureArr
  }
});

map.addLayer({
  "id": "locations",
  "type": "symbol",
  "source": "mySource",
  "layout": {
    "text-font": ["Open Sans Semibold", "Arial Unicode MS Bold"],
    "text-offset": [0, 0.6],
    "text-anchor": "top",
  }
});

Примечание: я не знаю, что находится в объекте ответа от Eventbrite, поэтому некоторые из key.value.xyz являются переменными

...