From cb85033879c74f34925a303402c1ad3e4a8646f2 Mon Sep 17 00:00:00 2001
From: 徐旺旺 <11530253@qq.com>
Date: 星期一, 10 五月 2021 17:03:54 +0800
Subject: [PATCH] 搜索更换为geoserver wfs,图层顺序,弹窗定位等
---
src/components/LayerController/service/WmsLayerService.js | 187 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 184 insertions(+), 3 deletions(-)
diff --git a/src/components/LayerController/service/WmsLayerService.js b/src/components/LayerController/service/WmsLayerService.js
index 859334d..36aba46 100644
--- a/src/components/LayerController/service/WmsLayerService.js
+++ b/src/components/LayerController/service/WmsLayerService.js
@@ -1,10 +1,191 @@
+import AjaxUtils from '../../../utils/AjaxUtils'
+import { PIPELINE_WMS } from '../../../conf/Constants'
+import Popup from '@views/popup/Popup'
+import List from '../../../utils/List'
+
+/**
+ * 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.layers = 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)
+ }
+ }
}
- init (layer) {
+ init () {
+ if (this.layers) {
+ this.load(this.layers)
+ this.clickListener()
+ }
+ }
+ add (config) {
+ const typeName = config.typeName
+ if (typeName) {
+ if (!this.layers.contains(typeName)) {
+ this.layers.add(config.index, typeName)
+ this.wmsLayer.setParams({ layers: this.layers.join(',') })
+ }
+ }
+ }
+
+ remove (config) {
+ const typeName = config.typeName
+ this.layers.remove(typeName)
+ this.wmsLayer.setParams({ layers: this.layers.join(',') })
+ }
+
+ load (layers) {
+ this.wmsLayer = this.L.tileLayer.wms(PIPELINE_WMS, {
+ format: 'image/png', // 杩斿洖鐨勬暟鎹牸寮�
+ transparent: true,
+ layers: this.layers.join(',')
+ }).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)
+ }
+ 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