From 0110b78419d98e114c59fa9fb6f69663fbdc3c98 Mon Sep 17 00:00:00 2001
From: 陈泽平 <chenzeping>
Date: 星期日, 30 五月 2021 19:37:35 +0800
Subject: [PATCH] Merge branch 'develop' of http://xearth.cn:6600/r/wuyushui/SewerAndRainNetwork into develop

---
 src/assets/images/map-pages/buffer/8.png                                       |    0 
 src/assets/images/map-pages/buffer/3.png                                       |    0 
 src/assets/css/map/map-panel-style.less                                        |    8 
 src/components/base-page/enterprise-emergency/event-handling/EventHandling.vue |    8 
 src/components/plugin/L.CircleEditor.js                                        |  216 +++++++++++++++
 src/Sgis.js                                                                    |    1 
 src/components/base-page/enterprise-emergency/DisposalEvent.vue                |   40 ++
 src/assets/images/map-pages/buffer/img.png                                     |    0 
 src/assets/images/map-pages/buffer/2.png                                       |    0 
 src/assets/images/map-pages/buffer/15.png                                      |    0 
 src/assets/images/map-pages/buffer/area_query_drag.png                         |    0 
 src/assets/images/map-pages/buffer/1.png                                       |    0 
 src/assets/images/map-pages/buffer/7.png                                       |    0 
 src/assets/images/map-pages/buffer/10.png                                      |    0 
 src/assets/images/map-pages/buffer/5.png                                       |    0 
 src/components/base-page/enterprise-emergency/event-handling/BufferQuery.js    |  553 +++++++++++++++++++++++++++++++++++++++
 16 files changed, 818 insertions(+), 8 deletions(-)

diff --git a/src/Sgis.js b/src/Sgis.js
index 6e9dd2b..16feefe 100644
--- a/src/Sgis.js
+++ b/src/Sgis.js
@@ -14,6 +14,7 @@
 import '@/components/plugin/magicMarker.css'
 import '@components/plugin/pulse/Pulse' // marker 澶栧湀娉�
 import '@components/plugin/pulse/Pulse.css' // marker 澶栧湀娉� css
+import '@components/plugin/L.CircleEditor'
 import BasemapHelper from './components/helpers/BasemapHelper'
 import VectorLayerHelper from './components/helpers/VectorLayerHelper'
 
diff --git a/src/assets/css/map/map-panel-style.less b/src/assets/css/map/map-panel-style.less
index 1ec2a41..f4ac982 100644
--- a/src/assets/css/map/map-panel-style.less
+++ b/src/assets/css/map/map-panel-style.less
@@ -28,7 +28,8 @@
 }
 
 .el-button--mini, .el-button--mini.is-round {
-  padding: 0.02rem 0.04rem;
+  margin-left: 5px;
+  margin-right: 5px;
 }
 
 /*闅愯棌*/
@@ -164,6 +165,11 @@
     background-color: @background-color-light;
     border: solid 1px @color;
   }
+
+   input:hover {
+    border: solid 1px @color;
+  }
+
 }
 
 .map-tooltip.is-dark {
diff --git a/src/assets/images/map-pages/buffer/1.png b/src/assets/images/map-pages/buffer/1.png
new file mode 100644
index 0000000..1c045b3
--- /dev/null
+++ b/src/assets/images/map-pages/buffer/1.png
Binary files differ
diff --git a/src/assets/images/map-pages/buffer/10.png b/src/assets/images/map-pages/buffer/10.png
new file mode 100644
index 0000000..85241da
--- /dev/null
+++ b/src/assets/images/map-pages/buffer/10.png
Binary files differ
diff --git a/src/assets/images/map-pages/buffer/15.png b/src/assets/images/map-pages/buffer/15.png
new file mode 100644
index 0000000..1793d5a
--- /dev/null
+++ b/src/assets/images/map-pages/buffer/15.png
Binary files differ
diff --git a/src/assets/images/map-pages/buffer/2.png b/src/assets/images/map-pages/buffer/2.png
new file mode 100644
index 0000000..9f87b74
--- /dev/null
+++ b/src/assets/images/map-pages/buffer/2.png
Binary files differ
diff --git a/src/assets/images/map-pages/buffer/3.png b/src/assets/images/map-pages/buffer/3.png
new file mode 100644
index 0000000..d473da8
--- /dev/null
+++ b/src/assets/images/map-pages/buffer/3.png
Binary files differ
diff --git a/src/assets/images/map-pages/buffer/5.png b/src/assets/images/map-pages/buffer/5.png
new file mode 100644
index 0000000..9f0cb2c
--- /dev/null
+++ b/src/assets/images/map-pages/buffer/5.png
Binary files differ
diff --git a/src/assets/images/map-pages/buffer/7.png b/src/assets/images/map-pages/buffer/7.png
new file mode 100644
index 0000000..20ef506
--- /dev/null
+++ b/src/assets/images/map-pages/buffer/7.png
Binary files differ
diff --git a/src/assets/images/map-pages/buffer/8.png b/src/assets/images/map-pages/buffer/8.png
new file mode 100644
index 0000000..38bb71c
--- /dev/null
+++ b/src/assets/images/map-pages/buffer/8.png
Binary files differ
diff --git a/src/assets/images/map-pages/buffer/area_query_drag.png b/src/assets/images/map-pages/buffer/area_query_drag.png
new file mode 100644
index 0000000..eebc54d
--- /dev/null
+++ b/src/assets/images/map-pages/buffer/area_query_drag.png
Binary files differ
diff --git a/src/assets/images/map-pages/buffer/img.png b/src/assets/images/map-pages/buffer/img.png
new file mode 100644
index 0000000..9358712
--- /dev/null
+++ b/src/assets/images/map-pages/buffer/img.png
Binary files differ
diff --git a/src/components/base-page/enterprise-emergency/DisposalEvent.vue b/src/components/base-page/enterprise-emergency/DisposalEvent.vue
index c7c4c15..2b7b0a5 100644
--- a/src/components/base-page/enterprise-emergency/DisposalEvent.vue
+++ b/src/components/base-page/enterprise-emergency/DisposalEvent.vue
@@ -48,7 +48,7 @@
                 <el-col class="info-text" :span="18">{{ form.eventDesc }}</el-col>
               </el-row>
               <el-row>
-                <el-col class="info-label"  span="6">闄勪欢锛�</el-col>
+                <el-col class="info-label"  :span="6">闄勪欢锛�</el-col>
                 <el-col class="info-text" :span="18"><a class="link-btn" href="javascript:">闄勪欢</a>
                   &nbsp;&nbsp;&nbsp;&nbsp;
                   <a class="link-btn" href="javascript:">闄勪欢</a>
@@ -94,8 +94,12 @@
     </div>
     </el-scrollbar>
     <div class="event-management">
-      <el-input></el-input>
-      <el-button type="primary" size="mini" @click="ToManagement">寮�濮嬪垎鏋�</el-button>
+      <el-button type="primary" size="mini" @click="mapClick">鍦板浘鐐归��</el-button>
+      <el-select v-model="radius.value" placeholder="璇烽�夋嫨" size="mini" class="map-input">
+        <el-option v-for="(item,index) in radius.options" :key="index" :label="item.label" :value="item.value"></el-option>
+      </el-select>
+      <el-button type="primary" size="mini" @click="eventHanding">寮�濮嬪垎鏋�</el-button>
+      <el-button type="primary" size="mini" @click="toManagement">浜嬩欢绠$悊</el-button>
       <!--            <el-button size="mini">鍏抽棴</el-button>-->
     </div>
   </div>
@@ -105,12 +109,17 @@
 <script>
 
 import eventBus from '../../../eventBus'
-
+import BufferQuery from '@components/base-page/enterprise-emergency/event-handling/BufferQuery'
 export default {
   name: 'DisposalEvent',
   data () {
     return {
+      bufferQuery: null,
       activeNames: ['1'],
+      radius: {
+        value: 0.1,
+        options: [{ label: '500m', value: 0.5 }, { label: '1km', value: 1 }, { label: '2km', value: 2 }, { label: '5km', value: 5 }, { label: '10km', value: 10 }]
+      },
       form: {
         nameOfEvent: '***************浜嬩欢',
         eventLocation: '**********瑁呯疆',
@@ -170,9 +179,13 @@
       ]
     }
   },
+  mounted () {
+    this.bufferQuery = new BufferQuery(window.map, window.L)
+    this.bufferQuery.initLayers()
+  },
   methods: {
     // 寮�濮嬪垎鏋�
-    ToManagement () {
+    eventHanding () {
       eventBus.$emit('event-handling', {})
     },
     handleClickView (item) {
@@ -183,6 +196,23 @@
     },
     handleChange (val) {
       console.log(val)
+    },
+    mapClick () {
+      window.map.once('click', (e) => {
+        console.log(e)
+        // [-75.343, 39.984];
+
+        // var circle = turf.circle(center, radius, options)
+        // eslint-disable-next-line no-unreachable
+        this.bufferQuery.radius = this.radius.value
+        const lat = 32.26431369781494
+        const lng = 118.79283785820007
+        // this.bufferQuery.bufferQuery(e.latlng.lng, e.latlng.lat)
+        this.bufferQuery.bufferQuery(lng, lat)
+      })
+    },
+    toManagement () {
+
     }
   }
 }
diff --git a/src/components/base-page/enterprise-emergency/event-handling/BufferQuery.js b/src/components/base-page/enterprise-emergency/event-handling/BufferQuery.js
new file mode 100644
index 0000000..e3b5a41
--- /dev/null
+++ b/src/components/base-page/enterprise-emergency/event-handling/BufferQuery.js
@@ -0,0 +1,553 @@
+/**
+ * 缂撳啿鍖烘煡璇㈢被
+ */
+import * as turf from '@turf/turf'
+import $ from 'jquery'
+// import MapConfig from '@/map/conf/MapConfig'
+import zrbhq from '@assets/images/map-pages/buffer/1.png'
+import yjdw from '@assets/images/map-pages/buffer/2.png'
+import gadw from '@assets/images/map-pages/buffer/3.png'
+import yy from '@assets/images/map-pages/buffer/5.png'
+import st from '@assets/images/map-pages/buffer/7.png'
+import yjzy from '@assets/images/map-pages/buffer/8.png'
+import xfdw from '@assets/images/map-pages/buffer/10.png'
+import mgmb from '@assets/images/map-pages/buffer/15.png'
+const MapConfig = {
+
+}
+MapConfig.mapConfig = {}
+MapConfig.mapConfig.bufferQueryUrlProd = 'http://10.238.235.179:6240/geoserver/sewer/ows'
+class BufferQuery {
+  constructor (map, L) {
+    this.map = map
+    this.L = L
+    this.bufferLayer = null
+    this.resultLayer = null
+    this.resultMarkers = []
+    this.queryResults = []
+    this.radius = 10
+    this.currentRadius = null
+    this.bufferResultLayerArr = []
+    this.bufferQueryLayerArr = []
+    this.vueRef = null
+    this.currentX = null
+    this.currentY = null
+  }
+
+  setVueRef (vueRef) {
+    this.vueRef = vueRef
+  }
+
+  initLayers () {
+    // if (this.bufferLayer != null) {
+    this.bufferLayer = this.L.layerGroup().addTo(this.map)
+    // }
+    // if (this.resultLayer != null) {
+    this.resultLayer = this.L.layerGroup().addTo(this.map)
+    // }
+  }
+
+  drawCricleBuffer (center, radius) {
+    const circleLocation = new this.L.LatLng(center[1], center[0])
+    const circleOptions = {
+      color: '#3effed',
+      fillColor: 'white',
+      fillOpacity: 0,
+      extendedIconClass: 'extend-icon' /* there are 3 classes defined in the marker-extend.css file */
+    }
+    const circle = new this.L.CircleEditor(circleLocation, radius * 1000, circleOptions)
+    return circle
+  }
+
+  getCircleCoord (center, radius) {
+    const options = { steps: 10, units: 'kilometers' }
+    const circle = turf.circle(center, radius, options)
+    const coordinate = turf.getCoords(circle)
+    return coordinate
+  }
+
+  QueryInfoByArcgis (url, dis, geom, extent, layers) {
+    const that = this
+    const data = {
+      f: 'json',
+      tolerance: dis,
+      returnGeometry: 'true',
+      returnFieldName: 'false',
+      returnUnformattedValues: 'false',
+      imageDisplay: '920,622,96',
+      geometry: geom,
+      geometryType: 'esriGeometryPolygon',
+      sr: '4326',
+      mapExtent: extent,
+      layers: layers
+    }
+    this.vueRef.datas = []
+    this.vueRef.allDatas = []
+    this.vueRef.currentX = this.currentX
+    this.vueRef.currentY = this.currentY
+    this.vueRef.total = 0
+    this.vueRef.total1 = 0
+    this.vueRef.countsMap = {}
+    this._postQuery(url, data, function (res) {
+      console.log(res)
+      if (res.results != null && res.results.length !== 0) {
+        that.drawGraphic(res.results)
+        for (let i = 0; i < res.results.length; i++) {
+          const ndata = {
+            layerId: res.results[i].layerId,
+            layerName: res.results[i].layerName,
+            displayFieldName: res.results[i].displayFieldName,
+            value: res.results[i].value,
+            attributes: res.results[i].attributes,
+            geometryType: res.results[i].geometryType,
+            geometry: res.results[i].geometry,
+            feature: {
+              attributes: res.results[i].attributes,
+              geometry: res.results[i].geometry
+            }
+          }
+          that.queryResults.push(ndata)
+        }
+        // fillBufferResult(nrltData,currShowBufferLayerIndex);//濉厖闈㈡澘
+        that.fillBufferResultPanel(that.queryResults)
+      }
+    })
+  }
+
+  QueryInfoByGeoserver (url, dis, geom, extent, layers) {
+    const that = this
+    const data = {
+      service: 'WFS',
+      version: '1.1.0',
+      request: 'GetFeature',
+      // typeName: 'sewer:manhole',
+      typeName: 'sewer:pipeline',
+      maxFeatures: 50,
+      outputFormat: 'application/json',
+      srsname: 'EPSG:4326',
+      // filter: '<Filter xmlns="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">\n' +
+      //   '<Intersects><PropertyName>geom</PropertyName><gml:Polygon srsName="EPSG:4326">\n' +
+      //   '<gml:outerBoundaryIs>\n' +
+      //   '    <gml:LinearRing>\n' +
+      // eslint-disable-next-line no-irregular-whitespace
+      //   '銆�<gml:coordinates>' + geom + '</gml:coordinates>\n' +
+      //   '</gml:LinearRing>\n' +
+      //   '</gml:outerBoundaryIs>\n' +
+      //   '</gml:Polygon></Intersects></Filter>\n'
+
+      /* filter: '<Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">\n' +
+        '\n' +
+        '<Intersects> \n' +
+        '\n' +
+        '<PropertyName>geom</PropertyName>\n' +
+        '\n' +
+        '<gml:MultiPolygon srsName="EPSG:4490"> \n' +
+        '\n' +
+        '<gml:polygonMember> \n' +
+        '\n' +
+        '<gml:Polygon> \n' +
+        '\n' +
+        '<gml:outerBoundaryIs> \n' +
+        '\n' +
+        '<gml:LinearRing>\n' +
+        '\n' +
+        '<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts="">\n' +
+        '\n' +
+        geom +
+        '\n' +
+        '</gml:coordinates>  \n' +
+        '\n' +
+        '</gml:LinearRing>  \n' +
+        '\n' +
+        '</gml:outerBoundaryIs>  \n' +
+        '\n' +
+        '</gml:Polygon>  \n' +
+        '\n' +
+        '</gml:polygonMember>  \n' +
+        '\n' +
+        '</gml:MultiPolygon>\n' +
+        '\n' +
+        '</Intersects>\n' +
+        '\n' +
+        '</Filter>' */
+
+      cql_filter: 'INTERSECTS(geom,POLYGON((' + geom + ')))'
+    }
+    // this.vueRef.datas = []
+    // this.vueRef.allDatas = []
+    // this.vueRef.currentX = this.currentX
+    // this.vueRef.currentY = this.currentY
+    // this.vueRef.total = 0
+    // this.vueRef.total1 = 0
+    // this.vueRef.countsMap = {}
+    this._postQuery(url, data, function (res) {
+      console.log(res)
+      if (res.results != null && res.results.length !== 0) {
+        that.drawGraphic(res.results)
+        for (let i = 0; i < res.results.length; i++) {
+          const ndata = {
+            layerId: res.results[i].layerId,
+            layerName: res.results[i].layerName,
+            displayFieldName: res.results[i].displayFieldName,
+            value: res.results[i].value,
+            attributes: res.results[i].attributes,
+            geometryType: res.results[i].geometryType,
+            geometry: res.results[i].geometry,
+            feature: {
+              attributes: res.results[i].attributes,
+              geometry: res.results[i].geometry
+            }
+          }
+          that.queryResults.push(ndata)
+        }
+        // fillBufferResult(nrltData,currShowBufferLayerIndex);//濉厖闈㈡澘
+        that.fillBufferResultPanel(that.queryResults)
+      }
+    })
+  }
+
+  fillBufferResultPanel (datas) {
+    // let resArray = []
+    const that = this
+    const layerIds = []
+    for (let j = 0; j < this.bufferQueryLayerArr.length; j++) {
+      if (this.bufferQueryLayerArr[j].ifSelected) {
+        layerIds.push(this.bufferQueryLayerArr[j].layerid)
+      }
+    }
+    const ndatas = []
+    for (let i = 0; i < datas.length; i++) {
+      if (datas[i].layerId === layerIds[0]) {
+        const newObj = {}
+        newObj.id = i
+        if (Number(datas[i].layerId) === 10) {
+          newObj.objid = datas[i].feature.attributes.id
+          newObj.name = datas[i].feature.attributes.name
+        } else {
+          newObj.objid = datas[i].feature.attributes.OBJECTID
+          newObj.name = datas[i].value
+        }
+
+        newObj.distance = this.countDisByLatLng(datas[i].feature.geometry.x, datas[i].feature.geometry.y, this.currentX, this.currentY)
+        newObj.x = datas[i].feature.geometry.x
+        newObj.y = datas[i].feature.geometry.y
+        switch (datas[i].layerId) {
+          case 5:
+          case 3:
+          case 8:
+            newObj.addr = datas[i].feature.attributes['鍗曚綅鍦板潃'] === 'Null' ? '' : datas[i].feature.attributes['鍗曚綅鍦板潃']
+            newObj.person = datas[i].feature.attributes['鑱旂郴浜�'] === 'Null' ? '' : datas[i].feature.attributes['鑱旂郴浜�']
+            newObj.tel = datas[i].feature.attributes['鑱旂郴鐢佃瘽'] === 'Null' ? '' : datas[i].feature.attributes['鑱旂郴鐢佃瘽']
+            break
+          case 10:
+            newObj.addr = datas[i].feature.attributes.name
+            newObj.person = datas[i].feature.attributes.contact
+            newObj.tel = datas[i].feature.attributes.officeTel
+            break
+          case 9:
+          case 15:
+            newObj.addr = ''
+            newObj.person = datas[i].feature.attributes['璐熻矗浜�'] === 'Null' ? '' : datas[i].feature.attributes['璐熻矗浜�']
+            newObj.tel = datas[i].feature.attributes['鑱旂郴鐢佃瘽'] === 'Null' ? '' : datas[i].feature.attributes['鑱旂郴鐢佃瘽']
+            break
+          case 7:
+            newObj.addr = ''
+            newObj.person = ''
+            newObj.tel = datas[i].feature.attributes['鑱旂郴鏂瑰紡'] === 'Null' ? '' : datas[i].feature.attributes['鑱旂郴鏂瑰紡']
+            break
+          case 1:
+            newObj.addr = ''
+            newObj.person = datas[i].feature.attributes['璐熻矗浜�'] === 'Null' ? '' : datas[i].feature.attributes['璐熻矗浜�']
+            newObj.tel = datas[i].feature.attributes['鑱旂郴鐢佃瘽'] === 'Null' ? '' : datas[i].feature.attributes['鑱旂郴鐢佃瘽']
+            break
+        }
+        ndatas.push(newObj)
+      }
+    }
+    this.vueRef.datas = ndatas
+    this.vueRef.allDatas = datas
+    this.vueRef.currentX = this.currentX
+    this.vueRef.currentY = this.currentY
+    this.vueRef.total = datas.length
+    this.vueRef.total1 = ndatas.length
+    const Map = {}
+    for (let k = 0; k < layerIds.length; k++) {
+      const id = layerIds[k]
+      Map[id] = that.getCountByLayerID(datas, layerIds[k])
+    }
+    this.vueRef.countsMap = Map
+  }
+
+  /**
+     *鏍规嵁涓ょ偣缁忕含搴﹁绠楄窛绂�
+     * @param lng1
+     * @param lat1
+     * @param lng2
+     * @param lat2
+     */
+  countDisByLatLng (lng1, lat1, lng2, lat2) {
+    const a = this.Rad(lat1) - this.Rad(lat2)
+    const b = this.Rad(lng1) - this.Rad(lng2)
+    let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
+            Math.cos(this.Rad(lat1)) * Math.cos(this.Rad(lat2)) * Math.pow(Math.sin(b / 2), 2)))
+    s = s * 6378137.0
+    s = Math.round(s * 10000) / 10000000
+    return s.toFixed(3)
+  }
+
+  Rad (d) {
+    return d * Math.PI / 180.0
+  }
+
+  /**
+     * 鏍规嵁鍥惧眰id 鑾峰彇 鍚勪釜鍥惧眰鏌ヨ缁撴灉鐨勬暟閲�
+     * @param arrs
+     * @param id
+     */
+  getCountByLayerID (arrs, id) {
+    let count = 0
+    for (let i = 0; i < arrs.length; i++) {
+      if (arrs[i].layerId === id) {
+        count++
+      }
+    }
+    return count
+  }
+
+  _postQuery (url, data, cb) {
+    $.ajax({
+      type: 'GET',
+      url: url,
+      dataType: 'json',
+      data: data,
+      timeout: 600000,
+      async: true,
+      success: function (datas) {
+        cb(datas)
+      },
+      error: function (e) {
+        console.log('杩斿洖鐨勯敊璇俊鎭細', e)
+        return null
+      }
+    })
+  }
+
+  drawGraphic (data) {
+    for (let i = 0; i < data.length; i++) {
+      const pt = [data[i].geometry.y, data[i].geometry.x]
+      const iconUrl = this.getIconUrl(data[i].layerId)
+      const icon = new this.L.Icon({ iconUrl: iconUrl, iconSize: [20, 20], iconAnchor: [10, 10] })
+      const marker = this.L.marker(pt, {
+        icon: icon,
+        attributes: data[i]
+      })
+      this.markerBindPopup(marker)
+      this.resultMarkers.push(marker)
+      this.resultLayer.addLayer(marker)
+    }
+  }
+
+  markerBindPopup (maker) {
+    const name = maker.options.attributes.value
+    const layerId = maker.options.attributes.layerId
+    let addr = ''
+    let person = ''
+    let tel = ''
+    const distance = this.countDisByLatLng(maker.options.attributes.geometry.x, maker.options.attributes.geometry.y, this.currentX, this.currentY)
+    switch (layerId) {
+      case 5:
+      case 3:
+      case 8:
+        addr = maker.options.attributes.attributes['鍗曚綅鍦板潃'] === 'Null' ? '' : maker.options.attributes.attributes['鍗曚綅鍦板潃']
+        person = maker.options.attributes.attributes['鑱旂郴浜�'] === 'Null' ? '' : maker.options.attributes.attributes['鑱旂郴浜�']
+        tel = maker.options.attributes.attributes['鑱旂郴鐢佃瘽'] === 'Null' ? '' : maker.options.attributes.attributes['鑱旂郴鐢佃瘽']
+        break
+      case 10:
+        addr = maker.options.attributes.attributes.name
+        person = maker.options.attributes.attributes.contact
+        tel = maker.options.attributes.attributes.officeTel
+        break
+      case 9:
+      case 15:
+        addr = ''
+        person = maker.options.attributes.attributes['璐熻矗浜�'] === 'Null' ? '' : maker.options.attributes.attributes['璐熻矗浜�']
+        tel = maker.options.attributes.attributes['鑱旂郴鐢佃瘽'] === 'Null' ? '' : maker.options.attributes.attributes['鑱旂郴鐢佃瘽']
+        break
+      case 7:
+        addr = ''
+        person = ''
+        tel = maker.options.attributes.attributes['鑱旂郴鏂瑰紡'] === 'Null' ? '' : maker.options.attributes.attributes['鑱旂郴鏂瑰紡']
+        break
+      case 1:
+        addr = ''
+        person = maker.options.attributes.attributes['璐熻矗浜�'] === 'Null' ? '' : maker.options.attributes.attributes['璐熻矗浜�']
+        tel = maker.options.attributes.attributes['鑱旂郴鐢佃瘽'] === 'Null' ? '' : maker.options.attributes.attributes['鑱旂郴鐢佃瘽']
+        break
+    }
+
+    const html = '<div style="width: 306px; height: 156px" class="aroundPanel">' +
+                   '<div class="header">鍛ㄨ竟鐜</div>' +
+                   '<table width="100%"   border="0" align="center" cellpadding="0" cellspacing="0"  class="editform edit-pf bg1 pd1" style="color: #deebf9;line-height: 26px;">\n' +
+            '      <tr>\n' +
+            '        <td width="10%" align="right" valign="top" class="zt05">鍚嶇О锛�</td>\n' +
+            '        <td width="19%" align="left" valign="top" class="zt05" id="name">' + name + '</td>\n' +
+            '      </tr>\n' +
+            '      <tr>\n' +
+            '        <td align="right" valign="top" class="zt05">鍦板潃锛�</td>\n' +
+            '        <td align="left" valign="top" class="zt05" id="addr">' + addr + '</td>\n' +
+            '      </tr>\n' +
+            '      <tr>\n' +
+            '        <td align="right" valign="top" class="zt05">璐熻矗浜猴細</td>\n' +
+            '        <td align="left" valign="top" class="zt05" id="person">' + person + '</td>\n' +
+            '      </tr>\n' +
+            '      <tr>\n' +
+            '        <td align="right" valign="top" class="zt05">鑱旂郴鐢佃瘽锛�</td>\n' +
+            '        <td align="left" valign="top" class="zt05" id="tel">' + tel + '</td>\n' +
+            '    </tr>\n' +
+            '      <tr>\n' +
+            '        <td align="right" valign="top" class="zt05 line-dotted">璺濈锛堝叕閲岋級锛�</td>\n' +
+            '        <td align="left" valign="top" class="zt05 line-dotted" id="distance">' + distance + '</td>\n' +
+            '      </tr>\n' +
+            '    </table>' +
+                   '</div>'
+    maker.bindPopup(html, {
+      closeButton: false,
+      offset: this.L.point(0, -0.5)
+    })
+  }
+
+  getIconUrl (index) {
+    let url = null
+    switch (index) {
+      case 1:
+        url = zrbhq
+        break
+      case 2:
+        url = yjdw
+        break
+      case 3:
+        url = gadw
+        break
+      case 5:
+        url = yy
+        break
+      case 7:
+        url = st
+        break
+      case 8:
+        url = yjzy
+        break
+      case 10:
+        url = xfdw
+        break
+      case 15:
+        url = mgmb
+        break
+    }
+    return url
+  }
+
+  bufferQuery (currEventX, currEventY) {
+    this.currentX = currEventX
+    this.currentY = currEventY
+    const that = this
+    if (this.bufferLayer) {
+      this.bufferLayer.clearLayers()
+    }
+    this.map.setView(this.L.latLng(currEventY, currEventX), 11)
+    const circle = this.drawCricleBuffer([currEventX, currEventY], this.radius)
+    this.bufferLayer.addLayer(circle)
+    circle.on('edit', function () {
+      that.doBuffer(circle.getRadius() / 1000, that.bufferQueryLayerArr, that.currentX, that.currentY)
+      that.currentRadius = circle.getRadius() / 1000
+    })
+    this.doBuffer(this.radius, this.bufferQueryLayerArr, currEventX, currEventY)
+  }
+
+  doBuffer (radius, bufferQueryLayerArr, currEventX, currEventY) {
+    this.bufferResultLayerArr = this.getBufferLayerArr(bufferQueryLayerArr)
+    this.bufferSearch(this.bufferResultLayerArr, radius, currEventX, currEventY)
+  }
+
+  getBufferLayerArr (arr) {
+    var resultArr = []
+    for (let i = 0; i < arr.length; i++) {
+      const obj = arr[i]
+      if (obj.ifSelected === 1) {
+        resultArr.push(obj.layerid)
+      }
+    }
+    return resultArr
+  }
+
+  bufferSearch (layerIDs, radius, currEventX, currEventY) {
+    const that = this
+    that.resultMarker = []
+    that.queryResults = []
+    if (that.resultLayer) {
+      that.resultLayer.clearLayers()
+    }
+    // if (layerIDs == null || layerIDs.length === 0) {
+    //   return null
+    // }
+    const xfIndex = layerIDs.indexOf(10)
+    if (xfIndex > -1) {
+    }
+    let queryLayerStr = 'all:'
+    for (let j = 0; j < layerIDs.length; j++) {
+      if (layerIDs[j] !== 10) {
+        queryLayerStr += layerIDs[j] + ','
+      }
+    }
+    queryLayerStr = queryLayerStr.substring(0, queryLayerStr.length - 1)
+    const coord = that.getCircleCoord([currEventX, currEventY], radius)
+    const str = that.sgisTransfromToArcGeom(coord)
+    debugger
+    const bounds = this.map.getBounds()
+    const extent = bounds.toBBoxString()
+    debugger
+    if (window.vm.$nodeEnv === 'production') {
+      that.QueryInfoByGeoserver(MapConfig.mapConfig.bufferQueryUrlProd, radius, str, extent, queryLayerStr)
+      // that.QueryInfoByArcgis(MapConfig.mapConfig.bufferQueryUrlProd, radius, str, extent, queryLayerStr)
+    } else {
+      that.QueryInfoByGeoserver(MapConfig.mapConfig.bufferQueryUrlProd, radius, str, extent, queryLayerStr)
+      // that.QueryInfoByArcgis(MapConfig.mapConfig.bufferQueryUrlProd, radius, str, extent, queryLayerStr)
+    }
+  }
+
+  sgisTransfromToArcGeom (coord) {
+    const geomStr = ''
+    let str = ''
+    for (let i = 0; i < coord[0].length; i++) {
+      str += coord[0][i][0] + ' ' + coord[0][i][1] + ','
+    }
+    str = str.substring(0, str.length - 1)
+    const endStr = geomStr + str
+    return endStr
+  }
+
+  /* sgisTransfromToArcGeom (coord) {
+    const geomStr = '{"rings":[['
+    let str = ''
+    for (let i = 0; i < coord[0].length; i++) {
+      str += '[' + coord[0][i][0] + ',' + coord[0][i][1] + '],'
+    }
+    str = str.substring(0, str.length - 1)
+    const endStr = geomStr + str + ']]}'
+    return endStr
+  } */
+  setBufferQueryLayerArr (bufferQueryLayerArr) {
+    this.bufferQueryLayerArr = bufferQueryLayerArr
+  }
+
+  cleanLayer () {
+    if (this.bufferLayer) {
+      this.bufferLayer.clearLayers()
+    }
+    if (this.resultLayer) {
+      this.resultLayer.clearLayers()
+    }
+    this.map.closePopup()
+  }
+}
+export default BufferQuery
diff --git a/src/components/base-page/enterprise-emergency/event-handling/EventHandling.vue b/src/components/base-page/enterprise-emergency/event-handling/EventHandling.vue
index a4ec6ef..b0d39c3 100644
--- a/src/components/base-page/enterprise-emergency/event-handling/EventHandling.vue
+++ b/src/components/base-page/enterprise-emergency/event-handling/EventHandling.vue
@@ -15,7 +15,7 @@
       <el-button type="primary" size="mini" @click="toggleShowCalc">浜嬫晠姘磋绠�</el-button>
       <el-button type="primary" size="mini" @click="toggleShowResInfo">鍛ㄨ竟璧勬簮</el-button>
       <el-button type="primary" size="mini" @click="toggleShowReportDoc">鐢熸垚鎶ュ憡</el-button>
-      <el-button type="primary" size="mini" @click="close">杩斿洖</el-button>
+<!--      <el-button type="primary" size="mini" @click="close">杩斿洖</el-button>-->
     </div>
 
     <effective-volume-calc ref="effectVolCalc"></effective-volume-calc>
@@ -75,6 +75,10 @@
 }
 </script>
 
-<style scoped>
+<style lang="less" scoped>
+.footer{
+  text-align: right;
+  margin: 15px;
+}
 
 </style>
diff --git a/src/components/plugin/L.CircleEditor.js b/src/components/plugin/L.CircleEditor.js
new file mode 100644
index 0000000..c7d9d17
--- /dev/null
+++ b/src/components/plugin/L.CircleEditor.js
@@ -0,0 +1,216 @@
+/*
+ * L.CircleEditor is an extension of L.Circle, just to add the edition part (remember, radius in meters).
+ */
+'use strict'
+/* eslint-disable */
+import dragPng  from '../../assets/images/map-pages/buffer/area_query_drag.png'
+// const init = (L) => {
+    L.CircleEditor = L.Circle.extend ({
+
+        options: {
+            icon: new L.Icon({
+                iconUrl: dragPng,
+                iconSize: [30,30],
+                //className: 'leaflet-div-icon leaflet-editing-icon'
+            }),
+            extendedIconClass : 'extend-icon'
+        },
+
+        onAdd: function (map) {
+            L.Path.prototype.onAdd.call(this, map);
+
+            this.addHooks();
+        },
+
+        onRemove: function (map) {
+            this.removeHooks();
+
+            L.Path.prototype.onRemove.call(this, map);
+        },
+
+
+        addHooks: function () {
+            if (this._map) {
+                if (!this._markerGroup) {
+                    this._initMarkers();
+                }
+                this._map.addLayer(this._markerGroup);
+            }
+        },
+
+        removeHooks: function () {
+            if (this._map) {
+                this._map.removeLayer(this._markerGroup);
+                delete this._markerGroup;
+                delete this._markers;
+            }
+        },
+
+        updateMarkers: function () {
+            this._markerGroup.clearLayers();
+            this._initMarkers();
+        },
+
+        _initMarkers: function () {
+            this._markerGroup = new L.LayerGroup();
+            this._markers = [];
+
+            var markerCenter = this._createMarker(this._latlng, 0, true);
+            this._markers.push(markerCenter);
+
+            var circleBounds = this.getBounds(),
+                center = circleBounds.getCenter(),
+                neCoord = circleBounds.getNorthEast(),
+                northCenterCoord = new L.LatLng(center.lat, neCoord.lng, true);
+            var markerNorthCenter = this._createMarker(northCenterCoord, 1);
+            this._markers.push(markerNorthCenter);
+
+            //xinzeng label
+            var newNeCoord =  Number(neCoord.lng.toFixed(6))+Number(0.006030);
+            var labelCenterCood = new L.LatLng(center.lat,newNeCoord, true);
+            var markerLabel = this._createLableMaker(labelCenterCood,2,this.getRadius())
+            this._markers.push(markerLabel);
+        },
+
+        _createLableMaker:function(latlng,index,radius){
+            var html = parseInt(radius/1000) + "Km";
+            var icon = new L.DivIcon({
+                html:html,
+                iconSize: new L.Point(30, 15),
+                className: 'customLabel'
+            });
+            var marker = new L.Marker(latlng, {
+                // draggable: true,
+                icon: icon
+            });
+            marker._origLatLng = latlng;
+            marker._index = index;
+            // marker._isCenter = isCenter;
+            this._markerGroup.addLayer(marker);
+            return marker;
+        },
+
+        _createMarker: function (latlng, index, isCenter) {
+            if(isCenter){
+                var marker = new L.Marker(latlng, {
+                    draggable: true,
+                    icon: this.options.icon,
+                    opacity	:0
+                });
+            }else{
+                var marker = new L.Marker(latlng, {
+                    draggable: true,
+                    icon: this.options.icon
+                });
+            }
+
+
+            if (isCenter === undefined) {
+                isCenter = false;
+            }
+            //console.log("this is center point: " + isCenter);
+
+            marker._origLatLng = latlng;
+            marker._index = index;
+            marker._isCenter = isCenter;
+
+            if (isCenter) {
+                //marker.on('drag', this._onCenterMove, this)
+                //     .on('dragend', this._onCenterMoveEnd, this);
+            } else {
+                marker.on('drag', this._onMarkerDrag, this);
+                marker.on('dragend', this._fireEdit, this)
+                    .on('mouseover', this._onMouseOver, this)
+                    .on('mouseout', this._onMouseOut, this);
+            }
+
+
+            this._markerGroup.addLayer(marker);
+
+            return marker;
+        },
+        _onMouseOver: function (e) {
+            var target = e.target,
+                icon = target._icon,
+                classValues = icon.getAttribute("class");
+            //icon.setAttribute("class", "extend-icon " + classValues);
+            icon.setAttribute("class", this.options.extendedIconClass + " " + classValues);
+        },
+        _onMouseOut: function (e) {
+            var target = e.target,
+                icon = target._icon,
+                classValues = icon.getAttribute("class");
+            //icon.setAttribute("class", classValues.replace("extend-icon", ""));
+            icon.setAttribute("class", classValues.replace(this.options.extendedIconClass, ""));
+        },
+
+        _fireEdit: function () {
+            this.fire('edit');
+        },
+
+        _onCenterMove: function (e) {
+            var marker = e.target;
+            //console.log("center move - START");
+
+            L.Util.extend(marker._origLatLng, marker._latlng);
+
+            var mm = this._markers[1];
+            mm.setOpacity(0.1);
+
+            this.redraw();
+
+            //console.log("END");
+        },
+
+        _onCenterMoveEnd: function (e) {
+            var marker = e.target;
+
+            //now resetting the side point
+            var circleBounds = this.getBounds(),
+                center = circleBounds.getCenter(),
+                neCoord = circleBounds.getNorthEast(),
+                northCenterCoord = new L.LatLng(center.lat, neCoord.lng, true);
+
+            var mm = this._markers[1];
+            mm.setLatLng(northCenterCoord);
+            mm.setOpacity(1);
+
+            this.fire('centerchange');
+        },
+
+        _onMarkerDrag: function (e) {
+            var marker = e.target;
+            //console.log("marker drag - START");
+            var center = this._markers[0].getLatLng();
+            var axis = marker._latlng;
+
+            var distance = center.distanceTo(axis);
+
+            this.setRadius(distance);
+
+            this.redraw();
+            //console.log("END");
+
+            this.fire('radiuschange');
+
+
+            this._markerGroup.removeLayer(this._markers[2]);
+            this._markers.pop();
+
+            var circleBounds = this.getBounds(),
+                center = circleBounds.getCenter(),
+                neCoord = circleBounds.getNorthEast();
+            var newNeCoord =  Number(neCoord.lng.toFixed(6))+Number(0.011010);
+            var labelCenterCood1 = new L.LatLng(center.lat,newNeCoord, true);
+            var markerLabel1 = this._createLableMaker(labelCenterCood1,2,this.getRadius())
+            this._markers.push(markerLabel1);
+        },
+
+        centerchange: function() {},
+        radiuschange: function() {}
+    });
+// }
+//
+// export default {
+//     init
+// }

--
Gitblit v1.8.0