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

2024-04-16 06:40:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个.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小时使用另一个从web上抓取数据的python脚本更新每个功能的“待业”属性

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

任何帮助都将不胜感激


Tags: 文件数据data属性geojsontypeproperties手动
2条回答

您可以设置某种计时器,使用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还发布了一个有用的解决方案,如果你想走这条路的话

相关问题 更多 >