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/controls/overview/OverviewControl.js |  357 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 357 insertions(+), 0 deletions(-)

diff --git a/public/map/controls/overview/OverviewControl.js b/public/map/controls/overview/OverviewControl.js
new file mode 100644
index 0000000..1801d00
--- /dev/null
+++ b/public/map/controls/overview/OverviewControl.js
@@ -0,0 +1,357 @@
+/**
+ * 鹰眼视图widget
+ * @author Liuyl
+ * @date 2015/10/9
+ */
+define([
+	"dojo/_base/declare",
+	"base/BaseControl",
+	"dojo/_base/array",
+	"dojo/_base/lang",
+	"dojo/dom",
+	"dojo/dom-class",
+	"dojo/dom-style",
+	"dojo/topic",
+	"dojo/aspect",
+	"dojo/on",
+	"dojo/text!controls/overview/OverviewControl.html",
+	"esri/map",
+	"esri/graphic",
+	"esri/Color",
+	"esri/geometry/Polygon",
+	"esri/symbols/SimpleFillSymbol",
+	"esri/symbols/SimpleLineSymbol",
+	"esri/layers/GraphicsLayer",
+	"esri/toolbars/edit",
+	"esri/graphicsUtils",
+	"utils/LayerUtil",
+	"controls/overview/config",
+	"base/AppEvent"
+], function(
+	declare,
+	BaseControl,
+	arrayUtil,
+	lang,
+	dom,
+	domClass,
+	domStyle,
+	topic,
+	aspect,
+	on,
+	template,
+	Map,
+	Graphic,
+	Color,
+	Polygon,
+	SimpleFillSymbol,
+	SimpleLineSymbol,
+	GraphicsLayer,
+	Edit,
+	graphicsUtils,
+	LayerUtil,
+	config,
+	AppEvent) {
+	var Widget = declare([BaseControl], {
+
+		templateString: template,
+		defaultOptions: {
+			rate: 2.5,
+			base_class: "overview-default-base-class",
+			fill_color: [135, 206, 250, 0.3],
+			border_color: [135, 206, 250, 1]
+		},
+		/**
+		 * GroupLayers的配置
+		 */
+		grouplayersConfig: null,
+		/**
+		 * 当前显示的GroupLayer的Id
+		 */
+		visibleGroupLayerId: "",
+
+		/**
+		 * 根据图层配置信息转换成实例化后的图层结果对象
+		 */
+		_parseResult: null,
+
+		/**
+		 * options
+		 */
+		constructor: function(options) {
+			/**
+			 * 确保实例化时传入图层组配置参数和该鹰眼初始显示的图层组Id
+			 */
+			if (!options || !options.grouplayersConfig || !options.visibleGroupLayerId) {
+				throw {
+					message: "初始化参数不完整,应指定grouplayersConfig和visibleGroupLayerId参数"
+				};
+			}
+			declare.safeMixin(this, options);
+			//$.extend(true, config, this.defaultOptions, options);
+			//this.map = config.basemap;
+			//			dojo.create("link", {
+			//					href: require.toUrl("widgets/overview/") + 'OverviewWidget.css',
+			//					type: 'text/css',
+			//					rel: 'stylesheet'
+			//				},
+			//				document.getElementsByTagName('head')[0]);
+			//this.MAP_DOM_ID = srcRefNode + this.MAP_DOM_ID;
+			this.base_class = "overview-default-base-class";
+			//this.map = config.basemap;
+			this._myMap = null;
+			this._layer1 = null;
+			this._layer2 = null;
+			this._graphic1 = null;
+			this._graphic2 = null;
+		},
+		startup: function() {
+			this.inherited(arguments);
+			this._init();
+			AppEvent.addAppEventListener(AppEvent.SWITCH_BASEMAP, lang.hitch(this, this.onSwitchBaseMap));
+		},
+		postCreate: function() {
+			this.inherited(arguments);
+		},
+		_init: function() {
+			if (this.myMapNode.id == "") {
+				this.myMapNode.id = uuid();
+			}
+
+			//初始化自己的地图
+			this._myMap = new Map(this.myMapNode.id, {
+				logo: false,
+				slider: false
+			});
+			//this._myMap = map;
+			//禁用鹰眼地图的所有用户导航方式
+			this._myMap.on("load", lang.hitch(this, function(map) {
+				this._myMap.disableMapNavigation();
+				this._myMap.hideZoomSlider();
+			}));
+
+			//var _cs = domStyle.getComputedStyle(this.mapNode);
+			//根据配置添加图层
+			this._addLayer();
+			this._initGraphic();
+			var resizeTimer;
+			clearTimeout(resizeTimer);
+			resizeTimer = setTimeout(lang.hitch(this, function() {
+				this._myMap.resize();
+				this._myMap.reposition();
+
+			}), 500);
+		},
+		_addLayer: function() {
+			//仅显示baselayer即可,去掉baselayer的displaylevel限制,让其在所有显示级别都可以显示
+			this._parseResult = LayerUtil.parseGroups(this.grouplayersConfig);
+			var groups = this._parseResult.groups;
+			for (var key in groups) {
+				var layer;
+				var visible = (key == this.visibleGroupLayerId);
+				if(visible == false){
+					continue;
+				}
+				if(groups[key].baselayers==null){
+					groups[key].baselayers=LayerUtil.parseLayers(groups[key].baselayersConfig);
+				}
+				for (var i = 0; i < groups[key].baselayers.length; i++) {
+					layer = groups[key].baselayers[i];
+					layer.visible = visible;
+					if (layer.setDisplayLevels) {
+						layer.setDisplayLevels(null);
+					}
+					this._myMap.addLayer(layer);
+				}
+			}
+		},
+		onSwitchBaseMap: function(evt) {
+			if (evt.hockId != this.hockId || !evt.grouplayer)
+				return;
+			if (this.visibleGroupLayerId == evt.grouplayer) {
+				return;
+			} else {
+				//先隐藏原来的图层
+				var grouplayer = this._parseResult.groups[this.visibleGroupLayerId];
+				for (var key in grouplayer.baselayers) {
+					var layer = grouplayer.baselayers[key];
+					//layer.setVisibility(false);
+					this._myMap.removeLayer(layer);
+				}
+
+				//再显示需要展示的图层
+				var grouplayer = null;
+				for (var key in this._parseResult.groups) {
+					if (key == evt.grouplayer) {
+						var grouplayer = this._parseResult.groups[key];
+						if(grouplayer.baselayers == null){
+							grouplayer.baselayers=LayerUtil.parseLayers(grouplayer.baselayersConfig);
+						}
+						for (var index in grouplayer.baselayers) {
+							var layer = grouplayer.baselayers[index];
+							//layer.setVisibility(true);
+							this._myMap.addLayer(layer);
+						}
+					}
+				}
+				this.visibleGroupLayerId = evt.grouplayer;
+			}
+		},
+		_initGraphic: function() {
+			var _symbol = new SimpleFillSymbol()
+				.setStyle(SimpleFillSymbol.STYLE_SOLID)
+				.setColor(new Color(config.fill_color))
+				.setOutline(new SimpleLineSymbol().setColor(new Color(config.border_color)).setWidth(0.5));
+			this._layer1 = new GraphicsLayer({
+				id: "rect1"
+			});
+			this._layer2 = new GraphicsLayer({
+				id: "rect2"
+			});
+			this._myMap.addLayer(this._layer1);
+			this._myMap.addLayer(this._layer2);
+			this._graphic1 = new Graphic(Polygon.fromExtent(this.map.extent), _symbol);
+			this._graphic2 = new Graphic(Polygon.fromExtent(this.map.extent), _symbol);
+			this._layer1.add(this._graphic1);
+			this._layer2.add(this._graphic2);
+			var _startMapPoint = null;
+			var _basemapExtent = null;
+
+
+			this.map.on("mouse-drag-start", lang.hitch(this, function(evt) {
+				_startMapPoint = evt.mapPoint;
+				_basemapExtent = this.map.extent;
+			}));
+			this.map.on("mouse-drag", lang.hitch(this, function(evt) {
+				var _curMapPoint = evt.mapPoint;
+
+				var _deltaX = _curMapPoint.x - _startMapPoint.x;
+				var _deltaY = _curMapPoint.y - _startMapPoint.y;
+				var _basemapCenter = _basemapExtent.getCenter();
+				_basemapCenter.x -= _deltaX;
+				_basemapCenter.y -= _deltaY;
+				_newExtent = _basemapExtent.centerAt(_basemapCenter);
+				var _newPolygon = Polygon.fromExtent(_newExtent);
+				this._graphic2.setGeometry(_newPolygon);
+				this._layer2.redraw();
+			}));
+
+			this.map.on("extent-change", lang.hitch(this, function(evt) {
+				var _newPolygon = Polygon.fromExtent(evt.extent);
+				var _extent = new esri.geometry.Extent(evt.extent);
+				var _deltaX = (_extent.xmax - _extent.xmin) / 2.0 * (config.rate - 1);
+				var _deltaY = (_extent.ymax - _extent.ymin) / 2.0 * (config.rate - 1);
+				_extent.xmin -= _deltaX;
+				_extent.xmax += _deltaX;
+				_extent.ymin -= _deltaY;
+				_extent.ymax += _deltaY;
+				this._myMap.setExtent(_extent).then(lang.hitch(this, function() {
+					this._redrawRect(_newPolygon);
+				}));
+				//主地图缩放时让矩形框具有动态效果
+				this.map.on("zoom", lang.hitch(this, function(evt) {
+					try {
+						var _curZoomLevel = evt.level;
+						var _newPolygon = Polygon.fromExtent(evt.extent);
+						this._redrawRect(_newPolygon);
+					} catch (err) {
+						console.log(err);
+					}
+
+				}));
+			}));
+			this._initEditing();
+
+		},
+		_redrawRect: function(polygon) {
+			this._graphic2.setGeometry(polygon);
+			this._layer2.redraw();
+			this._graphic1.setGeometry(polygon);
+			this._layer1.redraw();
+		},
+		_initEditing: function() {
+			var editToolBar = new Edit(this._myMap);
+			editToolBar.activate(Edit.MOVE, this._graphic2);
+			editToolBar.on("graphic-move-stop", lang.hitch(this, function(g, t) {
+				var _newCenter = graphicsUtils.graphicsExtent([g.graphic]).getCenter();
+				this.map.centerAt(_newCenter);
+			}));
+		},
+		_toggle: function() {
+			require(["dojo/_base/fx", "dojo/dom", "dojo/domReady!"], lang.hitch(this, function(baseFx, dom) {
+				var _prop = null;
+				//				var _cs = domStyle.getComputedStyle(this.mapNode);
+				//				var _width = -parseInt(_cs.width.substr(0, _cs.width.length - 2));
+				//				var _height = -parseInt(_cs.height.substr(0, _cs.height.length - 2));
+				if (domClass.contains(this.toggleNode, "overview-toggle-show")) {
+					//由于控件初始化后无法设置成正确的显示范围
+					//故在显示鹰眼前手动触发一次basemap的extent-change事件以重新设置鹰眼地图的显示范围
+					domStyle.set(this._myMap.container, "height", domStyle.get(this.mapNode, "height") + "px");
+					this._myMap.resize();
+					this.map.centerAt(this.map.extent.getCenter());
+					domStyle.set(this.mapNode, "display", "block");
+					_prop = {
+						//						right: {
+						//							start: _width,
+						//							end: '0',
+						//							units: 'px'
+						//						},
+						//						bottom: {
+						//							start: _height,
+						//							end: '0',
+						//							units: 'px'
+						//						},
+						opacity: {
+							start: 0,
+							end: 1
+						}
+					}
+					baseFx.animateProperty({
+						node: this.mapNode,
+						properties: _prop,
+						duration: 1000
+					}).play();
+					domClass.remove(this.toggleNode, "overview-toggle-show");
+					domClass.add(this.toggleNode, "overview-toggle-hide");
+				} else {
+
+					_prop = {
+						//						right: {
+						//							end: _width,
+						//							units: 'px'
+						//						},
+						//						bottom: {
+						//							end: _height,
+						//							units: 'px'
+						//						},
+						opacity: {
+							start: 1,
+							end: 0
+						}
+					}
+
+					var anim = baseFx.animateProperty({
+						node: this.mapNode,
+						properties: _prop,
+						duration: 1000
+					});
+					aspect.after(anim, "onEnd", lang.hitch(this, function() {
+						domStyle.set(this.mapNode, "display", "none");
+					}, true));
+					anim.play();
+					domClass.remove(this.toggleNode, "overview-toggle-hide");
+					domClass.add(this.toggleNode, "overview-toggle-show");
+				}
+
+			}));
+		},
+		destroy: function() {
+			this.inherited(arguments);
+			var layerIds = this._myMap.layerIds;
+			for (var index in layerIds) {
+				this._myMap.removeLayer(this._myMap.getLayer(layerIds[index]));
+			}
+		}
+
+	});
+	return Widget;
+});
\ No newline at end of file

--
Gitblit v1.9.3