myLayer.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. /**
  2. * [ONEMAP.M.projectController]
  3. * @return {[object]}
  4. */
  5. define(['modDir/menu/myLayerActions'],
  6. function (_myLayerActions) {
  7. /**
  8. * 初始化并订阅事件
  9. * @return {[type]} [description]
  10. */
  11. function init(dm) {
  12. if (!status.initialized) {
  13. subscribe();
  14. bindEvent();
  15. status.initialized = true;
  16. }
  17. }
  18. function bindEvent() {
  19. }
  20. // 移除图层
  21. function removeLayer(data) {
  22. if (data) {
  23. modValue.thematicControlHtml.remove();
  24. map23DControl.tileLayer({
  25. action: 'remove',
  26. guid: data
  27. })
  28. data = null;
  29. // map2DViewer.map.removeControl(overLayerOpacityControl);
  30. overLayerOpacityControl = null;
  31. }
  32. ONEMAP.D.overLayerCount--;
  33. if (ONEMAP.D.overLayerCount == 0) {
  34. map2DViewer.map.setZoomScope(1, 19);
  35. }
  36. }
  37. /**
  38. * 设置界面
  39. */
  40. function setLayout() {
  41. }
  42. function layoutResize() {
  43. }
  44. // action type guid
  45. function myLayerControl(options) {
  46. switch (options.action) {
  47. case 'add':
  48. return addToMyLayer(options);
  49. break;
  50. case 'remove':
  51. return deleteDom(options);
  52. break;
  53. case 'update':
  54. return updateLayer(options);
  55. break;
  56. }
  57. }
  58. // 添加到自定义图层
  59. function addToMyLayer(options) { // guid type(图层或图层组) name mod(是否无透明度)
  60. // console.log(options.layerData);
  61. // console.log("add");
  62. var layerLength = $("#layerControlMenu .myLayers li").length;
  63. if (layerLength < map23DConfig.layerMaxLength) {
  64. // console.log(layerLength);
  65. var DOMid = options.DOM.guid;
  66. var mnAct = '<div class="mn-act no" setOp="no">';
  67. if (options.DOM.type == "layer" || options.DOM.type == "otherOrigin" || options.DOM.type == "thematicOrigin" || options.DOM.type == "sxlayer") {
  68. mnAct = '<div class="mn-act yes" setOp="yes">';
  69. } else if (options.mod == "taiShi") {
  70. mnAct = '<div class="mn-act no taiShiTool" setOp="no">';
  71. } else if (options.mod == "wxjd") {
  72. mnAct = '<div class="mn-act no" style="margin-left: 0px;" setOp="no">';
  73. }
  74. if (options.mod == "test") {
  75. mnAct = '<div class="mn-act yes DS" setOp="yes">';
  76. }
  77. var data;
  78. var layerFloor = "zid" + DOMid;
  79. if (options.mod == "test") {
  80. data = '<li layer="' + DOMid + '" class="' + layerFloor + '" cg="true"><div class="clearfix"><span class="close">×</span>' +
  81. '<input type="checkbox" checked="true" class="' + DOMid + '">' +
  82. '<span class="data-name" title="' + options.DOM.name + '">' + options.DOM.name + '</span>'+
  83. '<span class="data-save" guid="' + DOMid + '">' + JSON.stringify(options.layerData) + '</span>'+
  84. '<span class="fr gear"></span></div>' + mnAct +
  85. '<span>透明度:</span><span class="op"><span class="chang"></span>' +
  86. '<span class="yuan" layer="' + DOMid + '"></span></span>' +
  87. '<span class="layer-detail"></span><span class="layer-cale"></span>' +
  88. '<span class="move"><span class="down"></span><span class="up"></span></span></div><span class="eye">显示开关</span></li>';
  89. // 设置层级
  90. setFloor(layerFloor, options.DOM.name);
  91. } else if (options.mod == "otherOrigin" || options.mod == "thematicOrigin" || options.mod == "qixiang" || options.mod == "vectorOrigin") {
  92. data = '<li layer="' + DOMid + '" class="' + layerFloor + '" cg="true"><div class="clearfix"><span class="close">×</span>' +
  93. '<input type="checkbox" checked="true" class="' + DOMid + '">' +
  94. '<span class="data-name" title="' + options.DOM.name + '">' + options.DOM.name +
  95. '</span><span class="fr legend" title="图例" curl="' + options.DOM.legend + '"></span><span class="fr gear"></span></div>' + mnAct +
  96. '<span>透明度:</span><span class="op"><span class="chang"></span>' +
  97. '<span class="yuan" layer="' + DOMid + '"></span></span>' +
  98. '<span class="move"><span class="down"></span><span class="up"></span></span></div><span class="eye">显示开关</span></li>';
  99. // 设置层级
  100. setFloor(layerFloor, options.DOM.name);
  101. } else if (options.mod == "taiShi") {
  102. data = '<li layer="' + DOMid + '"><div class="clearfix"><span class="close">×</span>' +
  103. '<input type="checkbox" checked="true">' +
  104. '<span class="data-name" title="' + options.DOM.name + '">' + options.DOM.name +
  105. '</span><span class="data-save"></span><span class="fr gear"></span></div>' + mnAct
  106. // +'<span style="line-height:25px; ">用户ID:<input type="text" id="video-query-ids" style="width:114px;height: 25px;line-height: 20px;border: #7F9BB3 1px solid;margin-left: 5px;" /></span>'
  107. +
  108. '<span style="line-height:25px; "><input type="text" id="video-query-startDate" class="Wdate" onfocus="WdatePicker({dateFmt:\'yyyy-MM-dd HH:mm:ss\',maxDate:\'#F{$dp.$D(\\\'video-query-endDate\\\')}\',readOnly:true});" />至</span>' +
  109. '<span style="line-height:25px; "><input type="text" id="video-query-endDate" class="Wdate" onfocus="WdatePicker({dateFmt:\'yyyy-MM-dd HH:mm:ss\',minDate:\'#F{$dp.$D(\\\'video-query-startDate\\\')}\',readOnly:true});" /></span>' +
  110. '<span style="line-height:25px; ">时间间隔:<input type="number" value="1" style="width: 40px;height: 25px;line-height: 20px;font-size: 12px;border: #7F9BB3 1px solid;padding-left: 5px;margin-left: 5px;" id="video-timeSpace" />小时<input type="button" id="taishi_setBtn" style="position:absolute;left:145px;height: 25px;line-height: 20px;text-align: center;vertical-align: middle;border: 0px !important; background: #104792;color: #fff;padding: 0px 5px 0px 5px;cursor: pointer;border-radius: 2px;" value="查询" /></span>' +
  111. '</div><span class="eye">显示开关</span></li>';
  112. } else if (options.mod == "zhihuiji") {
  113. data = '<li layer="' + DOMid + '"><div class="clearfix"><span class="close">×</span>' +
  114. '<input type="checkbox" checked="true">' +
  115. '<span class="data-name" title="' + options.DOM.name + '">' + options.DOM.name +
  116. '</span><span class="data-save"></span><span class="fr gear"></span></div>' + mnAct +
  117. '<p class="getHistoryZHJ" onclick="ONEMAP.M.projectController.openHistroyPosition()">历史轨迹查询</p></div><span class="eye">显示开关</span></li>';
  118. } else if (options.mod == "wxjd") {
  119. data = '<li layer="' + DOMid + '"><div class="clearfix"><span class="close">×</span>' +
  120. '<input type="checkbox" checked="true">' +
  121. '<span class="data-name" title="' + options.DOM.name + '">' + options.DOM.name +
  122. '</span><span class="data-save"></span><span class="fr gear"></span></div>' + mnAct
  123. // +'<span style="line-height:30px; "><input type="radio" name="jd" id="wxjd-rdss"checked/>RDSS<input type="radio" id="wxjd-rnss" name="jd"/>RNSS<input type="radio" id="wxjd-gps" name="jd"/>GPS</span>'
  124. +
  125. '<span style="line-height:30px; "><input type="radio" id="wxjd-rnss" name="jd"/>RNSS<input type="radio" id="wxjd-gps" name="jd"/>GPS</span>' +
  126. '</div><span class="eye">显示开关</span></li>';
  127. } else if (options.mod == "sxlayer") {
  128. data = '<li layer="' + DOMid + '" class="' + DOMid + ' sxlayer" cg="true"><div class="clearfix"><span class="close">×</span>' +
  129. '<input type="checkbox" checked="true" class="' + DOMid + '">' +
  130. '<span class="data-name" title="' + options.DOM.name + '">' + options.DOM.name +
  131. '</span><span class="fr gear"></span></div>' + mnAct +
  132. '<span>透明度:</span><span class="op"><span class="chang"></span>' +
  133. '<span class="yuan" layer="' + DOMid + '"></span></span>' +
  134. '</div><span class="eye">显示开关</span></li>';
  135. } else if (options.mod == "QXSY") {
  136. data = '<li layer="' + DOMid + '"><div class="clearfix"><span class="close">×</span>' +
  137. '<input type="checkbox" checked="true" class="' + DOMid + '">' +
  138. '<span class="data-name" title="' + options.DOM.name + '">' + options.DOM.name +
  139. '</span><span class="data-save"></span></div><span class="eye">显示开关</span></li>';
  140. } else if (options.mod == "MOXING") {
  141. data = '<li layer="' + DOMid + '"><div class="clearfix"><span class="close">×</span>' +
  142. '<input type="checkbox" checked="true" class="' + DOMid + '">' +
  143. '<span class="data-name" title="' + options.DOM.name + '">' + options.DOM.name + '</span>'+
  144. '<span class="data-save"></span>'+
  145. '<span class="fr stereoscopic_set"></span>'+
  146. '</div><span class="eye">显示开关</span></li>';
  147. } else {
  148. data = '<li layer="' + DOMid + '" class="' + DOMid + '"><div class="clearfix"><span class="close">×</span>' +
  149. '<input type="checkbox" checked="true">' +
  150. '<span class="data-name" title="' + options.DOM.name + '">' + options.DOM.name +
  151. '</span><span class="data-save"></span></div><span class="eye">显示开关</span></li>';
  152. }
  153. $("#layerControlMenu .myLayers .mn-content").prepend(data);
  154. $("#layerControlMenu .myLayers .mn-content").children(":first").find("input").next().html(options.DOM.name);
  155. $("#layerControlMenu .myLayers").addClass('active');
  156. $("#layerControlMenu .mn-content .mn-act").removeClass('active');
  157. $("#layerControlMenu .myLayers .mn-content").children(":first").find("input:checkbox").attr("checked", true);
  158. $("#layerControlMenu .myLayers .mn-content").children(":first").find(".eye").addClass("checkTrue");
  159. $("#layerControlMenu .myLayers .scroll-bar").mCustomScrollbar('update');
  160. _myLayerActions.init();
  161. // 判断图层控制是否显示
  162. if (!$("#layerControlMenu").hasClass("bl")) {
  163. $("#layerControlMenu").addClass("bl");
  164. $("#layerControlMenu .myLayers").addClass("active");
  165. }
  166. // 添加时窗口位置如未显示则重置
  167. if (parseInt($("#layerControlMenu").css("left")) < -100) {
  168. $("#layerControlMenu").css("left", "0");
  169. }
  170. // 检查图层控制是否为空
  171. ONEMAP.M.layerControlMenu.checkLayerNull();
  172. return DOMid;
  173. } else {
  174. ONEMAP.C.publisher.publish({
  175. type: 'warning',
  176. message: '图层数量已达上限'
  177. }, 'noteBar::add');
  178. }
  179. }
  180. // 从我的图层中删除
  181. function deleteDom(options) {
  182. // DOMid
  183. var guid = options.DOMid;
  184. var li = $("#layerControlMenu .myLayers .mn-content li");
  185. for (var i = 0; i < li.length; i++) {
  186. // console.log(li.eq(i).attr("layer"));
  187. if (li.eq(i).attr("layer") == guid) {
  188. li.eq(i).remove();
  189. }
  190. }
  191. ONEMAP.M.layerControlMenu.checkLayerNull(); // 检查我的图层是否为空
  192. ONEMAP.M.myLayerActions.changeFloor(); // 删除时更新层级
  193. }
  194. function updateLayer(options) {
  195. var guid = options.DOMid;
  196. var name = options.DOM.name;
  197. var li = $("#layerControlMenu .myLayers .mn-content li");
  198. for (var i = 0; i < li.length; i++) {
  199. if (li.eq(i).attr("layer") == guid) {
  200. li.eq(i).find(".data-name").html(name);
  201. }
  202. }
  203. }
  204. // 设置层级
  205. function setFloor(DOMID, name) {
  206. var li = $("#layerControlMenu .myLayers .mn-content li");
  207. var liLength = li.length;
  208. var layer = $("#mapHolder #map2DWrap .leaflet-layer ");
  209. var layerLength = layer.length;
  210. for (var i = 0; i < liLength; i++) {
  211. li.eq(i).attr("zid", i);
  212. }
  213. layer.eq(layerLength - 1).addClass(DOMID);
  214. $("#mapHolder ." + DOMID).css("z-index", layerLength).attr("title", name);
  215. }
  216. // 检查当前图层数量
  217. function checkLength() {
  218. var layerLength = $("#layerControlMenu .myLayers li").length;
  219. return layerLength;
  220. }
  221. function addZoom(minZoom, maxZoom, lat, lng, zoom, guid) {
  222. if (!isNaN(minZoom)) {
  223. ONEMAP.C.zoomArr.push(minZoom);
  224. }
  225. if (!isNaN(maxZoom)) {
  226. ONEMAP.C.zoomArr.push(maxZoom);
  227. }
  228. setZoom(lat, lng, zoom);
  229. // console.log(guid);
  230. if (guid) {
  231. var arr2w = {
  232. "name": guid,
  233. "minZoom": minZoom,
  234. "maxZoom": maxZoom
  235. }
  236. ONEMAP.C.zoomArr2w.push(arr2w);
  237. }
  238. // console.log(ONEMAP.C.zoomArr2w);
  239. }
  240. function deleteZoom(minZoom, maxZoom, guid) {
  241. if (minZoom) {
  242. ONEMAP.C.zoomArr.splice(jQuery.inArray(minZoom, ONEMAP.C.zoomArr), 1);
  243. ONEMAP.C.zoomArr.splice(jQuery.inArray(maxZoom, ONEMAP.C.zoomArr), 1);
  244. }
  245. if (guid) {
  246. // 删除一维数组对应
  247. var zoomArr2w = ONEMAP.C.zoomArr2w;
  248. for (var i = 0; i < zoomArr2w.length; i++) {
  249. if (guid == zoomArr2w[i].name) {
  250. ONEMAP.C.zoomArr.splice(jQuery.inArray(zoomArr2w[i].minZoom, ONEMAP.C.zoomArr), 1);
  251. ONEMAP.C.zoomArr.splice(jQuery.inArray(zoomArr2w[i].maxZoom, ONEMAP.C.zoomArr), 1);
  252. }
  253. }
  254. // 删除二维数组对应
  255. var newData = ONEMAP.C.zoomArr2w.filter(function (item) {
  256. return item['name'] != guid;
  257. });
  258. ONEMAP.C.zoomArr2w = newData;
  259. }
  260. // console.log(ONEMAP.C.zoomArr);
  261. // console.log(ONEMAP.C.zoomArr2w);
  262. setZoom();
  263. }
  264. function setZoom(clat, clng, czoom) {
  265. var mxZ = Math.max.apply(null, ONEMAP.C.zoomArr);
  266. var mnZ = Math.min.apply(null, ONEMAP.C.zoomArr);
  267. // console.log(mxZ);
  268. // console.log(mnZ);
  269. // console.log(clat);
  270. // console.log(ONEMAP.C.zoomArr);
  271. setTimeout(function () {
  272. map2DViewer.map.setZoomScope(mnZ, mxZ);
  273. }, 500)
  274. if (clat) {
  275. map23DControl.setView({
  276. center: {
  277. lat: clat,
  278. lng: clng
  279. },
  280. zoom: czoom
  281. })
  282. }
  283. }
  284. function zoomActions(action, minZoom, maxZoom, lat, lng, zoom, guid) {
  285. // console.log("act zoom")
  286. switch (action) {
  287. case 'add':
  288. return addZoom(minZoom, maxZoom, lat, lng, zoom, guid);
  289. break;
  290. case 'remove':
  291. return deleteZoom(minZoom, maxZoom, guid);
  292. break;
  293. }
  294. }
  295. /**
  296. * 注册订阅
  297. * @type {Function}
  298. * 推送:ONEMAP.C.publisher.publish(options,'moduleName::type');
  299. * 订阅:ONEMAP.C.publisher.subscribe(layoutResize,'sideBarLayoutChange');
  300. */
  301. function subscribe() {
  302. ONEMAP.C.publisher.subscribe(layoutResize, 'menuListClick');
  303. // ONEMAP.C.publisher.subscribe(remove, 'cleanMap');
  304. }
  305. /**
  306. * 取消订阅
  307. * @type {Function}
  308. * 取消订阅:ONEMAP.C.publisher.unSubscribe(layoutResize,'sideBarLayoutChange');
  309. */
  310. function unSubscribe() {
  311. }
  312. return ONEMAP.M.myLayers = {
  313. init: init,
  314. myLayerControl: myLayerControl,
  315. checkLength: checkLength,
  316. zoomActions: zoomActions
  317. }
  318. });