Mapbox:以编程方式从 .geojson 文件更新 mapbox 数据集

Mapbox: Programatically update mapbox dataset from .geojson file

我有一个 .geojson 文件(称之为 data.geojson),我用它来手动更新 mapbox 上的数据集。

假设我的 data.geojson 文件结构如下:

{
  "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.geojson 存储在本地,每个特征的 'unemployed' 属性 每 12 小时更新一次,使用另一个从网络抓取数据的 python 脚本。

目前,为了更新在线数据集中的这些属性(存储在 mapbox.com),我手动导航到 Mapbox 网站并重新上传 data.geojson 文件。我正在寻找一种方法来完成这项任务python。

如有任何帮助,我们将不胜感激!

您可以设置某种计时器以使用 javascript 函数自动更新数据。这里我使用了一个名为 "STI" 的源和层,它只是 geoJSON 行数据。

该函数将首先添加数据源和图层:

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]
            }
        });

然后,当您想要刷新数据时 - 删除它们:

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

然后,您可以从头开始重新添加它们。有其他方法(和更好的方法)可以做到这一点,但这只是一种可行的方法。我认为有一个 setData() 函数可以做得更好。但希望这可以帮助您入门。

最后,我的解决方案是简单地将 Mapbox 图层的源指向本地存储的 dataset.geojson 文件,而不是在线存储在 mapbox.com 的相应数据集。

我能够使用 'json' python 包编辑本地存储的 dataset.geojson。由于 Mapbox 图层源直接指向本地数据集,因此对该本地文件的所有更新都会反映在 Mapbox 图层中。这样就不需要上传任何数据到Mapbox了。

@David 也发布了一个有用的解决方案,如果你想走那条路的话。