javascript - mapbox-gl-js:矢量切片 - 在客户端更改/添加特征属性的最有效方式?

标签 javascript mapbox-gl-js geoserver

一个 mapbox-vector-tile 图层由 GeoServer 提供(大约 500K 个特征点和多行字符串)。

我正在使用 mapbox-gl-js 在客户端绘制图层,我使用表达式来更改某些样式(例如线条颜色)

我有一个外部 API,它将为我提供每个 Assets 的属性列表

[{ 编号:123, 支柱 1:45, 支柱 2:78 }, ...]

现在,我想将这些属性分配给相应的特征,这样我就可以编写基于'prop1'的表达式来操纵样式。

表达:

 [ 'let', 'load_value', ['to-number', ['get', 'prop1']],
      [
        'case',
        [ 'all', ['>=', ['var', 'load_value'], 0], ['<', ['var', 'load_value'], 50] ], 'gray',
        [ 'all', ['>=', ['var', 'load_value'], 50], ['<', ['var', 'load_value'], 70] ], 'yellow',
        ['>=', ['var', 'load_value'], 70], 'red',
        'gray'
      ]
 ];

我已经尝试使用 setFeatureState 方法并且它有效。问题,这样做之后 map 非常慢。我相信这是因为我需要为 50 万个功能设置功能状态。

设置功能状态:

   data.forEach((datum) => {
      this.map.setFeatureState({
        source: 'geoserver-source',
        sourceLayer: 'mvt-layer',
        id: datum.id
      }, {
        prop1: datum.prop1
      });
    });

颜色根据给定条件变化。但是在此之后 map 本身变得非常慢。有没有更好的方法从客户端映射这些属性?

最佳答案

显然没有其他方法(截至目前)使用 mapbox-gl-js

https://github.com/mapbox/mapbox-gl-js/issues/8753#issuecomment-531284256

关于javascript - mapbox-gl-js:矢量切片 - 在客户端更改/添加特征属性的最有效方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57920974/

相关文章:

javascript - 那么 `OnIntent: function` 在 Alexa 中做了什么?

javascript - Shadowbox 覆盖在 IE 6 中不透明

javascript - 如何因 Qualtrics 不活动而自动前进

android - 在 Android 应用程序中使用来自 GeoServer 的自定义 Tiles 的 google-maps sdk

javascript - 两个日期(日期时间)之间的差异(以分钟为单位)

javascript - MapBox:为点分配图标

mapbox-gl-js - 在类型为 'fill' : Can we control the stroke thickness? 的 mapbox gl js 层中

mapbox - HexagonLayer - 获取聚合数据或其值范围

postgresql - 地理服务器问题

redis - GeoServer 中的数据库连接