| | |
| | | import AjaxUtils from '../../../utils/AjaxUtils' |
| | | import { PIPELINE_WMS } from '../../../conf/Constants' |
| | | import Popup from '@views/popup/Popup' |
| | | import List from '../../../utils/List' |
| | | import { WMS_URL } from '../../../conf/Constants' |
| | | import WmsLayerList from '../dataset/WmsLayerList' |
| | | |
| | | /** |
| | | * todo 得考虑一个图层配置了多个 wmsLayers的情况 |
| | |
| | | INFO_FORMAT: 'application/json', |
| | | TRANSPARENT: true, |
| | | FEATURE_COUNT: 50, |
| | | maxZoom: 21, |
| | | SRS: 'EPSG:4326', |
| | | EXCEPTIONS: 'application/vnd.ogc.se_inimage' |
| | | } |
| | |
| | | // 存放getfeatureinfo的图层组 |
| | | this.featureGroup = this.L.featureGroup({}).addTo(this.map) |
| | | |
| | | this.layers = new List() |
| | | this.filters = new List() |
| | | for (var i = 0; i < layersConfig.length; i++) { |
| | | const config = layersConfig[i] |
| | | const typeName = config.typeName |
| | | if (typeName) { |
| | | this.layers.add(config.index, typeName) |
| | | if (config.filter) { |
| | | this.filters.addEnd(config.filter) |
| | | } |
| | | this.wmsLayerList = new WmsLayerList() |
| | | if (layersConfig) { |
| | | for (var i = 0; i < layersConfig.length; i++) { |
| | | const config = layersConfig[i] |
| | | this.wmsLayerList.addConfig(config) |
| | | } |
| | | } |
| | | this.load() |
| | | } |
| | | |
| | | init () { |
| | | if (this.layers) { |
| | | this.load(this.layers) |
| | | this.clickListener() |
| | | } |
| | | |
| | | addAll (configs) { |
| | | for (let i = 0; i < configs.length; i++) { |
| | | const config = configs[i] |
| | | const layers = config.layers |
| | | if (layers) { |
| | | this.addAll(layers) |
| | | } |
| | | this.wmsLayerList.addConfig(config) |
| | | } |
| | | this.reload() |
| | | } |
| | | |
| | | add (config) { |
| | | const typeName = config.typeName |
| | | if (typeName) { |
| | | if (!this.layers.contains(typeName)) { |
| | | this.layers.add(config.index, typeName) |
| | | if (config.filter) { |
| | | this.filters.addEnd(config.filter) |
| | | } |
| | | this.wmsLayer.setParams({ cql_filter: this.filters.join(' and ') }) |
| | | this.wmsLayerList.addConfig(config) |
| | | this.reload() |
| | | } |
| | | |
| | | removeAll (configs) { |
| | | for (let i = 0; i < configs.length; i++) { |
| | | const config = configs[i] |
| | | const layers = config.layers |
| | | if (layers) { |
| | | this.removeAll(layers) |
| | | } |
| | | this.wmsLayerList.remove(config.typeName, config.filter) |
| | | } |
| | | this.reload() |
| | | } |
| | | |
| | | remove (config) { |
| | | console.log(config) |
| | | const typeName = config.typeName |
| | | this.layers.remove(typeName) |
| | | if (config.filter) { |
| | | this.filters.remove(config.filter) |
| | | } |
| | | this.wmsLayer.setParams({ cql_filter: this.filters.join(' and ') }) |
| | | this.wmsLayerList.remove(config.typeName, config.filter) |
| | | this.reload() |
| | | } |
| | | |
| | | load (layers) { |
| | | this.wmsLayer = this.L.tileLayer.wms(PIPELINE_WMS, { |
| | | reload () { |
| | | const layers = this.wmsLayerList.getLayers() || '' |
| | | const filter = this.wmsLayerList.getFilters() || '' |
| | | const params = {} |
| | | params.cql_filter = filter |
| | | params.layers = layers |
| | | this.wmsLayer.setParams(params, false) |
| | | } |
| | | |
| | | load () { |
| | | const layers = this.wmsLayerList.getLayers() |
| | | const filter = this.wmsLayerList.getFilters() |
| | | const params = { |
| | | format: 'image/png', // 返回的数据格式 |
| | | transparent: true, |
| | | layers: 'sewer:pipesegment', // this.layers.join(','), |
| | | cql_filter: this.filters.join(' and ') |
| | | }).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() |
| | | |
| | | if (this.layers.length() > 0) { |
| | | const params = Object.assign({ |
| | | LAYERS: this.layers.join(','), |
| | | QUERY_LAYERS: this.layers.join(','), |
| | | 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) |
| | | maxZoom: 21, |
| | | BBOX: this.map.getBounds().toBBoxString() |
| | | } |
| | | 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()) |
| | | if (layers) { |
| | | params.layers = layers |
| | | } |
| | | 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) |
| | | if (filter.length > 0) { |
| | | params.cql_filter = filter |
| | | } |
| | | this.wmsLayer = this.L.tileLayer.wms(WMS_URL, params).addTo(this.map) |
| | | } |
| | | } |
| | | |