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

问题描述 投票:0回答:3

我有一个 .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 存储在本地,每 12 小时使用另一个从网络上抓取数据的 Python 脚本更新每个要素的“失业”属性。

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

任何帮助将不胜感激!

python python-3.x mapbox put mapbox-gl-js
3个回答
1
投票

您可以设置某种计时器来使用 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() 函数可以做得更好。但希望这可以帮助您开始。


0
投票

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

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

@David 还发布了一个有用的解决方案,如果您想走这条路。


0
投票

@Hassan A 你能分享一下你的代码/解决方案吗?我遇到了同样的问题..很高兴看到您如何实施您的解决方案

© www.soinside.com 2019 - 2024. All rights reserved.