【问题标题】:Mapbox render large datasetMapbox 渲染大型数据集
【发布时间】:2018-03-08 00:28:50
【问题描述】:

我正在使用 mapbox 构建一个网站来呈现大约 24mb 的 geojson 数据。我将这些数据存储在后端服务器中,API 请求大约需要 2300 毫秒,而前端地图显示这些数据需要 10 多秒。

GeoJson 是河流数据,其中包含许多 MultiLineString。数据被清理。

步骤如下:

  1. 用户打开网站
  2. 站点在服务器端点获取数据
  3. 站点接收到获取的数据(geojson - 其中 9 个)
  4. React 为每个 geojson 集创建一个层,并将这些信息作为状态传递给 Mapbox 组件
  5. Mapbox 获取这些数据并进行渲染,我相信这是花费最多时间的地方。

以下是数据格式: https://eflow.nyc3.digitaloceanspaces.com/class_geo_data/classGeo.json

我的问题:

  1. 渲染数据需要这么长时间的原因是什么?是不是因为线段太多了?我已经看到在更短的时间内呈现超过 100mb 的数据。
  2. 在 Mapbox 中渲染此数据集的最佳做法是什么?

我正在使用react-map-gl,不确定实际使用的是哪个版本的 mapbox gl。

谢谢 狮子座

依赖关系:

"babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-runtime": "^6.23.0", "babel-preset-es2015": "^6.24.1", "babel-preset-stage-0": "^6.24.1", "copy-webpack-plugin": "4.3.1", "webpack-dotenv-plugin": "^2.0.2", "animate.css": "3.6.1", “axios”:“0.18.0”, “d3”:“4.13.0”, "flexboxgrid": "6.3.1", "get-json": "1.0.0", “不可变”:“3.8.2”, “材料-ui”:“0.19.4”, “对象分配”:“4.1.0”, “反应”:“16.2.0”, “反应域”:“16.2.0”, “反应地图-gl”:“3.2.0”, "react-redux": "5.0.5", “反应路由器-dom”:“4.2.2”, "react-router-redux": "5.0.0-alpha.6", “redux”:“3.6.0”, “redux-thunk”:“2.1.0”, “超级代理”:“3.8.1”, “topojson”:“3.0.2”

【问题讨论】:

  • 您考虑过使用矢量图块吗?

标签: reactjs mapbox mapbox-gl-js mapbox-gl react-map-gl


【解决方案1】:

我不知道为什么会这么快,但正确的做法是:

  1. 将我的数据集分成更小的卡盘
  2. 将每个图层作为图层加载到 mapbox studio 中,然后加载到您创建的地图样式中
  3. 下载整个 json 文件
  4. 使用 Mapbox 渲染地图

这与我原来的方法完全不同,它是从我自己的 API 获取数据,然后让 Mapbox 渲染它。但是它将加载速度从 10+ 秒降低到 1-2 秒

【讨论】:

  • 将数据导入 Studio 时,它将被转换为矢量切片,从而显着缩短加载和渲染时间。使用原始 GeoJSON,mapbox-gl 将在客户端进行此转换。
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 2020-11-20
  • 2019-07-12
  • 2012-07-01
  • 1970-01-01
相关资源
最近更新 更多