如何在MapboxGL中有效地更新GeoJson多边形的填充



我正在构建一个应用程序,该应用程序将使用大型GeoJSON集(约3MB(渲染地图。该地图是一个choropleth,不同的GeoJSON多边形意味着根据它们"的数据而不同地着色;包含">

我遇到的问题是,我不确定如何将GeoJSON(例如多边形数据(与实际数据分离。假设我们这样设置数据(或者按照Mapbox的建议,只需通过数据源的URL(:

const { data } = await axios.post(sourceUrl, settings);
map.current.addSource("states", {
type: "geojson",
data,
}

此地图中的基础数据将需要随着用户交互而频繁更新。然而,现在GeoJSON包含多边形(坐标(的数据和属性(数据本身(。

例如,用户可以单击复选框,或者键入搜索参数。这目前对我们的数据库进行了GET,数据库运行查询并返回新数据。我们可以返回一个新的GeoJSON对象,其中添加了这些数据,并调用一个.getSource("source").setData(newData)来处理所有的新GeoJSON,但这将是非常低效的。多边形没有变化,只有它们包含的数据在变化。

我研究过数据驱动的造型,但这似乎也不是我所需要的。我们的地图底层数据集太大,无法塞进一个GeoJSON层,我们无法通过网络传输数百MB以便在客户端上应用数据驱动的样式。

我们如何将GeoJSON多边形渲染到地图上一次,然后根据不同数据集的更改情况更新其填充颜色?

简单的答案是,使用Feature State。本教程解释了所有细节。可以使用相同的方法使用数据更新数千个要素,而无需更新任何几何图形。

最新更新