From 612ac3de5dc5067b8140272feb378e4f4da8bde4 Mon Sep 17 00:00:00 2001 From: wangrui <zephyrs0894@163.com> Date: 星期二, 22 十二月 2020 16:53:12 +0800 Subject: [PATCH] 添加服务图层的配置加载。 --- src/components/plugin/wmts_plugins.js | 96 ++++++++++++++++++++++++ src/conf/MapConfig.js | 25 +++++ src/views/MapTemplate.vue | 4 .DS_Store | 0 src/components/helpers/ServiceLayerHelper.js | 99 +++++++++++++++--------- src/Sgis.js | 2 6 files changed, 183 insertions(+), 43 deletions(-) diff --git a/.DS_Store b/.DS_Store index ff7ad87..37a22f3 100644 --- a/.DS_Store +++ b/.DS_Store Binary files differ diff --git a/src/Sgis.js b/src/Sgis.js index 1165a85..20e2d1a 100644 --- a/src/Sgis.js +++ b/src/Sgis.js @@ -7,6 +7,7 @@ import PathDrag from '@components/plugin/PathDrag' import CanvasIcon from '@components/plugin/CanvasMarkers' import MagicMarker from '@components/plugin/MagicMarker' +import WmtsSupport from '@components/plugin/wmts_plugins' import 'leaflet.markercluster' import MapConfig from '@/conf/MapConfig' @@ -23,6 +24,7 @@ PathDrag.init(L) // 璺緞鎷栨嫿 MagicMarker.init(L) // 鍔ㄧ敾Marker CanvasIcon.init(L) // 浣跨敤canvas缁樺埗Marker + WmtsSupport.init(L) // 鎵╁睍锛屼娇鏀寔WMTS // CustomPopup.init(L) // 鑷畾涔夊脊鍑烘 DashFlow.DashFlow(L) // 娴佸姩绾垮浘 // Leaflet鎵╁睍浠g爜 diff --git a/src/components/helpers/ServiceLayerHelper.js b/src/components/helpers/ServiceLayerHelper.js index 6d4ce8c..128a827 100644 --- a/src/components/helpers/ServiceLayerHelper.js +++ b/src/components/helpers/ServiceLayerHelper.js @@ -1,3 +1,4 @@ +/* eslint-disable no-debugger */ /** * 鍒涘缓鍥惧眰鐩稿叧鐨勭被 */ @@ -17,6 +18,15 @@ initServiceLayers(mapConfig){ console.log(mapConfig) this.mapConfig = mapConfig + + this._loadLayers(mapConfig) + } + + _loadLayers(mapConfig, isAddToMap = true){ + console.debug('ServiceLayerHelper鍔犺浇鍙傛暟锛�',mapConfig) + this.loadTileLayer(mapConfig, isAddToMap) + this.loadWmtsLayer(mapConfig, isAddToMap) + this.loadWmtsLayer(mapConfig, isAddToMap) } /** @@ -24,38 +34,42 @@ * @param {}} options * @param {*} isAddToMap */ - loadWmtsLayer(options, isAddToMap) { - const layer =L.tileLayer.wmts(options.url, { - layers: options.layers || 'all',//country - format: options.format || "image/png", - transparent: options.true || true, - crs:options.crs || L.CRS.EPSG4326 - }); - - if(isAddToMap) { - layer.addTo(this.map) + loadWmtsLayer(options, isAddToMap = true) { + for(let i = 0, len = options.mapConfig.ServiceLayers.length; i < len; ++i) { + let opt = options.mapConfig.ServiceLayers[i] + if(opt.type !== 'wmts') { + continue + } + const layer = this.L.tileLayer(opt.url, opt.option); + + if(isAddToMap) { + layer.addTo(this.map) + } + this.tileLayersMap.set(opt.code, layer) + this.tileLayersArray.push(layer) } - this.tileLayersMap.put(options.name, layer) - this.tileLayersArray.push(layer) } /** * 寰�鍦板浘涓姞鍏ヤ竴涓猈MS鏈嶅姟 * @param {}} options * @param {*} isAddToMap */ - loadWmsLayer(options, isAddToMap) { - const layer =L.tileLayer.wms(options.url, { - layers: options.layers || 'all',//country - format: options.format || "image/png", - transparent: options.true || true, - crs:options.crs || L.CRS.EPSG4326 - }); - - if(isAddToMap) { - layer.addTo(this.map) + loadWmsLayer(options, isAddToMap = true) { + for(let i = 0, len = options.mapConfig.ServiceLayers.length; i < len; ++i) { + let opt = options.mapConfig.ServiceLayers[i] + if(opt.type !== 'wms') { + continue + } + + const layer =this.L.tileLayer.wms(opt.url, opt.option); + + if(isAddToMap) { + layer.addTo(this.map) + } + this.tileLayersMap.set(opt.code, layer) + this.tileLayersArray.push(layer) } - this.tileLayersMap.put(options.name, layer) - this.tileLayersArray.push(layer) + } /** @@ -63,22 +77,29 @@ * @param {}} options * @param {*} isAddToMap */ - loadTileLayer(options, isAddToMap) { - const layer =L.tileLayer(options.url, { - layers: options.layers || 'all',//country - format: options.format || "image/png", - transparent: options.true || true, - crs:options.crs || L.CRS.EPSG4326, - maxZoom: options.maxZoom || 21, - minZoom: options.minZoom || 1, - zoomOffset: options.zoomOffset || 0 - }); - - if(isAddToMap) { - layer.addTo(this.map) + loadTileLayer(options, isAddToMap = true) { + for(let i = 0, len = options.mapConfig.ServiceLayers.length; i < len; ++i) { + let opt = options.mapConfig.ServiceLayers[i] + if(opt.type !== 'tile') { + continue + } + + const layer =this.L.tileLayer(opt.url, { + layers: opt.layers || 'all',//country + format: opt.format || "image/png", + transparent: opt.true || true, + crs:opt.crs || L.CRS.EPSG4326, + maxZoom: opt.maxZoom || 21, + minZoom: opt.minZoom || 1, + zoomOffset: opt.zoomOffset || 0 + }); + + if(isAddToMap) { + layer.addTo(this.map) + } + this.tileLayersMap.set(opt.code , layer) + this.tileLayersArray.push(layer) } - this.tileLayersMap.put(options.name, layer) - this.tileLayersArray.push(layer) } hideTileLayer(name){ diff --git a/src/components/plugin/wmts_plugins.js b/src/components/plugin/wmts_plugins.js new file mode 100644 index 0000000..7c6e370 --- /dev/null +++ b/src/components/plugin/wmts_plugins.js @@ -0,0 +1,96 @@ +/* eslint-disable no-prototype-builtins */ +'use strict' +const init = (L) => { + L.TileLayer.WMTS = L.TileLayer.extend({ + defaultWmtsParams: { + service: 'WMTS', + request: 'GetTile', + version: '1.0.0', + layer: '', + style: '', + tilematrixset: '', + format: 'image/jpeg' + }, + + initialize: function (url, options) { // (String, Object) + this._url = url; + var lOptions= {}; + var cOptions = Object.keys(options); + cOptions.forEach(element=>{ + lOptions[element.toLowerCase()]=options[element]; + }); + var wmtsParams = L.extend({}, this.defaultWmtsParams); + var tileSize = lOptions.tileSize || this.options.tileSize; + if (lOptions.detectRetina && L.Browser.retina) { + wmtsParams.width = wmtsParams.height = tileSize * 2; + } else { + wmtsParams.width = wmtsParams.height = tileSize; + } + for (var i in lOptions) { + // all keys that are in defaultWmtsParams options go to WMTS params + if (wmtsParams.hasOwnProperty(i) && i!="matrixIds") { + wmtsParams[i] = lOptions[i]; + } + } + this.wmtsParams = wmtsParams; + this.matrixIds = options.matrixIds||this.getDefaultMatrix(); + L.setOptions(this, options); + }, + + onAdd: function (map) { + this._crs = this.options.crs || map.options.crs; + L.TileLayer.prototype.onAdd.call(this, map); + }, + + getTileUrl: function (coords) { // (Point, Number) -> String + var tileSize = this.options.tileSize; + var nwPoint = coords.multiplyBy(tileSize); + nwPoint.x+=1; + nwPoint.y-=1; + var sePoint = nwPoint.add(new L.Point(tileSize, tileSize)); + var zoom = this._tileZoom; + var nw = this._crs.project(this._map.unproject(nwPoint, zoom)); + var se = this._crs.project(this._map.unproject(sePoint, zoom)); + var tilewidth = se.x-nw.x; + var ident = this.matrixIds[zoom].identifier; + var tilematrix = this.wmtsParams.tilematrixset + ":" + ident; + var X0 = this.matrixIds[zoom].topLeftCorner.lng; + var Y0 = this.matrixIds[zoom].topLeftCorner.lat; + var tilecol=Math.floor((nw.x-X0)/tilewidth); + var tilerow=-Math.floor((nw.y-Y0)/tilewidth); + var url = L.Util.template(this._url, {s: this._getSubdomain(coords)}); + return url + L.Util.getParamString(this.wmtsParams, url) + "&tilematrix=" + tilematrix + "&tilerow=" + tilerow +"&tilecol=" + tilecol; + }, + + setParams: function (params, noRedraw) { + L.extend(this.wmtsParams, params); + if (!noRedraw) { + this.redraw(); + } + return this; + }, + + getDefaultMatrix : function () { + /** + * the matrix3857 represents the projection + * for in the IGN WMTS for the google coordinates. + */ + var matrixIds3857 = new Array(22); + for (var i= 0; i<22; i++) { + matrixIds3857[i]= { + identifier : "" + i, + topLeftCorner : new L.LatLng(20037508.3428,-20037508.3428) + }; + } + return matrixIds3857; + } + }); + + L.tileLayer.wmts = function (url, options) { + return new L.TileLayer.WMTS(url, options); + }; +} + +export default { + init +} diff --git a/src/conf/MapConfig.js b/src/conf/MapConfig.js index ffca88b..731f76d 100644 --- a/src/conf/MapConfig.js +++ b/src/conf/MapConfig.js @@ -5,11 +5,17 @@ let pos = curWwwPath.indexOf(pathname) let HOST_URL = curWwwPath.substring(0, pos) -const BLUEMAP_HOST = 'http://xearth.cn:6288/' // 鍏徃鍙戝竷鐨勫湴鍥炬湇鍔★紝鐢ㄤ簬娴嬭瘯鐨勫湴鍧� - +// basemap涓绘満閰嶇疆 const SINOPEC_GIS_HOST = 'http://10.246.132.249:8080' // 鍐呯綉澶╁湴鍥句富鏈哄湴鍧� const TIANDITU_GIS_HOST = 'http://t0.tianditu.gov.cn' // 鍏綉澶╁湴鍥句富鏈哄湴鍧� const TIANDITU_GIS_TOKEN = '5d76218063082952d18b76da5005f490' // 澶囩敤tk: f1b72b5e7cb1175acddfa485f1bc9770 + +// service涓绘満閰嶇疆 +const APP_GIS_HOST = 'http://xearth.cn:6299/' + +// 鑷畾涔変富鏈洪厤缃� +const BLUEMAP_HOST = APP_GIS_HOST // 鍏徃鍙戝竷鐨勫湴鍥炬湇鍔★紝鐢ㄤ簬娴嬭瘯鐨勫湴鍧� + const mapOptions = { crs: L.CRS.EPSG4326, minZoom: 3, @@ -169,6 +175,21 @@ isLoadMapByToken: false, url: SINOPEC_GIS_HOST + '/OneMapServer/rest/services/base-map-image-globe/MapServer' } + ], + + ServiceLayers:[ + { + code:'guojie', + name:'鍥界晫', + type:'wmts', + url: APP_GIS_HOST + '/server/ogcserver/whp_guojie/wmts?x={x}&y={y}&z={z}', + option:{ + layers: 'all', + format: "image/png", + transparent: true, + crs: L.CRS.EPSG4326 + } + } ] } diff --git a/src/views/MapTemplate.vue b/src/views/MapTemplate.vue index 6ee012d..9dfea6c 100644 --- a/src/views/MapTemplate.vue +++ b/src/views/MapTemplate.vue @@ -39,10 +39,10 @@ this.serviceLayerHelper = Sgis.initTileLayersHelper(this.mapObj.map, this.mapObj.L) // 鍒濆鍖栦笟鍔″簳鍥惧姪鎵� - this.serviceLayerHelper.initServiceLayers() + this.serviceLayerHelper.initServiceLayers(mapConfig) this.vectorLayerHelper = Sgis.initVectorLayersHelper(this.mapObj.map, this.mapObj.L) // 鍒濆鍖栧姩鎬佽绱犲浘灞傚姪鎵� - this.vectorLayerHelper.initVectorLayers() + this.vectorLayerHelper.initVectorLayers(mapConfig) this.setLayerHelper(this.vectorLayerHelper) return this.map -- Gitblit v1.8.0