mapbox内存优化

贴个群号

WebGIS学习交流群461555818,欢迎大家。

geojson数据源

删除无用属性 源数据上就删干净,没用的就删了
小数点保留位数,尤其是经纬度,6位就可以,这个在geoserver上可以设置
利用url获取geoserver,一个十五万网格要素两个字段的geojson占磁盘40M,占内存400M,尽量别存在内存中
不用重复调用,存到indexedDB中

加载

尽量使用同一source,同一layer
参考上文

https://blog.csdn.net/Sakura1998gis/article/details/130718766?spm=1001.2014.3001.5501

渲染

表达式尽量简洁
能少些一些表达式就少写一些
fill-outline-color这个,能省则省

    {
        id: "MaxWDepth",
        name:'最大水深',
        source: "playLayer",
        type:'fill',
        popup:true,
        messageBox:true,
        filter:['>',["to-number",["get","MaxWDepth"]],0],
        // filter:['>',["to-number","{MaxWDepth}"],0],  //错误写法  得写get
        // filter:['>',["to-number","MaxWDepth"],0],  错误写法  得写get
        // filter:['>',["get","MaxWDepth"],0],   错误写法 属性不对,得写to-number
        // filter:['any', ['==',["to-number",["get","MaxWDepth"]],0],['>',["to-number",["get","MaxWDepth"]],1]],  成功写法  any是或运算  all是与运算
        paint: {
            'fill-opacity': 0.4,
            // 'fill-outline-opacity':0.4,
            'fill-color':["step",["to-number",["get","MaxWDepth"]],'rgb(179,204,255)',0.5,'rgb(128,153,255)',1,'rgb(89,128,255)',2,'rgb(38,115,242)',3,'rgb(0,77,204)'],
            // 'fill-outline-color':["step",["to-number",["get","MaxWDepth"]],'rgba(179,204,255,0.4)',0.5,'rgba(128,153,255,0.4)',1,'rgba(89,128,255,0.4)',2,'rgba(38,115,242,0.4)',3,'rgba(0,77,204,0.4)']
        },
        layout: {
            visibility: 'visible'
        },
    },

及时销毁

大数据不要隐藏,直接删除图层
地图组件关闭前,beforedestroy要销毁地图 map.remove()


    beforeDestroy () {
      //销毁事件总线
      Utils.$off('MAP_EVENTS.DRAGEND')
      Utils.$off('MAP_EVENTS.ZOOMEND')
      
      if(this.map.getSource('playLayer')){
        this.map.getSource('playLayer').setData({
          "type": "FeatureCollection",
          "features": []
        })
      }
      this.map.remove()
      //销毁地图
      this.map = null
      this.$store.commit('DESTROY_MAP', this.mapId)
    }

mapbox有bug,销毁地图前,大数据的geojson可以提前先手动清除source的数据
手动清除存在内存中的geojson
刷新页面不会经过beforedetroy,要手动监听刷新事件,同时销毁上面提到的部分

      window.addEventListener("beforeunload",(e)=> {
          //销毁事件总线
          Utils.$off('MAP_EVENTS.DRAGEND')
          Utils.$off('MAP_EVENTS.ZOOMEND')

          if(self.map.getSource('playLayer')){
            self.map.getSource('playLayer').setData({
              "type": "FeatureCollection",
              "features": []
            })
          }
          
          self.map.remove()
          //销毁地图
          self.map = null
          self.$store.commit('DESTROY_MAP', self.mapId)
          window.removeEventListener('beforeunload', ()=>{})//移除这个监听
      });

参考资料

https://docs.mapbox.com/help/troubleshooting/working-with-large-geojson-data/

https://docs.mapbox.com/help/troubleshooting/mapbox-gl-js-performance/

### Mapbox 矢量切片使用教程 #### 加载矢量切片数据源 为了利用Mapbox GL加载矢量切片,开发者需先引入`mapbox-gl.js`库文件并初始化地图实例。之后可以通过设置`sources`属性来指定要使用的矢量瓦片源的位置。这通常涉及定义一个URL模板字符串指向托管的MBTiles文件或是动态生成的服务端点。 ```javascript // 初始化Mapbox地图对象 mapboxgl.accessToken = 'YOUR_MAPBOX_ACCESS_TOKEN'; const map = new mapboxgl.Map({ container: 'map', // 容器ID style: 'mapbox://styles/mapbox/streets-v11', center: [-74.5, 40], // 初始中心坐标 zoom: 9 // 初始缩放级别 }); // 添加自定义矢量图层作为数据源 map.on('load', function () { map.addSource('myTileset', { type: 'vector', url: 'mapbox://username.tileset-id' // 替换为实际路径或API地址 }); }); ``` 上述代码展示了如何配置基本的地图环境,并通过`addSource()`方法添加一个新的矢量切片资源到现有地图上[^1]。 #### 设计与应用样式规则 一旦成功加载了矢量切片数据源,则可以进一步对其进行可视化处理。此过程涉及到创建新的图层(layer),并通过设定特定于该图层样式的JSON结构体来控制其外观表现形式。这些样式可能包括颜色填充、线条宽度以及其他图形效果等参数调整。 ```json { "id": "example-layer", "type": "fill", // 或者是line/circle/symbol等其他类型 "source": "myTileset", "source-layer": "layer-name-in-tileset", "paint": { "fill-color": "#ff0000" } } ``` 这段JSON片段说明了一个简单的填充分类图层是如何被构建出来的;其中指定了所关联的数据集(`source`)及其内部的具体子层(`source-layer`)名称,同时还设置了绘制时应采用的颜色方案[^2]。 #### 构建离线矢量切片服务 对于希望减少对外部网络依赖的应用场景而言,建立私有的矢量切片服务器可能是必要的选择之一。借助诸如PostGIS这样的地理信息系统扩展组件配合Web框架(如Django REST framework),能够实现在本地环境中高效地生产和服务化矢量化后的空间要素集合。 - **数据库准备**: 配置好带有PostGIS插件的支持SQL查询操作的关系型数据库; - **切片逻辑开发**: 编写RESTful API接口负责接收请求并将对应的GeoJSON格式响应返回给前端客户端; - **缓存机制优化**: 考虑加入内存级联存储策略提高访问效率降低重复计算成本。 以上步骤概述了怎样基于开源工具链打造一套完整的解决方案以满足项目需求中的离线制图能力要求[^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值