| | |
| | | import AjaxUtils from '../../../utils/AjaxUtils' |
| | | import { PIPELINE_WMS } from '../../../conf/Constants' |
| | | import { WMS_URL } from '../../../conf/Constants' |
| | | import Popup from '@views/popup/Popup' |
| | | import List from '../../../utils/List' |
| | | import WmsLayerList from '../dataset/WmsLayerList' |
| | | import { highlight } from '../../helpers/LocateHelper' |
| | | |
| | | /** |
| | | * todo 得考虑一个图层配置了多个 wmsLayers的情况 |
| | |
| | | // 存放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() |
| | | } |
| | | this.clickListener() |
| | | } |
| | | |
| | | 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) |
| | | const layers = this.wmsLayerList.getLayers() || '' |
| | | const filter = this.wmsLayerList.getFilters() || '' |
| | | const params = {} |
| | | params.cql_filter = filter |
| | | params.layers = layers |
| | | this.wmsLayer.setParams(params) |
| | | } |
| | | |
| | | 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) |
| | | const layers = this.wmsLayerList.getLayers() || '' |
| | | const filter = this.wmsLayerList.getFilters() || '' |
| | | const params = { layers: layers } |
| | | params.cql_filter = filter |
| | | this.wmsLayer.setParams(params) |
| | | } |
| | | |
| | | load (layers) { |
| | | this.wmsLayer = this.L.tileLayer.wms(PIPELINE_WMS, { |
| | | 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) |
| | | BBOX: this.map.getBounds().toBBoxString() |
| | | } |
| | | if (layers) { |
| | | params.layers = layers |
| | | } |
| | | if (filter.length > 0) { |
| | | params.cql_filter = filter |
| | | } |
| | | this.wmsLayer = this.L.tileLayer.wms(WMS_URL, params).addTo(this.map) |
| | | } |
| | | |
| | | clickListener () { |
| | | window.map.on('click', (e) => { |
| | | console.log(e) |
| | | // console.log(e) |
| | | window.mapManager.clearHighlight() |
| | | 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 layers = this.wmsLayerList.getLayers() |
| | | const filter = this.wmsLayerList.getFilters() |
| | | if (layers.length > 0) { |
| | | const params = Object.assign({ |
| | | LAYERS: this.layers.join(','), |
| | | QUERY_LAYERS: this.layers.join(','), |
| | | 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) => { |
| | | if (filter.length > 0) { |
| | | params.cql_filter = filter |
| | | } |
| | | AjaxUtils.get4JsonDataByUrl(WMS_URL, params, (res) => { |
| | | const features = res.data.features |
| | | /** |
| | | * { |
| | |
| | | for (var i = 0; i < features.length; i++) { |
| | | const feature = features[i] |
| | | const properties = feature.properties |
| | | this.highlight(feature) |
| | | highlight(feature) |
| | | // const coordinates = feature.geometry.coordinates |
| | | popupDatas.push({ |
| | | title: properties.wellname || properties.devicename || properties.name || properties.pipename, |
| | |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | 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) |
| | | } |
| | | } |
| | | } |
| | | |