From d74b495736f0c04522ec54274b70fed0ded2878d Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Tue, 27 Jun 2023 11:30:06 +0800
Subject: [PATCH] 任务新增导出

---
 public/map/widgets/map/MapWidget.js |  502 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 502 insertions(+), 0 deletions(-)

diff --git a/public/map/widgets/map/MapWidget.js b/public/map/widgets/map/MapWidget.js
new file mode 100644
index 0000000..9039070
--- /dev/null
+++ b/public/map/widgets/map/MapWidget.js
@@ -0,0 +1,502 @@
+define([
+    "dojo/_base/declare",
+    "dojo/_base/lang",
+    "dojo/_base/array",
+    "dojo/on",
+    "dojo/dom",
+    "dojo/dom-construct",
+    "base/BaseWidget",
+    "dojo/text!widgets/map/MapWidget.html",
+    "esri/map",
+    "base/ConfigData",
+    "base/utils/LayerUtil",
+    "controls/infowindow/InfoWindow",
+    "base/AppEvent",
+    "controls/toolbar/tools/BaseTool",
+    "dojo/aspect",
+    "esri/dijit/Scalebar",
+    "esri/layers/ArcGISDynamicMapServiceLayer",
+    "esri/layers/ArcGISTiledMapServiceLayer",
+    "esri/layers/WebTiledLayer",
+    "esri/geometry/Point",
+    "esri/SpatialReference",
+    "esri/tasks/query",
+    "esri/tasks/QueryTask",
+    "esri/geometry/Extent"
+], function (
+    declare,
+    lang,
+    arrayUtil,
+    on,
+    dom,
+    domConstruct,
+    BaseWidget,
+    template,
+    Map,
+    ConfigData,
+    LayerUtil,
+    InfoWindow,
+    AppEvent,
+    BaseTool,
+    aspect,
+    Scalebar,
+    ArcGISDynamicMapServiceLayer,
+    ArcGISTiledMapServiceLayer,
+    WebTiledLayer,
+    Point,
+    SpatialReference,
+    Query,
+    QueryTask,
+    Extent
+) {
+    var Widget = declare("MapWidget", [BaseWidget], {
+        templateString: template,
+        id: "",
+        widgetName: "MapWidget",
+        map: null,
+        _grplayerId2GroupLayers: null,
+        _currentVisibleGroupLayer: null,
+        _currentVisibleSetLayer: null,
+        _parseResult: null,
+        _layerIdsTable: {},
+        _controlIndex: {},
+        _eventHandlers: [],
+        _currentTool: null,
+        visibleGroupLayerId: null,
+        visibleLayerSetId: null,
+        /**
+         * 是否是自己的extent改变了,如果是,则向外派发MapWidget.EXTENT_CHANGE事件
+         */
+        _isSelfExtentChange: true,
+        constructor: function (option) {
+            this.inherited(arguments);
+            this.base_class = "mapwidget-base";
+            this._grplayerId2GroupLayers = null;
+            this._controlIndex = {};
+            this._eventHandlers = [];
+            this._isSelfExtentChange = true;
+            this._currentTool = null;
+            this._mostTopLayerIds = [];
+            AppEvent.addAppEventListener(AppEvent.APPEND_TOOL, lang.hitch(this, this.appendToolHandler));
+
+        },
+        startup: function () {
+            this.inherited(arguments);
+            //从全局配置解析地图相关的配置
+            this._parseResult = LayerUtil.parse(ConfigData.basemap);
+            //初始化InfoWindow
+            var infoWindowDom = domConstruct.create("div", {}, dom.byId(this.mapBoxDom.id));
+            var infoWindow = new InfoWindow({
+                domNode: infoWindowDom
+            });
+            this._getXZQ();
+            var extent = this._getStartExtent();
+            this.mapBoxDom.id = uuid();
+            this.map = new Map(this.mapBoxDom.id, {
+                logo: this._parseResult.maplogo,
+                showAttribution: true,
+                extent: extent,
+                maxZoom: 19,
+                minZoom: 0,
+                navigationMode: "classic"
+            });
+            this._eventHandlers.push(this.map.on("layer-add", lang.hitch(this, this._layerAddCallback)));
+            this._eventHandlers.push(this.map.on("layer-remove", lang.hitch(this, this._layerRemoveCallback)));
+            this._eventHandlers.push(this.map.on("load", lang.hitch(this, this.onload)));
+            if (this.visibleGroupLayerId) {
+                this._currentVisibleGroupLayer = this._parseResult.groups[this.visibleGroupLayerId];
+            } else {
+                this._currentVisibleGroupLayer = this._parseResult.groups[this._parseResult.curGroupId];
+            }
+            if (this.visibleLayerSetId) {
+                this._currentVisibleSetLayer = this._currentVisibleGroupLayer.layerset[this.visibleLayerSetId];
+            } else {
+                this._currentVisibleSetLayer = this._currentVisibleGroupLayer.layerset[this._currentVisibleGroupLayer.defaultset];
+            }
+
+            this._addLayer();
+            this._eventHandlers.push(this.map.on("extent-change", lang.hitch(this, this._onExtentChange)));
+            // this._eventHandlers.push(this.map.on("mouse-move", lang.hitch(this, this._onMouseMove)));
+            AppEvent.addAppEventListener(AppEvent.SWITCH_BASEMAP, lang.hitch(this, this.onSwitchBaseMap));
+            AppEvent.addAppEventListener(AppEvent.ADD_TOP_MOST_LAYER, lang.hitch(this, this.onAddTopMostLayer));
+        },
+        onload: function () {
+            AppEvent.dispatchAppEvent("mapLoad",this.map);
+            //var listNode = this.map.attribution.listNode;
+            var listNode = this.domNode;
+            var scalebar = new Scalebar({
+                map: this.map,
+                scalebarStyle: "line",
+                scalebarUnit: "metric"
+            });
+            //创建比例尺下显示坐标的dom节点
+            domConstruct.create("span", {
+                innerHTML: "<span id='LongLatitude'></span>",
+                style: "position: absolute; bottom: 4px; display: block; right: 10px; color: #000;"
+            }, listNode);
+            var fenpc = domConstruct.create("span", {
+                id: "fenping_colse",
+                class: "multidate_close",
+                innerHTML: "关闭分屏",
+            }, listNode);
+            on(fenpc, 'click', function () {
+                AppEvent.dispatchAppEvent(AppEvent.MULTIDATE);
+            });
+            var locationb = domConstruct.create("div", {
+                id: "init-location",
+                class: "init-location-button",
+                title: "初始位置",
+            }, listNode);
+            on(locationb, 'click', lang.hitch(this, function () {
+                var extent = new Extent({
+                    "xmin": 12881727,
+                    "ymin": 3326410,
+                    "xmax": 12918360,
+                    "ymax": 3344162,
+                    "spatialReference": { "wkid": 102100 }
+                });
+                this.map.setExtent(extent);
+            }));
+            var labelc = domConstruct.create("div", {
+                id: "label-control",
+                class: "label-control-button",
+                title: "标注控制",
+            }, listNode);
+            on(labelc, 'click', lang.hitch(this, function () {
+                var cva = this.map.getLayer('cva');
+                var cia = this.map.getLayer('cia');
+                if (cva) {
+                    if (cva.opacity == 0) {
+                        cva.opacity = 1;
+                    } else {
+                        cva.opacity = 0;
+                    }
+                    cva.refresh();
+                }
+                if (cia) {
+                    if (cia.opacity == 0) {
+                        cia.opacity = 1;
+                    } else {
+                        cia.opacity = 0;
+                    }
+                    cia.refresh();
+                }
+            }));
+
+            var magnifyButton = $('.esriSimpleSliderIncrementButton')[0];
+            on(magnifyButton, 'click', lang.hitch(this, function () {
+                //var layer1 = this.map.getLayer("sceneControl");
+                var layer2 = this.map.getLayer("noTextScene");
+                var flag;
+                var num = this.map.getZoom();
+                if (sessionStorage.getItem('flag')) {
+                    flag = sessionStorage.getItem('flag');
+                } else {
+                    flag = false;
+                }
+                if (flag == 'false') {
+                    flag = false;
+                } else if (flag == 'true') {
+                    flag = true;
+                }
+                num += 1;
+                if (flag) {
+                    if (num > 7) {
+                        //layer1.setVisibility(true);
+                        layer2.setVisibility(false);
+                    } else {
+                        layer2.setVisibility(true);
+                        //layer1.setVisibility(false);
+                    }
+                }
+            }))
+            var shrinkButton = $('.esriSimpleSliderDecrementButton')[0];
+            on(shrinkButton, 'click', lang.hitch(this, function () {
+                //var layer1 = this.map.getLayer("sceneControl");
+                var layer2 = this.map.getLayer("noTextScene");
+                var flag;
+                var num = this.map.getZoom();
+                if (sessionStorage.getItem('flag')) {
+                    flag = sessionStorage.getItem('flag');
+                } else {
+                    flag = false;
+                }
+                if (flag == 'false') {
+                    flag = false;
+                } else if (flag == 'true') {
+                    flag = true;
+                }
+                num -= 1;
+                if (flag) {
+                    if (num > 7) {
+                        //layer1.setVisibility(true);
+                        layer2.setVisibility(false);
+                    } else {
+                        layer2.setVisibility(true);
+                        //layer1.setVisibility(false);
+                    }
+                }
+            }))
+            
+            return this.map
+        },
+        appendToolHandler: function (data) {
+            if (data.hockId == this.id) {
+                aspect.after(data.tool, BaseTool.ACTIVATE_EVENT, lang.hitch(this, this.onToolActivateHandler));
+                aspect.after(data.tool, BaseTool.DEACTIVATE_EVENT, lang.hitch(this, this.onToolDeactivateHandler));
+                aspect.after(data.tool, BaseTool.SELFDEACTIVATE_EVENT, lang.hitch(this, this.onSelfToolDeactivateHandler));
+            }
+        },
+        onSelfToolDeactivateHandler: function (tool) {
+            this._currentTool = null;
+        },
+        onToolActivateHandler: function (tool) {
+            if (this._currentTool != null && tool != this._currentTool) {
+                this._currentTool.deactivate();
+            }
+            this._currentTool = tool;
+        },
+        onToolDeactivateHandler: function (tool) {
+            this._currentTool = null;
+        },
+        _onExtentChange: function (evt) {
+            if (this._isSelfExtentChange) {
+                this.onExtentChange(evt.extent);
+            } else {
+                this._isSelfExtentChange = true;
+            }
+        },
+        _onMouseMove: function (evt) {
+            dom.byId("LongLatitude").innerHTML = "经度:" + evt.mapPoint.x.toFixed(2) + "  纬度:" + evt.mapPoint.y.toFixed(2);
+        },
+        onExtentChange: function (obj) {
+            return obj;
+        },
+        setExtent: function (ext) {
+            this._isSelfExtentChange = false;
+            console.log(1234, ext);
+            this.map.setExtent(ext);
+        },
+        onAddTopMostLayer: function (evt) {
+            if (!this._mostTopLayerIds[evt.priority]) {
+                this._mostTopLayerIds[evt.priority] = [];
+            }
+            this._mostTopLayerIds[evt.priority].push(evt.layerId);
+
+        },
+        _addLayer: function () {
+            //先添加默认显示的图层
+
+            // var firstVisibleAGSLayerLoad = true; //是否是第一个加载到地图上的ArcGIS瓦片服务图层,以第一个该类型的图层Load完毕作为地图Load的事件派发出去
+            // if (this._currentVisibleGroupLayer != null) {
+                // var baselayers = this._currentVisibleGroupLayer.baselayers;
+                // if (baselayers == null) {
+                //     this._currentVisibleGroupLayer.baselayers = LayerUtil.parseLayers(this._currentVisibleGroupLayer.baselayersConfig);
+                //     baselayers = this._currentVisibleGroupLayer.baselayers;
+                // }
+                // //添加基础底图
+                // for (var i = 0; i < baselayers.length; i++) {
+                //     this.map.addLayer(baselayers[i]);
+                // }
+                var cycleMap = new WebTiledLayer("https://webmap-tile.sf-express.com/MapTileService/rt?x={col}&y={row}&z={level}", {
+                    "copyright": '顺丰地图',
+                    "id": "sasasa"
+                });
+                this.map.addLayer(cycleMap);
+
+                //this.map.centerAndZoom(new Point(115.806669,28.68635, new SpatialReference({ wkid: 4326 })), 14);
+
+
+                // //添加多时相图层
+                // var layerset = this._currentVisibleSetLayer;
+                // if (layerset.layers == null) {
+                //     layerset.layers = LayerUtil.parseLayers(layerset.layersConfig);
+                // }
+                // for (var k = 0; k < layerset.layers.length; k++) {
+                //     layerset.layers[k].visible = true;
+                //     this.map.addLayer(layerset.layers[k]);
+                // }
+            // }
+
+            // return;
+            // //再添加不显示的图层
+            // for (var key in this._parseResult.groups) {
+            //     if (key == this._parseResult.curGroupId) {
+            //         continue;
+            //     }
+            //     var baselayers = this._parseResult.groups[key].baselayers;
+            //     //添加基础底图
+            //     for (var i = 0; i < baselayers.length; i++) {
+            //         baselayers[i].visible = false;
+            //         this.map.addLayer(baselayers[i]);
+            //     }
+            //     var layerset = this._parseResult.groups[key].layerset;
+            //     //添加多时相图层
+            //     for (var j in layerset) {
+            //         var layervisible = false;
+            //         for (var k = 0; k < layerset[j].layers.length; k++) {
+            //             layerset[j].layers[k].visible = false;
+            //             this.map.addLayer(layerset[j].layers[k]);
+            //         }
+            //     }
+            // }
+        },
+        _layerAddCallback: function (evt) {
+            var _map = evt.layer.getMap();
+            if (this._layerIdsTable[evt.layer.id] == null) {
+                this._layerIdsTable[evt.layer.id] = evt.layer;
+            }
+            //把需要显示在最上层的图层移动到最上面
+            for (var key1 in this._mostTopLayerIds) {
+                var layers = this._mostTopLayerIds[key1];
+                for (var key2 in layers) {
+                    var layerId = layers[key2];
+                    var topLayer = this._layerIdsTable[layerId];
+                    if (!topLayer) {
+                        break;
+                    }
+                    this.map.reorderLayer(topLayer, this.map.layerIds.length - 1);
+                }
+            }
+        },
+        _layerRemoveCallback: function (evt) {
+            var layerId = evt.layer.id;
+            this._layerIdsTable[evt.layer.id] = null;
+            delete this._layerIdsTable[evt.layer.id];
+            //			for (var index in this._mostTopLayerIds) {
+            //				if (this._mostTopLayerIds[index] == layerId) {
+            //					this._mostTopLayerIds.splice(index, 1);
+            //					break;
+            //				}
+            //			}
+
+        },
+        _getStartExtent: function () {
+            return new Extent({
+                "xmin": Number(ConfigData.basemap.initExtent[0]),
+                "ymin": Number(ConfigData.basemap.initExtent[1]),
+                "xmax": Number(ConfigData.basemap.initExtent[2]),
+                "ymax": Number(ConfigData.basemap.initExtent[3]),
+                "spatialReference": {
+                    "wkid": Number(ConfigData.basemap.wkid)
+                }
+            });
+        },
+        /**
+         * 在该MapWidget上增加控件
+         * @return 增加的空间的Id
+         */
+        addControl: function (control) {
+            if (!control.id) {
+                control.id = uuid();
+            }
+            if (this._controlIndex[control.id])
+                return control.id;
+            domConstruct.place(control.domNode, this.container);
+            control.hockId = this.id;
+            control.map = this.map;
+            control.startup();
+            this._controlIndex[control.id] = control;
+            return control.id;
+        },
+        /**
+         * 根据controlId删除控件
+         */
+        removeControl: function (controlId) {
+            if (!this._controlIndex) {
+                return;
+            }
+            var removeControl = this._controlIndex[controlId];
+            //removeControl.destroy();
+            domConstruct.destroy(controlId);
+            removeControl = null;
+        },
+        onSwitchBaseMap: function (evt) {
+            if (evt.hockId != this.id)
+                return;
+            if (this._currentVisibleGroupLayer.id == evt.grouplayer && this._currentVisibleSetLayer.id == evt.setlayer) {
+                return;
+            }
+            var grouplayer = this._currentVisibleGroupLayer;
+            var layerset = this._currentVisibleSetLayer;
+            //---------------移除原来的图层----------------------------------
+            //如果Group变了,需要移除Group的底图,没变则不移除
+            if (evt.grouplayer) {
+                if (evt.grouplayer != this._currentVisibleGroupLayer.id) {
+                    for (var key in this._currentVisibleGroupLayer.baselayers) {
+                        var layer = this._currentVisibleGroupLayer.baselayers[key];
+                        this.map.removeLayer(layer);
+                    }
+                }
+                this._currentVisibleGroupLayer = this._parseResult.groups[evt.grouplayer];
+            }
+            //移除时间图层
+            for (var index in layerset.layers) {
+                var layer = layerset.layers[index];
+                this.map.removeLayer(layer);
+            }
+            if (evt.setlayer) {
+                this._currentVisibleSetLayer = this._currentVisibleGroupLayer.layerset[evt.setlayer];
+            } else {
+                //根据时间查找Group中的layerset是否有时间,没有的话设为默认
+                var layersetId = this._currentVisibleGroupLayer.defaultset;
+                for (var key in this._currentVisibleGroupLayer.layerset) {
+                    if (this._currentVisibleGroupLayer.layerset[key].label == this._currentVisibleSetLayer.label) {
+                        layersetId = key;
+                        break;
+                    }
+                }
+                this._currentVisibleSetLayer = this._currentVisibleGroupLayer.layerset[layersetId];
+            }
+
+            //----------------添加图层-------------------
+            grouplayer = this._currentVisibleGroupLayer;
+            layerset = this._currentVisibleSetLayer;
+            if (grouplayer.baselayers == null) {
+                grouplayer.baselayers = LayerUtil.parseLayers(grouplayer.baselayersConfig);
+            }
+            arrayUtil.forEach(grouplayer.baselayers, lang.hitch(this, function (layer, index) {
+                this.map.addLayer(layer, index);
+            }));
+            if (layerset.layers == null) {
+                layerset.layers = LayerUtil.parseLayers(layerset.layersConfig);
+            }
+            arrayUtil.forEach(layerset.layers, lang.hitch(this, function (layer, index) {
+                //layer.setVisibility(true);
+                this.map.addLayer(layer);
+            }));
+        },
+        destroy: function () {
+            for (var i in this._eventHandlers) {
+                this._eventHandlers[i].remove();
+            }
+            for (var i in this._controlIndex) {
+                if (this._controlIndex[i].destroyRecursive) {
+                    this._controlIndex[i].destroyRecursive();
+                }
+            }
+            if (this.map.destroyRecursive) {
+                this.map.destroyRecursive();
+            }
+            domConstruct.destroy(this.domNode.id);
+            this.inherited(arguments);
+        },
+        //查询行政区
+        _getXZQ: function () {
+            var queryTask = new QueryTask(ConfigData.XZQUrl);
+            var query = new Query();
+            query.returnGeometry = true;
+            query.outFields = ["*"];
+            query.orderByFields = ["CITY_GB"];
+            query.where = "1=1";
+            queryTask.execute(query, function (results) {
+                //              console.log(results);
+                ConfigData.XZQfeatures = results.features;
+            }, function (error) {
+                console.log(error);
+            });
+        },
+    });
+    Widget.EXTENT_CHANGE = "onExtentChange";
+    return Widget;
+});
\ No newline at end of file

--
Gitblit v1.9.3