Mapbox: программно обновить набор данных mapbox из файла .geo json - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть файл .geo json (назовите его data.geo json), который я использую для ручного обновления набора данных на карте.

Предположим, что мой файл data.geo json Структура выглядит следующим образом:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "suburb": "A",
        "unemployed": 10
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          0,
          0
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {
        "suburb": "B",
        "unemployed": 20
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          1,
          1
        ]
      }

data.geo json хранится локально, и каждые 12 часов свойство «безработные» каждой функции обновляется с использованием другого сценария python, который удаляет данные из Интернета.

В настоящее время для обновления этих свойств в онлайн-наборе данных (хранящемся на mapbox.com) я вручную перехожу на веб-сайт Mapbox и повторно загружаю файл data.geo json. Я ищу способ выполнить sh эту задачу с питонической точки зрения.

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Вы можете установить какой-либо таймер для автоматического обновления данных с помощью функций javascript. Здесь я использую источник и слой с именем «STI», который является просто гео JSON данными строки.

Функция сначала добавит источник данных, а также слой:

var STI_SOURCE = 'json/sti/STI.json'; // declare URL for data


        map.addSource('sti', { type: 'geojson', data: STI1 }); // Add source using URL

        // Add the actual layer using the source
        map.addLayer({
            "id": "sti",
            "type": "line",
            "source": "sti",
            "layout": {
                "line-join": "miter",
                "line-cap": "round"
            },
            "paint": {
                "line-color": "#fff",
                "line-width": 1,
                "line-dasharray": [6, 2]
            }
        });

Затем, когда вы хотите обновить sh данные - удалите их:

                    map.removeLayer('sti');       
                    map.removeSource('sti');

Затем вы можете повторно добавить их, начав с начала. Есть другие способы (и лучше) сделать это, но это только один способ, который работает. Я думаю, что есть функция setData (), которая делает это лучше. Но, надеюсь, это поможет вам начать.

0 голосов
/ 07 апреля 2020

В итоге я решил просто указать источник слоя Mapbox на локально сохраненный файл dataset.geo json, а не на соответствующий набор данных, хранящийся онлайн на mapbox.com.

I смог отредактировать локально сохраненный dataset.geo json, используя пакет 'json' python. Поскольку источник слоя Mapbox указывал непосредственно на локальный набор данных, все обновления этого локального файла будут отражаться в слое Mapbox. Таким образом, нет необходимости загружать какие-либо данные в Mapbox.

@ Дэвид также опубликовал полезное решение, если вы будете sh до go по этому маршруту.

...