欢迎光临散文网 会员登陆 & 注册

vue中map对象共享方式(mapbox-gl、Cesium)

2022-06-06 22:54 作者:地理信息技术杂谈  | 我要投稿

在vue中集成mapbox-gl或者Cesium的开发中,未将mapbox-gl和Cesium封装vue组件,简便期间,直接将mapbox-gl中的实例化map对象进行整个工程共享,将Cesium中初始化的viewer进行共享,达到每个vue组件可以直接访问,从而实现操控地图。

使用这种方式时,工程中就一个地图,不同的功能进行数据切换、对象加载,特别是在Cesium中,地图每次加载还是需要一定时间的,对于不需要显示地图的场景,将地图盖住就可以。当然,对于一些开发中的代码解耦,这样的操作可能不太合适了。

以Cesium的开发为示例,简单写一下实现的方式:

vue中使用的是 状态管理,官方参考实现网址:

https://cn.vuejs.org/v2/guide/state-management.html

关键代码:

import Vue from 'vue';

import Vuex from 'vuex';

Vue.use(Vuex);

const state = { 

mainmap: null 

};

const getters = { 

getmap(state) { 

return state.mainmap;

}


};

const mutations = {

setmap(state, map) { 

state.mainmap = map;

}


};

const actions = {

setnewmap(context, map) { 

context.commit('setMap', map)

}


}};

const store = new Vuex.Store({

state,

getters,

mutations,

actions

});

export default store;

Cesium的viewer初始化时,赋值:

var viewer = new Cesium.Viewer(this.$refs.cesiumContainer);

this.$store.commit("setmap", viewer);

其他的业务界面使用时:

let viewer = this.$store.getters.getmap;

mapbox-gl也是同样进行设置。
使用此方式的时候,要注意代码的执行顺序,假如要在地图初始化执行一些操作,一定得要等到store中存储完数据以后。

vue中map对象共享方式(mapbox-gl、Cesium)的评论 (共 条)

分享到微博请遵守国家法律