From c6796cb12ca7aa0717349ca185ece091acdd2bbc Mon Sep 17 00:00:00 2001
From: liuyg <376836862@qq.com>
Date: Tue, 20 Apr 2021 15:32:01 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.105:10010/r/jfpt-Vue
---
public/map/widgets/securityMap/SecurityMap.js | 551 ++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 389 insertions(+), 162 deletions(-)
diff --git a/public/map/widgets/securityMap/SecurityMap.js b/public/map/widgets/securityMap/SecurityMap.js
index 17d7985..00dd42c 100644
--- a/public/map/widgets/securityMap/SecurityMap.js
+++ b/public/map/widgets/securityMap/SecurityMap.js
@@ -3,18 +3,18 @@
* @Version: 1.0
* @Author: yangsx
* @Date: 2019-12-09 19:01:40
- * @LastEditors: song
- * @LastEditTime: 2021-02-25 13:59:29
+ * @LastEditors: yangsx
+ * @LastEditTime: 2019-12-14 14:44:57
*/
define([
"dojo",
"dojo/_base/declare",
"dojo/_base/lang",
"base/BaseWidget",
- "dojo/text!widgets/SecurityMap/template.html",
+ "dojo/text!widgets/securityMap/template.html",
"base/AppEvent",
"base/ConfigData",
- "widgets/realTimePolice/config",
+ "widgets/securityMap/config",
"dojo/dom",
"dojo/dom-construct",
"dojo/dom-attr",
@@ -31,8 +31,12 @@
"esri/tasks/query",
"esri/tasks/QueryTask",
"esri/Color",
+ "esri/toolbars/edit",
"esri/graphic",
"esri/geometry/Point",
+ "esri/geometry/Polyline",
+ "esri/geometry/Polygon",
+ "esri/geometry/Extent",
"esri/tasks/FeatureSet",
"esri/renderers/HeatmapRenderer",
"esri/symbols/SimpleLineSymbol",
@@ -55,9 +59,8 @@
"esri/layers/ImageParameters",
"esri/geometry/geometryEngine",
"esri/dijit/PopupTemplate",
- "widgets/SecurityMap/FlareClusterLayer_v3",
- "dojo/domReady!",
- "widgets/realTimePolice/LayUIDataTable"
+ "widgets/securityMap/FlareClusterLayer_v3",
+ "dojo/domReady!"
], function(
dojo,
declare,
@@ -83,8 +86,12 @@
Query,
QueryTask,
Color,
+ Edit,
Graphic,
Point,
+ Polyline,
+ Polygon,
+ Extent,
FeatureSet,
HeatmapRenderer,
SimpleLineSymbol,
@@ -112,11 +119,9 @@
var Widget = declare([BaseWidget], {
widgetName: "SecurityMap",
label: "处警队伍管理",
-
templateString: template,
_map: null,
objThis: null,
- // 现场图层
_siteLayer: new GraphicsLayer(),
layuiLayer: null,
layuiLadate: null,
@@ -126,25 +131,18 @@
addEntitys: null,
entitysData: [],
- // 是否派发保安的 文字
- treatmentIndex: null,
- securityFlag: false,
- editParentInd: null,
-
- // 存储新增点,线,面,数据的地方
- polygonData: [],
- polygonFlag: false,
- editToolbar: null,
- addPolygonEntitys: null,
-
- // 所有的面图层
- entityPolygonAll: null,
// 用来存储区域名称
globalRegionName: null,
// 用来区域得最大最小经纬度
currentDrawing: [],
+
+ // 存储新增点,线,面,数据的地方
+ polygonData: [],
+ polygonFlag: false,
+ editToolbar: null,
+ addPolygonEntitys: null,
// 巡逻区域或者巡逻路线的描述
routeOrRegionDescribe: null,
@@ -158,200 +156,429 @@
y: 0,
offset: null,
moveThis: null,
+
// 电子围栏需要新增的Id
newElectronicFenceId: null,
// 新增路线时,派发人员,人员名称,以及人员id
- peopleRealName: null,
- pepleRealId: null,
+ anumber: null,
+ realname: null,
+ //存放聚合实体
+ clusterLayer: null,
constructor: function(options, srcRefNode) {
- debugger;
- console.log("option=" + options);
this._map = options.map;
objThis = this;
-
- this.addEntitys = new GraphicsLayer({ id: 'addEntitys' });
+ this.addEntitys = new GraphicsLayer({
+ id: 'addEntitys'
+ });
// 添加点面线的图层
- this.addPolygonEntitys = new GraphicsLayer({ id: 'addPolygonEntitys' });
+ this.addPolygonEntitys = new GraphicsLayer({
+ id: 'addPolygonEntitys'
+ });
+
// 添加所有图层的地方
- this.entityPolygonAll = new GraphicsLayer({ id: 'entityPolygonAll' });
+ this.entityPolygonAll = new GraphicsLayer({
+ id: 'entityPolygonAll'
+ });
this._map.addLayer(this.addEntitys);
-
-
this._map.addLayer(this.addPolygonEntitys);
this._map.addLayer(this.entityPolygonAll);
-
},
-
startup: function() {
objThis._map.addLayer(objThis._siteLayer);
+ },
+
+ //根据key 取value值
+ getQueryStringByKey: function(key) {
+ return (document.location.search.match(new RegExp("(?:^\\?|&)" + key + "=(.*?)(?=&|$)")) || ['', null])[1];
+ },
+
+ //带有中文的解码
+ getQueryString: function(name) {
+ var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
+ var r = window.location.search.substr(1).match(reg);
+ if (r != null) return decodeURI(r[2]);
+ return null;
+ },
+
+ //页面打开后,获取参数数据
+ open: function() {
var that = this;
- // 保安出警管理表格中点击事件
- $('.police-dispatching .police-container .police-container-policeforce .table .tbody tbody').off('click', 'input').on('click', 'input', function(event) {
- event.stopPropagation();
- var lgtd = Number($(this).parent().parent().attr('lgtd'));
- var lttd = Number($(this).parent().parent().attr('lttd'));
- var position = new esri.geometry.Point(lgtd, lttd, new esri.SpatialReference({ wkid: 4326 })); //根据输入坐标信息找地图上的点
- that.newElectronicFenceId = null;
- that._map.centerAndZoom(position, 18); //缩放,10是缩放级别,可以自定义,数值越大缩放越大
- var graphic = that.entityPolygonAll.graphics;
- for (var i = 0; i < graphic.length; i++) {
- if (graphic[i].objId.id == $(this).attr('resultid')) {
- if (graphic[i].geometry.rings[0].length > 0) {
- that.polygonFlag = false;
- that.electronicFence();
- that.activateToolbar(graphic[i]);
+ var lgtd = that.getQueryStringByKey('jd');
+ var lttd = that.getQueryStringByKey('wd');
+ if (lgtd == null || lgtd == "") {
+ return;
+ }
+ anumber = that.getQueryStringByKey('code');
+ realname = that.getQueryString('name');
+ //所在位置标记
+ that.addPoint(that.addEntitys, lgtd, lttd, './images/security.png');
+ //获取当前处警员的电子围栏信息
+ $.ajax({
+ //https://web.byisf.com/api/blade-jfpts/enclosure/enclosure/selectEnclosureDetail
+ url: 'http://localhost:89/enclosure/enclosure/selectEnclosureDetail',
+ type: 'GET',
+ dataType: 'JSON',
+ data: {
+ anumber: anumber
+ },
+ success: function(result) {
+ //如果已有电子围栏信息,展示出围栏区域,并且可以编辑
+ if (result.code == 200) {
+ if (JSON.stringify(result.data) != "{}") {
+ var entityArr = [];
+ var coordinate = result.data.coordinate.match(/\(([^)]*)\)/).toString();
+ var a = coordinate.indexOf("(");
+ var b = coordinate.indexOf(")");
+ coordinate = coordinate.substring(a + 1, b) + "";
+ if (coordinate && coordinate != '') {
+ coordinate = coordinate.split(',');
+ for (var i = 0; i < coordinate.length; i++) {
+ entityArr.push([Number(coordinate[i].split(' ')[0]), Number(coordinate[i].split(' ')[1])]);
+ }
+ }
+ that.addPolygon(that.addPolygonEntitys, entityArr);
} else {
+ //如果无电子围栏信息,则提示请编辑电子围栏信息
+ //编辑好电子围栏信息后,将当前处警员的电子围栏信息保存到数据库
+ that.newElectronicFenceId = null;
+
layui.use('layer', function() {
layui.layer.msg('请开始划分电子围栏');
})
that.polygonFlag = true;
- that.newElectronicFenceId = graphic[i].objId;
+ that.newElectronicFenceId = anumber;
}
+
}
}
})
- $('.police-dispatching .police-container .police-container-policeforce .table .tbody tbody').off('click', 'tr').on('click', 'tr', function(event) {
- event.stopPropagation();
- var lgtd = Number($(this).attr('lgtd'));
- var lttd = Number($(this).attr('lttd'));
- var position = new esri.geometry.Point(lgtd, lttd, new esri.SpatialReference({ wkid: 4326 })); //根据输入坐标信息找地图上的点
+ //调用点击事件
+ that.clickHand();
- that._map.centerAndZoom(position, 18); //缩放,10是缩放级别,可以自定义,数值越大缩放越大
-
- var snumber = $(this).attr('term-snumber');
-
- var url = './popup/html/personnel-information-management.html?id=' + code;
- layui.use('layer', function() {
- that.layuiLayer = layui.layer;
- that.layuiLayer.config({
- extend: 'myskin/personnel-information-management.css'
- });
- that.layuiLayer.close(that.layuiLayer.index);
- that.layuiLayer.open({
- title: '保安人员信息',
- type: 2,
- shadeClose: true,
- shade: false,
- maxmin: false, //开启最大化最小化按钮
- area: ['400px', '220px'],
- offset: 'auto',
- skin: 'personnel-information-management',
- content: url,
- closeBtn: 1,
- });
- })
- })
- },
-
-
- open: function() {
- var that = this;
- debugger;
- $.ajax({
- url: '/api/blade-jfpts/alarm/alarm/listAll?',
- type: 'get',
- dataType: 'JSON',
- success: function(data) {
- var datas = data.data;
- for (var i = 0; i < datas.length; i++) {
- datas[i].x = Number(datas[i].jd);
- datas[i].y = Number(datas[i].wd);
+ //鼠标右击事件
+ document.getElementById('mainMapWidget').onmousedown = function(event) {
+ if (event.button == 2) {
+ if (that.polygonData.length < 2) {
+ layui.use('layer', function() {
+ layui.layer.msg('不能形成区域,请继续划分!!!')
+ })
+ return;
}
- debugger;
- that.flareClusterLayer(datas);
+ if (that.polygonFlag == true) {
+ // 勾画最后一个点
+ var normalizedVal = webMercatorUtils.xyToLngLat(event.mapPoint.x, event.mapPoint.y);
+ that.polygonData.push([normalizedVal[0], normalizedVal[1]]);
+ // 声明空字符串,存储数据
+ var dataStr = '';
+ var data = null;
+ if (that.patrolIndex == 1) {
+ that.addPolyline(that.addPolygonEntitys, that.polygonData);
+ // 获取数据
+ data = that.addPolygonEntitys.graphics[0].geometry.paths[0];
+ } else {
+ that.addPolygon(that.addPolygonEntitys, that.polygonData);
+ // 获取数据
+ data = that.addPolygonEntitys.graphics[0].geometry.rings[0];
+ }
+
+ // 组装数据
+ for (var i = 0; i < data.length; i++) {
+ dataStr += (data[i][0] + ' ' + data[i][1] + ',');
+ }
+ dataStr = dataStr.substring(0, dataStr.length - 1);
+
+ //将数据存入数据库
+ $.ajax({
+ //url: 'https://web.byisf.com/api/blade-jfpts/enclosure/enclosure/updatee',
+ url: 'http://localhost:89/enclosure/enclosure/insertes',
+ type: 'POST',
+ dataType: 'JSON',
+ data: {
+ aname: realname,
+ anumber: anumber,
+ routeInfo: dataStr
+ },
+ success: function(result) {
+ if (result.code == 200) {}
+ }
+ })
+ }
+ that.polygonFlag = false;
+
}
- });
-
- },
-
-
- close: function() {
-
+ }
},
// 鼠标点击事件
- clickHand: function() {},
+ clickHand: function() {
- //聚合图层事件
- flareClusterLayer: function(datas) {
- debugger;
+ var self = this;
+ self._map.onClick = mapClick;
- var that = this;
+ function mapClick(evt) {
+ debugger;
+ var normalizedVal = webMercatorUtils.xyToLngLat(evt.mapPoint.x, evt.mapPoint.y);
+ var y = self._map.toMap({
+ spatialReference: '4326',
+ type: "point",
+ x: evt.screenPoint.x,
+ y: evt.screenPoint.y,
+ });
- var preClustered = false;
- var displaySingleFlaresAtCount = 10;
- var areaDisplayMode = "";
- // var allData = JSON.parse(DATA);
- // DataManager.setData(allData);
- //init the layer, more options are available and explained in the cluster layer constructor
- that.clusterLayer = new FlareClusterLayer({
- id: "flare-cluster-layer",
- spatialReference: new esri.SpatialReference({ "wkid": 4326 }),
- subTypeFlareProperty: "facilityType",
- singleFlareTooltipProperty: "name",
- displaySubTypeFlares: true,
- displaySingleFlaresAtCount: displaySingleFlaresAtCount,
- flareShowMode: "mouse",
- preClustered: preClustered,
- clusterRatio: 75,
- clusterAreaDisplay: areaDisplayMode,
- clusteringBegin: function() {
- console.log("clustering begin");
- },
- clusteringComplete: function() {
- console.log("clustering complete");
+ // 编辑中的
+ if (self.polygonFlag == true) {
+ if (self.polygonData.length == 0) {
+ self.polygonData.push([normalizedVal[0], normalizedVal[1]]);
+ self.addPoint(self.addPolygonEntitys, normalizedVal[0], normalizedVal[1]);
+ } else if (self.polygonData.length == 1) {
+ self.polygonData.push([normalizedVal[0], normalizedVal[1]]);
+ self.addPolyline(self.addPolygonEntitys, self.polygonData);
+ return;
+ } else if (self.polygonData.length > 1) {
+ self.polygonData.push([normalizedVal[0], normalizedVal[1]]);
+ self.addPolygon(self.addPolygonEntitys, self.polygonData);
+ }
+
+ } else { // 不在编辑中
+ if (evt.graphic) { // 点击在图形上
+ // 保存当前点击得图形
+ // self.currentDrawing = evt.graphic;
+
+ self.modifyPolygon();
+
+ self.activateToolbar(evt.graphic);
+ } else { // 点击不在图形上
+
+ self.modifyPolygon()
+ }
+ }
+
+ }
+
+ // 提示信息
+ $(document).off('mousemove').mousemove(function(e) {
+ var y = e.clientY + 10;
+ var x = e.clientX + 20;
+
+ if (e.clientX < 40) {
+ var x = 40;
+ }
+
+ if (e.clientY < 42) {
+ y = 42;
+ }
+
+ if (e.clientY > ($(window).height() - 82)) {
+ y = ($(window).height() - 66);
+ }
+
+ if (e.clientX > ($(window).width() - 184)) {
+ x = ($(window).width() - 184);
+ }
+
+ if (self.tabIndex == 1 || self.tabIndex == 2) {
+
+ if (self.polygonFlag == true) {
+ $('.police-dispatching .tips').stop().show();
+
+ if (self.polygonData.length == 0) {
+ $('.police-dispatching .tips').text('单击左键开始绘制。');
+ } else {
+ if (e.clientY > ($(window).height() - 98)) {
+ y = ($(window).height() - 88);
+ }
+ $('.police-dispatching .tips').text('单击左键新增加点。单击右键完成绘制。');
+ }
+
+ $('.police-dispatching .tips').css({
+ 'top': y,
+ 'left': x,
+ })
+ } else {
+ $('.police-dispatching .tips').stop().hide();
+ }
+
+ } else {
+ $('.police-dispatching .tips').stop().hide();
+ }
+ })
+ },
+
+ //新增线
+ addPolyline: function(entitys, path) {
+ entitys.clear();
+ var polylineSymbol = new SimpleLineSymbol();
+ polylineSymbol.color = [255, 0, 0, 1];
+ polylineSymbol.width = 4;
+ var polyline = new Polyline({
+ "paths": [path],
+ "spatialReference": {
+ "wkid": 4326
}
});
- //set up a class breaks renderer to render different symbols based on the cluster count. Use the required clusterCount property to break on.
- var defaultSym = new PictureMarkerSymbol("./images/ceshi.png", 32, 32).setOffset(0, 15);
- var renderer = new ClassBreaksRenderer(defaultSym, "clusterCount");
- var xlSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 32, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new dojo.Color([200, 52, 59, 0.8]), 1), new dojo.Color([250, 65, 74, 0.8]));
- var lgSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 28, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new dojo.Color([41, 163, 41, 0.8]), 1), new dojo.Color([51, 204, 51, 0.8]));
- var mdSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 24, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new dojo.Color([82, 163, 204, 0.8]), 1), new dojo.Color([102, 204, 255, 0.8]));
- var smSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 22, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new dojo.Color([230, 184, 92, 0.8]), 1), new dojo.Color([255, 204, 102, 0.8]));
- renderer.addBreak(0, 19, smSymbol);
- renderer.addBreak(20, 150, mdSymbol);
- renderer.addBreak(151, 1000, lgSymbol);
- renderer.addBreak(1001, Infinity, xlSymbol);
+ entitys.add(new Graphic(polyline, polylineSymbol));
+ },
- that.clusterLayer.setRenderer(renderer); //use standard setRenderer.
- //set up a popup template
- var template = new PopupTemplate({
- title: "{name}",
- fieldInfos: [
- { fieldName: "facilityType", label: "Facility Type", visible: true },
- { fieldName: "postcode", label: "Post Code", visible: true },
- { fieldName: "isOpen", label: "Opening Hours", visible: true }
- ]
- });
+ //编辑电子围栏(多边形)
+ modifyPolygon: function() {
+ var self = this;
+ if (self.editToolbar != null) {
+ //获取当前的多边形数据
+ var polygon = self.editToolbar.getCurrentState();
- //clusterLayer.infoTemplate = template;
- that._map.infoWindow.titleInBody = false;
+ //释放编辑后
+ self.editToolbar.deactivate();
- that._map.addLayer(that.clusterLayer);
+ self.editToolbar = null;
- //var data = DataManager.getData();
- that.clusterLayer.addData(datas);
+ // 声明空字符串,存储数据
+ var dataStr = '';
+
+ // 获取数据
+ var data = polygon.graphic.geometry.rings[0];
+
+ // 组装数据
+ for (var i = 0; i < data.length; i++) {
+ dataStr += (data[i][0] + ' ' + data[i][1] + ',');
+ }
+ dataStr = dataStr.substring(0, dataStr.length - 1);
+
+ //更新电子围栏数据
+ $.ajax({
+ //url: 'https://web.byisf.com/api/blade-jfpts/enclosure/enclosure/updatee',
+ url: 'http://localhost:89/enclosure/enclosure/updatee',
+ type: 'POST',
+ dataType: 'JSON',
+ data: {
+ anumber: anumber,
+ routeInfo: dataStr
+ },
+ success: function(result) {
+ if (result.code == 200) {}
+ }
+ })
+
+ }
+ },
+
+
+ activateToolbar: function(graphic) {
+ var tool = 0;
+
+ this.editToolbar = new Edit(this._map);
+
+ // if (registry.byId("tool_move").checked) {
+ tool = tool | Edit.MOVE;
+ // }
+ // if (registry.byId("tool_vertices").checked) {
+ tool = tool | Edit.EDIT_VERTICES;
+ // }
+ // if (registry.byId("tool_scale").checked) {
+ tool = tool | Edit.SCALE;
+ // }
+ // if (registry.byId("tool_rotate").checked) {
+ tool = tool | Edit.ROTATE;
+ // }
+ // enable text editing if a graphic uses a text symbol
+ // if ( graphic.symbol.declaredClass === "esri.symbol.TextSymbol" ) {
+ tool = tool | Edit.EDIT_TEXT;
+ // }
+
+ var options = {
+ allowAddVertices: true,
+ allowDeleteVertices: true,
+ uniformScaling: true
+ };
+ this.editToolbar.activate(tool, graphic, options);
},
- clearLayer: function() {
- var that = this;
- that._map.removeLayer(that.clusterLayer);
- that.clusterLayer = null;
- }
+ close: function() {},
+
+ // 获取当前时间,以及昨天现在的时间
+ getTime: function getTime() {
+ var timestamp = Date.parse(new Date());
+
+ // 当前时间
+ var currentTime = new Date(timestamp);
+ // 年
+ var currentY = currentTime.getFullYear();
+ // 月
+ var currentM = currentTime.getMonth() + 1 < 10 ? '0' + (currentTime.getMonth() + 1) : currentTime.getMonth() + 1;
+ // 日
+ var currentD = currentTime.getDate() < 10 ? '0' + currentTime.getDate() : currentTime.getDate();
+ // 时
+ var currentH = currentTime.getHours() < 10 ? '0' + currentTime.getHours() : currentTime.getHours();
+ // 分
+ var currentDd = currentTime.getMinutes() < 10 ? '0' + currentTime.getMinutes() : currentTime.getMinutes();
+ // 明天
+ var tomorrowTime = new Date(timestamp - 60 * 60 * 24 * 1000);
+ // 年
+ var tomorrowY = tomorrowTime.getFullYear();
+ // 月
+ var tomorrowM = tomorrowTime.getMonth() + 1 < 10 ? '0' + (tomorrowTime.getMonth() + 1) : tomorrowTime.getMonth() + 1;
+ // 日
+ var tomorrowD = tomorrowTime.getDate() < 10 ? '0' + tomorrowTime.getDate() : tomorrowTime.getDate();
+ // 时
+ var tomorrowH = tomorrowTime.getHours() < 10 ? '0' + tomorrowTime.getHours() : tomorrowTime.getHours();
+ // 分
+ var tomorrowDd = tomorrowTime.getMinutes() < 10 ? '0' + tomorrowTime.getMinutes() : tomorrowTime.getMinutes();
+ return {
+ current: currentY + '-' + currentM + '-' + currentD + ' ' + currentH + ':' + currentDd,
+ tomorrow: tomorrowY + '-' + tomorrowM + '-' + tomorrowD + ' ' + tomorrowH + ':' + tomorrowDd,
+ month: currentM + currentD
+ };
+ },
+
+ // 创建实体图层
+ createEntitys: function(entitys, entityContent, name, item, lgtd, lttd, outlineColors) {
+
+ var symbol = new esri.symbol.PictureMarkerSymbol(outlineColors, 33, 48);
+ symbol.name = name;
+ var pt = new Point(lgtd, lttd, new esri.SpatialReference({
+ wkid: 4326
+ }));
+ pt.entityData = item;
+ var graphic = new esri.Graphic(pt, symbol);
+ entitys.add(graphic);
+ entityContent.push(item);
+ },
+
+ //在地图上新增点
+ addPoint: function(entitys, lgtd, lttd, img) {
+ var symbol = new esri.symbol.PictureMarkerSymbol(img, 22, 22);
+ var pt = new Point(lgtd, lttd, new SpatialReference({
+ wkid: 4326
+ }));
+ var graphic = new esri.Graphic(pt, symbol);
+ entitys.add(graphic);
+ },
+
+ //绘制多边形
+ addPolygon: function(entitys, rings) {
+ entitys.clear();
+ var polygonSymbol = new SimpleFillSymbol();
+ polygonSymbol.color = [24, 255, 243, 0.411];
+ var polygon = new Polygon({
+ "rings": [rings],
+ "spatialReference": {
+ "wkid": 4326
+ }
+ });
+ entitys.add(new Graphic(polygon, polygonSymbol));
+ }
});
return Widget;
--
Gitblit v1.9.3