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/core/manager/mapmanager.js | 350 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 350 insertions(+), 0 deletions(-)
diff --git a/public/map/core/manager/mapmanager.js b/public/map/core/manager/mapmanager.js
new file mode 100644
index 0000000..e023b96
--- /dev/null
+++ b/public/map/core/manager/mapmanager.js
@@ -0,0 +1,350 @@
+/**
+ * Created by Webyb on 2015/6/29.
+ * @description 管理地图的模块,所有的地图操作必须由该模块完成。
+ */
+define(["base/AppEvent",
+ "base/ConfigData",
+ "dojo/_base/declare",
+ "dojo/_base/lang",
+ "esri/map",
+ "dojo/aspect",
+ "widgets/map/MapWidget",
+ "dojo/dom-construct",
+ "dojo/dom-style",
+ "dojo/dom",
+ "dojo/on",
+ // "controls/mapswitch/MapSwitchControl",
+ "controls/overview/OverviewControl",
+ "controls/timeslider/TimeSliderControl",
+ "esri/geometry/Point",
+ "dojo/domReady!",
+ ],
+ function(AppEvent,
+ ConfigData,
+ declare,
+ lang,
+ Map,
+ aspect,
+ MapWidget,
+ domConstruct,
+ domStyle,
+ dom,
+ on,
+ // MapSwitchControl,
+ OverviewControl,
+ TimeSliderControl,
+ Point) {
+ return declare("MapManager", null, {
+ /**
+ * 地图容器Div的id
+ */
+ containerDiv: "mapcontentClass",
+ /**
+ * 主MapWidget的实际地图对象
+ */
+ _map: null,
+ _mainMapWidget: null,
+ _mapWidgets: [],
+ _bottomMapWidget: null,
+ _resizeTimer: null,
+ /**
+ * 附属地图的事件委托索引
+ */
+ _relateMapEventHandlerIndex: {},
+
+ otherMapWidget: null, //用于测试
+
+ constructor: function() {
+ var boundFunction = lang.hitch(this, this.onConfigLoaded);
+ AppEvent.addAppEventListener(AppEvent.CONFIG_LOADED, boundFunction);
+ //当窗体大小发生变化时,调用map对象的resize方法
+ AppEvent.addAppEventListener(AppEvent.APPLICATION_RESIZE, lang.hitch(this, this.onResizeHandler));
+ AppEvent.addAppEventListener(AppEvent.APPEND_MAPWIDGET, lang.hitch(this, this.appendMapWidgetHandler));
+ AppEvent.addAppEventListener(AppEvent.REMOVE_MAPWIDGET, lang.hitch(this, this.removeMapWidgetHandler));
+ },
+ onResizeHandler: function(evt) {
+ var mapWidgets = this._mapWidgets;
+ var bottomMapWidget = this._bottomMapWidget;
+ //开始重新计算各个地图的位置
+ // console.log("开始重新计算各个地图的位置");
+ var containerWidth = domStyle.get(dom.byId(this.containerDiv), "width");
+ var containerHeight = domStyle.get(dom.byId(this.containerDiv), "height");
+ // console.log("containerWidth:"+containerWidth+" ---- containerHeight:" + containerHeight);
+ if (mapWidgets.length == 0) {
+ return;
+ } else if (mapWidgets.length == 1) {
+ var mapWidget = mapWidgets[0];
+ domStyle.set(mapWidget.domNode, "position", "relative");
+ domStyle.set(mapWidget.domNode, "width", containerWidth + "px");
+ domStyle.set(mapWidget.domNode, "height", "100%");
+ domStyle.set(mapWidget.domNode, "float", "");
+ domStyle.set(mapWidget.domNode, "z-index", 1);
+ } else if (mapWidgets.length == 2) {
+ var leftMapWidget = mapWidgets[0];
+ var rightMapWidget = mapWidgets[1];
+ //设置左边地图位置
+ domStyle.set(leftMapWidget.domNode, "position", "relative");
+ domStyle.set(leftMapWidget.domNode, "float", "left");
+ domStyle.set(leftMapWidget.domNode, "width", containerWidth / 2 + "px");
+ domStyle.set(leftMapWidget.domNode, "height", "100%");
+ domStyle.set(leftMapWidget.domNode, "z-index", 1);
+ //设置右边地图位置
+ domStyle.set(rightMapWidget.domNode, "position", "relative");
+ domStyle.set(rightMapWidget.domNode, "float", "right");
+ domStyle.set(rightMapWidget.domNode, "width", (containerWidth / 2 - 1) + "px"); //留出边框的宽度
+ domStyle.set(rightMapWidget.domNode, "height", "100%");
+ domStyle.set(rightMapWidget.domNode, "border-left", "1px solid #87898A");
+ domStyle.set(rightMapWidget.domNode, "z-index", 1);
+ }
+ if (bottomMapWidget) {
+ domStyle.set(bottomMapWidget.domNode, "position", "absolute");
+ domStyle.set(bottomMapWidget.domNode, "width", containerWidth + "px");
+ domStyle.set(bottomMapWidget.domNode, "height", containerHeight + "px");
+ domStyle.set(bottomMapWidget.domNode, "float", "");
+ domStyle.set(bottomMapWidget.domNode, "top", "0px");
+ domStyle.set(bottomMapWidget.domNode, "left", "0px");
+ }
+ //执行各个地图的resize事件
+ if (this._resizeTimer) {
+ clearTimeout(this._resizeTimer);
+ }
+ this._resizeTimer = setTimeout(function() {
+ for (var i = 0; i < mapWidgets.length; i++) {
+ var mapWidget = mapWidgets[i];
+ if (mapWidget.map && mapWidget.map.loaded) {
+ mapWidget.map.resize();
+ mapWidget.map.reposition();
+ }
+ }
+ if (bottomMapWidget && bottomMapWidget.map && bottomMapWidget.map.loaded) {
+ bottomMapWidget.map.resize();
+ bottomMapWidget.map.reposition();
+ }
+
+ }, 500);
+ },
+ onConfigLoaded: function() {
+ this.createMainMapWidget();
+ },
+ /**
+ * 创建系统的主MapWidget对象
+ */
+ createMainMapWidget: function() {
+ _mainMapWidget = new MapWidget({
+ id: "mainMapWidget",
+ cssPath: "widgets/map/MapWidget.css"
+ });
+ ConfigData.mapWidgetId = "mainMapWidget";
+ AppEvent.dispatchAppEvent(AppEvent.APPEND_MAPWIDGET, {
+ mapwidget: _mainMapWidget,
+ relate: true
+ });
+ },
+ appendMapWidgetHandler: function(data) {
+ if (this._mapWidgets.length == 1) {
+ alert("系统中最多可展现1个地图,不能再增加地图。");
+ return;
+ }
+ var mapWidget = data.mapwidget;
+ //如果mapWidget没有ID,则随机生成一个
+ if (!mapWidget.id) {
+ mapWidget.id = uuid();
+ } else {
+ //防止添加两个一样的mapWidget
+ for (var i = 0; i < this._mapWidgets.length; i++) {
+ if (this._mapWidgets[i].id == mapWidget.id) {
+ alert("系统中已有一个ID为" + mapWidget.id + "的地图存在,故无法再次添加");
+ return;
+ }
+ }
+ if (this._bottomMapWidget && this._bottomMapWidget.id == mapWidget.id) {
+ alert("系统中已有一个ID为" + mapWidget.id + "的地图存在,故无法再次添加");
+ return;
+ }
+ }
+ if (data.type == "bottom") {
+ domConstruct.place(mapWidget.domNode, dom.byId(this.containerDiv), "first");
+ } else {
+ domConstruct.place(mapWidget.domNode, dom.byId(this.containerDiv));
+ }
+
+ if (this._mapWidgets.length == 0) {
+ //说明是主地图
+ aspect.after(mapWidget, "onload", lang.hitch(this, function(map) {
+ AppEvent.dispatchAppEvent(AppEvent.BASE_MAP_LAYER_LOADED, map);
+ }));
+ }
+ mapWidget.startup();
+ if (this._mapWidgets.length == 0) {
+// //说明是主地图
+// this._mainMapWidget = mapWidget;
+// this._map = this._mainMapWidget.map;
+// this._map.on("extent-change", lang.hitch(this, function(evt) {
+// //地图移动范围移动事件
+// //AppEvent.dispatchAppEvent(AppEvent.MAP_EXTENT_CHANGE, evt);
+// }));
+
+// //给主地图添加鹰眼、地图切换控件
+// var mapSwitchControl = new MapSwitchControl({
+// map: this._map,
+// cssPath: "controls/mapswitch/MapSwitchControl.css"
+// });
+// this._mainMapWidget.addControl(mapSwitchControl);
+
+// var overviewControl = new OverviewControl({
+// grouplayersConfig: ConfigData.basemap.grouplayers,
+// visibleGroupLayerId: "veclry",
+// cssPath: "controls/overview/OverviewControl.css"
+// });
+// this._mainMapWidget.addControl(overviewControl);
+
+// //添加对开启关闭事件的监听
+
+
+// var groupLayerId = null;
+// var setLayerId = null;
+
+// function onWidgetOpened(widgetArgs) {
+// //判断是否是多时相控件
+// // if (widgetArgs.name == "MultidateWidget") {
+// // timesliderControl.show();
+// // groupLayerId = this._mainMapWidget._currentVisibleGroupLayer.id;
+// // setLayerId = this._mainMapWidget._currentVisibleSetLayer.id;
+// // }
+
+// if (widgetArgs.name == "SwipeWidget") {
+// var widget = widgetArgs.instance;
+// widget.initMouseDragHandler(this._mainMapWidget);
+// this._mainMapWidget.map.setExtent(this._mainMapWidget.map.extent);
+// groupLayerId = this._mainMapWidget._currentVisibleGroupLayer.id;
+// // setLayerId = this._mainMapWidget._currentVisibleSetLayer.id;
+// }
+
+// }
+
+// function onWidgetClosed(widgetArgs) {
+// //多时相
+// // if (widgetArgs.name == "MultidateWidget") {
+// // timesliderControl.hide();
+// // AppEvent.dispatchAppEvent(AppEvent.SWITCH_BASEMAP,{
+// // hockId: this._mainMapWidget.id,
+// // grouplayer: groupLayerId,
+// // setlayer: setLayerId,
+// // sender:this._mainMapWidget.id
+// // });
+// // }
+
+// if (widgetArgs.name == "SwipeWidget") {
+// var widget = widgetArgs.instance;
+// widget.removeMouseDragHandler(this._mainMapWidget);
+// AppEvent.dispatchAppEvent(AppEvent.SWITCH_BASEMAP,{
+// hockId: this._mainMapWidget.id,
+// grouplayer: groupLayerId,
+// sender:this._mainMapWidget.id
+// });
+// }
+// }
+// AppEvent.addAppEventListener(AppEvent.WIDGET_OPENED, lang.hitch(this, onWidgetOpened));
+// AppEvent.addAppEventListener(AppEvent.WIDGET_CLOSED, lang.hitch(this, onWidgetClosed));
+
+// //绑定菜单
+// AppEvent.addAppEventListener(AppEvent.WIDGET_LOADED, lang.hitch(this, function(evt) {
+// if (evt.name == "MenuWidget") {
+// AppEvent.dispatchAppEvent(AppEvent.BIND_MENU, {
+// menuId: "mapMenu",
+// dom: this._mainMapWidget.domNode
+// });
+// }
+// }));
+// AppEvent.addAppEventListener(AppEvent.MENU_ITEM_CLICKED, lang.hitch(this, function(evt) {
+// if (evt.menuId == "mapMenu") {
+// if (evt.menuItemId == "zoomIn") {
+// this._mainMapWidget.map.setZoom(this._mainMapWidget.map.getZoom() + 1);
+// } else if (evt.menuItemId == "zoomOut") {
+// this._mainMapWidget.map.setZoom(this._mainMapWidget.map.getZoom() - 1);
+// }
+// else if(evt.menuItemId=="setStartPoint"||evt.menuItemId=="setEndPoint"){
+// _AppEvent.dispatchAppEvent(_AppEvent.RUN_WIDGET,"routeWidget");
+// _AppEvent.dispatchAppEvent("changeWidgets",{id:"routeWidget"});
+// AppEvent.dispatchAppEvent("routeSearch",{
+// menuId: evt.id,
+// menuItemId: evt.menuItemId,
+// coordinate: evt.coordinate,
+// });
+// }
+// }
+// }));
+ }
+
+ if (data.type == "bottom") {
+ this._bottomMapWidget = mapWidget;
+ } else {
+ this._mapWidgets.push(mapWidget);
+ }
+ if (data.relate) {
+ var content = {
+ sourceId: mapWidget.id,
+ mapManager: this
+ }
+ this._relateMapEventHandlerIndex[mapWidget.id] = aspect.after(mapWidget, MapWidget.EXTENT_CHANGE, lang.hitch(content, function(ext) {
+ for (var index in this.mapManager._mapWidgets) {
+ if (this.mapManager._mapWidgets[index].id == this.sourceId) {
+ continue;
+ }
+ this.mapManager._mapWidgets[index].setExtent(ext);
+ }
+ if (this.mapManager._bottomMapWidget && this.mapManager._bottomMapWidget.id != this.sourceI) {
+ this.mapManager._bottomMapWidget.setExtent(ext);
+ }
+ }));
+ }
+
+ //调用窗体变化事件,重新计算各个map的位置
+ this.onResizeHandler();
+ },
+ removeMapWidgetHandler: function(id) {
+ if (this._mainMapWidget.id == id) {
+ return; //主地图是不能移除的
+ }
+ var mapWidget = this._getMapWidgetById(id);
+ this._relateMapEventHandlerIndex[mapWidget.id].remove();
+ delete this._relateMapEventHandlerIndex[mapWidget.id];
+ for (var i = 1; i < this._mapWidgets.length; i++) {
+ if (this._mapWidgets[i].id == id) {
+ this._mapWidgets.splice(i, 1);
+ break;
+ }
+ }
+ if (this._bottomMapWidget && this._bottomMapWidget.id == id) {
+ this._bottomMapWidget = null;
+ }
+ //domConstruct.destroy(mapWidget.domNode.id);
+ //mapWidget=null;
+ if (mapWidget.destroyRecursive) {
+ mapWidget.destroyRecursive();
+ }
+ mapWidget = null;
+ this.onResizeHandler();
+ },
+ _getMapWidgetByMapId: function(id) {
+ for (var i in this._mapWidgets) {
+ if (this._mapWidgets[i].map.id == id) {
+ return this._mapWidgets[i];
+ }
+ }
+ if (this._bottomMapWidget && this._bottomMapWidget.map.id == id) {
+ return this._bottomMapWidget
+ }
+ },
+ _getMapWidgetById: function(id) {
+ for (var i in this._mapWidgets) {
+ if (this._mapWidgets[i].id == id) {
+ return this._mapWidgets[i];
+ }
+ }
+ if (this._bottomMapWidget && this._bottomMapWidget.id == id) {
+ return this._bottomMapWidget
+ }
+ }
+ });
+ });
\ No newline at end of file
--
Gitblit v1.9.3