From e97a404960da3964475aebbef4ff069be2e4ccfc Mon Sep 17 00:00:00 2001 From: ChenZeping02609 <chenzeping02609@163.com> Date: 星期三, 12 五月 2021 17:54:29 +0800 Subject: [PATCH] 修改问题,污染源 --- src/components/LayerController/service/WmsLayerService.js | 201 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 198 insertions(+), 3 deletions(-) diff --git a/src/components/LayerController/service/WmsLayerService.js b/src/components/LayerController/service/WmsLayerService.js index 859334d..0094a71 100644 --- a/src/components/LayerController/service/WmsLayerService.js +++ b/src/components/LayerController/service/WmsLayerService.js @@ -1,10 +1,205 @@ +import AjaxUtils from '../../../utils/AjaxUtils' +import { PIPELINE_WMS } from '../../../conf/Constants' +import Popup from '@views/popup/Popup' +import WmsLayerList from '../dataset/WmsLayerList' + +/** + * todo 寰楄�冭檻涓�涓浘灞傞厤缃簡澶氫釜 wmsLayers鐨勬儏鍐� + */ class WmsLayerService { - constructor (config) { - this.config = config + constructor (layersConfig) { + this.L = window.L + this.map = window.map + this.popupComp = window.popupComp + // wms getfeatureinfo 榛樿鍙傛暟 + this.params = { + VERSION: '1.1.1', + SERVICE: 'WMS', + REQUEST: 'GetFeatureInfo', + // bbox: bbox, + FORMAT: 'image/png', + INFO_FORMAT: 'application/json', + TRANSPARENT: true, + FEATURE_COUNT: 50, + SRS: 'EPSG:4326', + EXCEPTIONS: 'application/vnd.ogc.se_inimage' + } + this.layersConfig = layersConfig + // 瀛樻斁getfeatureinfo鐨勫浘灞傜粍 + this.featureGroup = this.L.featureGroup({}).addTo(this.map) + + this.wmsLayerList = new WmsLayerList() + for (var i = 0; i < layersConfig.length; i++) { + const config = layersConfig[i] + this.wmsLayerList.addConfig(config) + } + this.load() } - init (layer) { + init () { + this.clickListener() + } + add (config) { + this.wmsLayerList.addConfig(config) + const layers = this.wmsLayerList.getLayers() + const filter = this.wmsLayerList.getFilters() + const params = {} + if (filter) { + params.cql_filter = filter + } + if (layers) { + params.layers = layers + } + this.wmsLayer.setParams(params) + } + + remove (config) { + console.log(config) + this.wmsLayerList.remove(config.typeName, config.filter) + const layers = this.wmsLayerList.getLayers() + const filter = this.wmsLayerList.getFilters() + const params = { layers: layers } + if (filter) { + params.cql_filter = filter + } + this.wmsLayer.setParams(params) + } + + load () { + const layers = this.wmsLayerList.getLayers() + const filter = this.wmsLayerList.getFilters() + const params = { + format: 'image/png', // 杩斿洖鐨勬暟鎹牸寮� + transparent: true, + BBOX: this.map.getBounds().toBBoxString() + } + if (layers) { + params.layers = layers + } + if (filter.length > 0) { + params.cql_filter = filter + } + this.wmsLayer = this.L.tileLayer.wms(PIPELINE_WMS, params).addTo(this.map) + } + + clickListener () { + window.map.on('click', (e) => { + // console.log(e) + this.featureGroup.clearLayers() + var point = this.map.latLngToContainerPoint(e.latlng, this.map.getZoom()) + var size = this.map.getSize() + // const bbox = this.L.latLngBounds(this.L.latLng(e.latlng.lng, e.latlng.lat)).toBBoxString() + const layers = this.wmsLayerList.getLayers() + if (layers.length > 0) { + const params = Object.assign({ + LAYERS: layers, + QUERY_LAYERS: layers, + WIDTH: size.x, + HEIGHT: size.y, + X: Math.round(point.x), + Y: Math.round(point.y), + BBOX: this.map.getBounds().toBBoxString() + }, this.params) + AjaxUtils.get4JsonDataByUrl(PIPELINE_WMS, params, (res) => { + const features = res.data.features + /** + * { + * title: 'New Tab', + * name: newTabName, + * content: 'New Tab content' + * } + * @type {*[]} + */ + const popupDatas = [] + if (features) { + for (var i = 0; i < features.length; i++) { + const feature = features[i] + const properties = feature.properties + this.highlight(feature) + // const coordinates = feature.geometry.coordinates + popupDatas.push({ + title: properties.wellname || properties.devicename || properties.name || properties.pipename, + name: feature.id, + content: properties + }) + } + } + if (popupDatas.length > 0) { + var myIcon = this.L.divIcon({ className: 'my-div-icon' }) + this.L.marker(e.latlng, { + icon: myIcon + }).addTo(this.featureGroup)/* + .bindPopup((layer) => { + this.popupComp.setDatas(popupDatas) + this.popupComp.setShow() + return this.popupComp.$el + }, { + className: 's-map-popup', + minWidth: 300, + closeButton: false, + autoClose: false + }) + .openPopup() */ + + if (window.layerFactory.clickSwitch) { + window.$layer.open({ + content: { + content: Popup, // 缁勪欢 + data: { // 浼犻�掔殑鍙傛暟 + datas: popupDatas + } + }, + title: '', // 鏍囬 + left: e.originalEvent.clientX, + top: e.originalEvent.clientY + }) + } + // this.popupComp.setDatas(popupDatas) + // this.popupComp.setShow() + } + }) + } + }) + } + + reverseMultiLine (feature) { + const coordinates = feature.geometry.coordinates + var latlng = [] + for (var j = 0; j < coordinates.length; j++) { + const coordinate = coordinates[j] + var xy = [] + for (var k = 0; k < coordinate.length; k++) { + const coor = coordinate[k] + xy.push(coor.reverse()) + } + latlng.push(xy) + } + return latlng + } + + reversePolyLine (feature) { + const coordinates = feature.geometry.coordinates + var latlng = [] + for (var j = 0; j < coordinates.length; j++) { + const coordinate = coordinates[j] + latlng.push(coordinate.reverse()) + } + return latlng + } + + highlight (feature) { + const type = feature.geometry.type + if (type === 'MultiLineString') { + this.L.polyline(this.reverseMultiLine(feature), { color: 'red' }).addTo(this.featureGroup) + } else if (type === 'Point') { + var myIcon = this.L.divIcon({ className: 'my-div-icon' }) + this.L.marker(feature.geometry.coordinates.reverse(), { + icon: myIcon + }).addTo(this.featureGroup) + } else if (type === 'LineString') { + this.L.polyline(this.reversePolyLine(feature), { color: 'red' }).addTo(this.featureGroup) + } } } -- Gitblit v1.8.0