| | |
| | | LOAD_TYPE_URL = 'url' // ajax加载方法 |
| | | /** |
| | | * 初始化图层 |
| | | * @param {*} options |
| | | * @param {*} options |
| | | * <code> |
| | | * { |
| | | * map : '地图引用' |
| | | * params : 地图加载参数 |
| | | * |
| | | * |
| | | * code : 图层编号 |
| | | * name : 图层名称 |
| | | * loadType : 图层加载类型, json或者url |
| | |
| | | * } |
| | | * </code> |
| | | */ |
| | | constructor(options){ |
| | | this.map = options.map // 必填项 |
| | | this.params = options.params // 必填项,加载图层数据的参数, 子类需要,可以是{}空对象 |
| | | constructor (options) { |
| | | this.map = options.map // 必填项 |
| | | this.params = options.params // 必填项,加载图层数据的参数, 子类需要,可以是{}空对象 |
| | | |
| | | this.layerCode = options.code || '' // 图层编码 |
| | | this.layerName = options.name || '' // 图层名称 |
| | | this.layerLoadType = options.loadType || BaseVectorLayer.LOAD_TYPE_JSON // 图层加载类型 |
| | | this.layerUrl = options.url || '' // 数据请求地址 |
| | | this.layerData = options.data || '' // 原始GeoJson数据 |
| | | this.layerCode = options.code || '' // 图层编码 |
| | | this.layerName = options.name || '' // 图层名称 |
| | | this.layerLoadType = options.loadType || BaseVectorLayer.LOAD_TYPE_JSON // 图层加载类型 |
| | | this.layerUrl = options.url || '' // 数据请求地址 |
| | | this.layerData = options.data || '' // 原始GeoJson数据 |
| | | |
| | | this.layerHandler = null // 图层引用 |
| | | this.layerHandler = null // 图层引用 |
| | | |
| | | this.features = [] // 所有被构建出来的Features |
| | | this.featuresArray = [] // 所有被构建出来的Features保存备份,避免再次被加载。 load方法全生命周期只被调用一次 |
| | | this.features = [] // 所有被构建出来的Features |
| | | this.featuresArray = [] // 所有被构建出来的Features保存备份,避免再次被加载。 load方法全生命周期只被调用一次 |
| | | |
| | | this.featuresGroup = new Map() // 对加载的数据进行分组,便于后续控制。 但在数据初始化时,需要手动分组。否则,分组 |
| | | this.featuresGroup = new Map() // 对加载的数据进行分组,便于后续控制。 但在数据初始化时,需要手动分组。否则,分组 |
| | | |
| | | this._init(this.map, this.params) |
| | | this._init(this.map, this.params) |
| | | } |
| | | |
| | | /** |
| | | * 初始化基本的图层并加载到map中 |
| | | */ |
| | | _init(map){ |
| | | this.layerHandler = L.layerGroup().addTo(map) |
| | | _init (map) { |
| | | this.layerHandler = L.layerGroup().addTo(map) |
| | | } |
| | | |
| | | /** |
| | | * 加载数据 |
| | | * @param boolean isAddToMap 是否直接将marker添加到地图中, 默认是加载 |
| | | */ |
| | | load(isAddToMap = true){ |
| | | if(this.layerHandler) { // 默认,应该只会加载一次,但是如果有的图层要定时刷新,则需要先清除原图层的数据 |
| | | this.layerHandler.clearLayers() |
| | | } |
| | | load (isAddToMap = true) { |
| | | if (this.layerHandler) { // 默认,应该只会加载一次,但是如果有的图层要定时刷新,则需要先清除原图层的数据 |
| | | this.layerHandler.clearLayers() |
| | | } |
| | | |
| | | let features = [] |
| | | const features = [] |
| | | |
| | | // 依据加载方式加载数据 |
| | | if(this.layerLoadType === BaseVectorLayer.LOAD_TYPE_JSON) { |
| | | this.features = this._loadFromJSON() |
| | | |
| | | }else if(this.layerLoadType === BaseVectorLayer.LOAD_TYPE_URL) { |
| | | this.features = this._loadFromURL() |
| | | }else { |
| | | console.log('图层【'+this.layerCode+'_'+this.layerName+'】的'+this.loadType+'加载方式暂不支持!') |
| | | } |
| | | // 依据加载方式加载数据 |
| | | if (this.layerLoadType === BaseVectorLayer.LOAD_TYPE_JSON) { |
| | | this.features = this._loadFromJSON() |
| | | } else if (this.layerLoadType === BaseVectorLayer.LOAD_TYPE_URL) { |
| | | this.features = this._loadFromURL() |
| | | } else { |
| | | console.log('图层【' + this.layerCode + '_' + this.layerName + '】的' + this.loadType + '加载方式暂不支持!') |
| | | } |
| | | |
| | | if(isAddToMap){ // 添加到地图中 |
| | | this.layerHandler.addLayer(features) |
| | | } |
| | | if (isAddToMap) { // 添加到地图中 |
| | | this.layerHandler.addLayer(features) |
| | | } |
| | | } |
| | | |
| | | _loadFromJSON(){ |
| | | console.log('该方法是抽象方法,在子类尚未实现!') |
| | | _loadFromJSON () { |
| | | console.log('该方法是抽象方法,在子类尚未实现!') |
| | | } |
| | | _loadFromURL(){ |
| | | console.log('该方法是抽象方法,在子类尚未实现!') |
| | | |
| | | _loadFromURL () { |
| | | console.log('该方法是抽象方法,在子类尚未实现!') |
| | | } |
| | | |
| | | /** |
| | | * 显示图层, 如果groups参数,则只显示group对应的图层 |
| | | * @param {} groups 数组,元素之与layerGroups键值对应。 |
| | | */ |
| | | show(groups){ |
| | | if(typeof groups !== 'undefined') { // 如果传递了groups, 则按分组的要求加载图层 |
| | | if(this.layerHandler) { |
| | | for(let i = 0, len = groups.length; i < len; i++) { |
| | | let gFeaturesArray = this.featuresGroup.get(groups[i]) |
| | | if(gFeaturesArray || gFeaturesArray.length > 0){ |
| | | gFeaturesArray.forEach(element => { |
| | | this.layerHandler.removeLayer(element) // 避免被重复加载 |
| | | this.layerHandler.addLayer(element) |
| | | }); |
| | | } |
| | | } |
| | | show (groups) { |
| | | if (typeof groups !== 'undefined') { // 如果传递了groups, 则按分组的要求加载图层 |
| | | if (this.layerHandler) { |
| | | for (let i = 0, len = groups.length; i < len; i++) { |
| | | const gFeaturesArray = this.featuresGroup.get(groups[i]) |
| | | if (gFeaturesArray || gFeaturesArray.length > 0) { |
| | | gFeaturesArray.forEach(element => { |
| | | this.layerHandler.removeLayer(element) // 避免被重复加载 |
| | | this.layerHandler.addLayer(element) |
| | | }) |
| | | } |
| | | } else { // 否则加载全部的数据 |
| | | if(this.layerHandler) { |
| | | this.layerHandler.clearLayers() |
| | | for(let i = 0, len = this.featuresArray.length; i < len; ++i){ |
| | | this.layerHandler.addLayer(this.featuresArray[i]) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } else { // 否则加载全部的数据 |
| | | if (this.layerHandler) { |
| | | this.layerHandler.clearLayers() |
| | | for (let i = 0, len = this.featuresArray.length; i < len; ++i) { |
| | | this.layerHandler.addLayer(this.featuresArray[i]) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 隐藏图层, 如果groups参数,则只隐藏group对应的图层 |
| | | * @param {} groups 数组,元素之与layerGroups键值对应。 如果图层在初始加载时,没有对数据分组,该方法不会有效果。 |
| | | */ |
| | | hide(groups){ |
| | | if(typeof groups !== 'undefined') { // 如果传递了groups, 则按分组的要求加载图层 |
| | | if(this.layerHandler) { |
| | | for(let i = 0, len = groups.length; i < len; i++) { |
| | | let gFeaturesArray = this.featuresGroup.get(groups[i]) |
| | | if(gFeaturesArray || gFeaturesArray.length > 0){ |
| | | gFeaturesArray.forEach(element => { |
| | | this.layerHandler.removeLayer(element) |
| | | }); |
| | | } |
| | | } |
| | | hide (groups) { |
| | | if (typeof groups !== 'undefined') { // 如果传递了groups, 则按分组的要求加载图层 |
| | | if (this.layerHandler) { |
| | | for (let i = 0, len = groups.length; i < len; i++) { |
| | | const gFeaturesArray = this.featuresGroup.get(groups[i]) |
| | | if (gFeaturesArray || gFeaturesArray.length > 0) { |
| | | gFeaturesArray.forEach(element => { |
| | | this.layerHandler.removeLayer(element) |
| | | }) |
| | | } |
| | | } else { // 否则卸载全部的数据 |
| | | if(this.layerHandler) { |
| | | this.layerHandler.clearLayers() |
| | | } |
| | | } |
| | | } |
| | | } else { // 否则卸载全部的数据 |
| | | if (this.layerHandler) { |
| | | this.layerHandler.clearLayers() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |