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 也发布了一个有用的解决方案,如果你想走那条路的话。
我有一个 .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 也发布了一个有用的解决方案,如果你想走那条路的话。