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

我有一个 .geojson 文件(称为 data.geojson),我用它来手动更新地图框中的数据集。


假设我的 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 小时使用另一个从 Web 抓取数据的 python 脚本更新每个要素的“待业”属性。


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


任何帮助将不胜感激!


交互式爱情
浏览 116回答 2
2回答

大话西游666

您可以设置某种类型的计时器,以使用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]            }        });然后,当您要刷新数据时 - 删除它们:                    map.removeLayer('sti');                           map.removeSource('sti');然后,您可以通过从头开始重新添加它们。还有其他方法(而且更好)可以做到这一点,但这只是一种有效的方法。我认为有一个 setData() 函数可以更好地做到这一点。但希望这可以让你开始。

潇潇雨雨

最后,我的解决方案只是将 Mapbox 图层的源指向本地存储的 dataset.geojson 文件,而不是在线存储在 mapbox.com 的相应数据集。我能够使用“json”python包编辑本地存储的数据集.geojson。由于 Mapbox 图层源直接指向本地数据集,因此对此本地文件的所有更新都将反映在 Mapbox 图层中。这样,就无需将任何数据上传到 Mapbox。@David还发布了一个有用的解决方案,如果你想走这条路。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python