myLayerActions.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. /**
  2. * [ONEMAP.M.projectController]
  3. * @return {[object]}
  4. */
  5. define(function (tplLayout) {
  6. /**
  7. * 初始化并订阅事件
  8. * @return {[type]} [description]
  9. */
  10. function init() {
  11. //if (!status.initialized) {
  12. subscribe();
  13. bindEvent();
  14. status.initialized = true;
  15. //}
  16. }
  17. var eyelook = {
  18. status: true
  19. }
  20. function bindEvent() {
  21. // 清空
  22. $("#layerControlMenu .clearLayer").unbind('click').bind('click', function () {
  23. ONEMAP.M.myLayerActions.clearLayer();
  24. ONEMAP.C.publisher.publish({
  25. type: 'allRemove'
  26. }, 'legend:remove');
  27. })
  28. // 从我的图层中删除
  29. $("#layerControlMenu .myLayers .close").off('click').on('click', function () {
  30. var guid = $(this).parent().parent().attr("layer");
  31. ONEMAP.C.publisher.publish({
  32. action: 'remove',
  33. guid: guid
  34. }, guid);
  35. // 从上部移除我的图层中的对应节点
  36. var getClass = $(this).next().attr("class");
  37. $(this).parent().parent().remove();
  38. var legendUrl = $(this).parent().find('.legend').attr('curl');
  39. // console.log(legendUrl);
  40. ONEMAP.C.publisher.publish({
  41. type: legendUrl
  42. }, 'legend:remove');
  43. // // 从上部移除我的图层中的对应节点
  44. // var getClass = $(this).next().attr("class");
  45. if (getClass) {
  46. var rmvClass = "." + getClass;
  47. // $(rmvClass).removeAttr("checked"); // 移除选中状态
  48. $(rmvClass).next().removeClass('menu-select').addClass("menu-select-no"); // (新)
  49. $(rmvClass).removeClass(getClass); // 移除上部对应class
  50. }
  51. ONEMAP.M.layerControlMenu.checkLayerNull();
  52. ONEMAP.M.myLayerActions.changeFloor();
  53. // 移除zoom范围
  54. var liName = $(this).parent().find(".data-name").text();
  55. ONEMAP.M.myLayers.zoomActions('remove', '', '', '', '', '', liName);
  56. })
  57. // 我的图层中复选框操作
  58. $("#layerControlMenu .myLayers :checkbox").off("change").on("change", function () {
  59. var guid = $(this).parent().parent().attr("layer");
  60. var eye = $(this).parent().parent().find(".eye");
  61. if ($(this).is(":checked")) {
  62. ONEMAP.C.publisher.publish({
  63. action: 'opacity',
  64. options: {
  65. opacity: 1
  66. },
  67. guid: guid
  68. }, guid);
  69. $(this).parents().filter("li").attr("eyelook", 0);
  70. if (!eye.hasClass("checkTrue")) {
  71. eye.addClass("checkTrue");
  72. $(this).parent().parent().css({
  73. "background": "url(../images/layout/zhenyan.png) 45px 16px / 21px no-repeat",
  74. "background-size": "20px"
  75. });
  76. }
  77. } else {
  78. ONEMAP.C.publisher.publish({
  79. action: 'opacity',
  80. options: {
  81. opacity: 0
  82. },
  83. guid: guid
  84. }, guid);
  85. $(this).parent().next().find(".chang").css("width", 0);
  86. $(this).parent().next().find(".yuan").css("left", 0);
  87. $(this).parents().filter("li").attr("eyelook", 1);
  88. // eyelook.status = false;
  89. if (eye.hasClass("checkTrue")) {
  90. eye.removeClass("checkTrue");
  91. $(this).parent().parent().css({
  92. "background": "url(../images/layout/biyan.png) 45px 16px / 21px no-repeat",
  93. "background-size": "20px"
  94. });
  95. }
  96. }
  97. })
  98. // 我的图层操作界面显隐
  99. $("#layerControlMenu .gear").off('click').on('click', function () {
  100. if ($(this).parent().next().hasClass('active')) {
  101. $(this).parent().next().removeClass('active');
  102. } else {
  103. $(this).parent().next().addClass('active');
  104. }
  105. })
  106. // 详情和收藏
  107. $("#layerControlMenu .myLayers .layer-detail").off('click').on('click', function () {
  108. var layerObj = JSON.parse($(this).parent().prev().find(".data-save").html());
  109. if (layerObj) {
  110. getShowInfo(layerObj);
  111. }
  112. })
  113. $("#layerControlMenu .myLayers .layer-cale").off('click').on('click', function () {
  114. var layerObj = JSON.parse($(this).parent().prev().find(".data-save").html());
  115. if (layerObj) {
  116. require(['modDir/user/userThematic'], function (userThematic) {
  117. userThematic.addThematic(layerObj);
  118. });
  119. }
  120. })
  121. // 透明度滑条
  122. var mnAct = $('#layerControlMenu .myLayers .mn-content li .mn-act');
  123. var yuan = $('#layerControlMenu .myLayers .mn-content li .yuan');
  124. yuan.on('mousedown', function (event) {
  125. var e = event;
  126. if ($(this).parents().filter("li").attr("eyelook") == 1) {
  127. e.preventDefault();
  128. } else {
  129. // 锁定当前索引
  130. var idx = $(this).parent().parent().parent().index();
  131. yuan = $('#layerControlMenu .myLayers .mn-content li .yuan').eq(idx).get(0);
  132. var op = $('#layerControlMenu .myLayers .mn-content li .op').eq(idx).get(0);
  133. var chang = $('#layerControlMenu .myLayers .mn-content li .chang').eq(idx).get(0);
  134. var yuanleft = 0;
  135. var event = event || window.event;
  136. var leftVal = event.clientX - this.offsetLeft;
  137. var that = this;
  138. var zid = $(this).parent().parent().parent().attr("zid");
  139. var curLatyerId = $(this).parent().parent().parent().attr('layer');
  140. if (mnAct.attr("setOp") == "yes") {
  141. // 拖动
  142. document.onmousemove = function (event) {
  143. var event = event || window.event;
  144. yuanleft = event.clientX - leftVal;
  145. if (yuanleft < 0)
  146. yuanleft = 0;
  147. else if (yuanleft > op.offsetWidth - yuan.offsetWidth)
  148. yuanleft = op.offsetWidth - yuan.offsetWidth;
  149. chang.style.width = yuanleft + 'px';
  150. yuan.style.left = yuanleft + "px";
  151. var opt = 1 - parseInt(yuanleft / (op.offsetWidth - yuan.offsetWidth) * 100) / 100;
  152. // console.log(opt);
  153. // 设置当前图层透明度
  154. ONEMAP.C.publisher.publish({
  155. action: 'opacity',
  156. options: {
  157. opacity: opt
  158. },
  159. guid: curLatyerId
  160. }, curLatyerId);
  161. //防止选择内容--当拖动鼠标过快时候,弹起鼠标,bar也会移动,修复bug
  162. window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
  163. }
  164. }
  165. }
  166. })
  167. document.onmouseup = function () {
  168. document.onmousemove = null; //弹起鼠标不做任何操作
  169. }
  170. // 当前图层上移下移
  171. $("#layerControlMenu .down").off('click').on('click', function () {
  172. var nd = $(this).parent().parent().parent();
  173. var nxt = nd.next().html();
  174. var length = $("#mapHolder #map2DWrap .leaflet-layer ").length - 1;
  175. var idx = length - nd.index(); // 当前图层索引值
  176. if (typeof (nxt) != 'undefined' && nxt != "暂无图层数据") {
  177. nd.insertAfter(nd.next());
  178. var curLatyerId = $(this).parent().parent().parent().attr('layer');
  179. ONEMAP.C.publisher.publish({
  180. action: 'down'
  181. }, curLatyerId);
  182. // ONEMAP.M.myLayerActions.changeFloor();
  183. } else {
  184. ONEMAP.C.publisher.publish({
  185. type: 'warning',
  186. message: '已移到最底部'
  187. }, 'noteBar::add');
  188. }
  189. })
  190. $("#layerControlMenu .up").off('click').on('click', function () {
  191. var nd = $(this).parent().parent().parent();
  192. var prv = nd.prev().html();
  193. if (typeof (prv) != 'undefined') {
  194. nd.insertBefore(nd.prev());
  195. var curLatyerId = $(this).parent().parent().parent().attr('layer');
  196. ONEMAP.C.publisher.publish({
  197. action: 'up'
  198. }, curLatyerId);
  199. // ONEMAP.M.myLayerActions.changeFloor();
  200. } else {
  201. ONEMAP.C.publisher.publish({
  202. type: 'warning',
  203. message: '已移到最顶部'
  204. }, 'noteBar::add');
  205. }
  206. })
  207. //显示图例
  208. $("#layerControlMenu .legend").unbind('click').bind('click', function () {
  209. var pictureUrl = $(this).attr('curl');
  210. require(['modDir/menu/legend'], function (legend) {
  211. legend.init({
  212. pictureUrl: pictureUrl
  213. });
  214. });
  215. })
  216. //模型控制
  217. $("#layerControlMenu .stereoscopic_set").unbind('click').bind('click', function () {
  218. var guid = $(this).parent().parent().attr("layer");
  219. ONEMAP.C.publisher.publish({
  220. action: 'set',
  221. guid: guid
  222. }, guid);
  223. })
  224. }
  225. /**
  226. * 显示专题图详情
  227. */
  228. function getShowInfo(data) {
  229. // console.log(data);
  230. var guid = data.guid;
  231. var ajaxUrl = onemapUrlConfig.thematicDataServerUrl + '/production/metadata?production_id=' + guid;
  232. ONEMAP.V.loading.load();
  233. $.ajax({
  234. type: "get",
  235. dataType: 'jsonp',
  236. url: ajaxUrl,
  237. success: function (data) {
  238. ONEMAP.V.loading.loaded();
  239. //添加专题图信息到地图容器中
  240. addItemToContent(data.metadata);
  241. //console.log(data.metadata);
  242. },
  243. error: function (data) {
  244. ONEMAP.V.loading.loaded();
  245. ONEMAP.C.publisher.publish({
  246. type: 'error',
  247. message: '获取地图数据失败!'
  248. }, 'noteBar::add');
  249. }
  250. });
  251. };
  252. function addItemToContent(data) {
  253. $('#atlasInfoDetail').show();
  254. var zIndex = ONEMAP.M.sideBar.getZIndex();
  255. $('#atlasInfoDetail').css({
  256. zIndex: zIndex
  257. });
  258. $('#atlasInfoDetail .cover-content').empty();
  259. $('<div class="close"></div>').appendTo($('#atlasInfoDetail .cover-content'));
  260. $('<h3>' + data.map_name + '</h3>').appendTo($('#atlasInfoDetail .cover-content'));
  261. $('<p>作者: ' + data.author + '</p>').appendTo($('#atlasInfoDetail .cover-content'));
  262. $('<p>创建时间: ' + data.created_time + '</p>').appendTo($('#atlasInfoDetail .cover-content'));
  263. $('<p>发布者: ' + data.publisher + '</p>').appendTo($('#atlasInfoDetail .cover-content'));
  264. $('<p>发布时间: ' + data.publication_date + '</p>').appendTo($('#atlasInfoDetail .cover-content'));
  265. $('<p>地图来源: ' + data.original_atlas + '</p>').appendTo($('#atlasInfoDetail .cover-content'));
  266. $('<p>最小缩放等级: ' + data.min_zoom_level + '</p>').appendTo($('#atlasInfoDetail .cover-content'));
  267. $('<p>最大缩放等级: ' + data.max_zoom_level + '</p>').appendTo($('#atlasInfoDetail .cover-content'));
  268. //$('<p>瓦片格式: '+data.image_format+'</p>').appendTo($('#atlasInfoDetail .content'));
  269. //$('<p>瓦片质量: '+data.image_quality+'</p>').appendTo($('#atlasInfoDetail .content'));
  270. $('<p>地图宽度: ' + data.map_image_width + '像素</p>').appendTo($('#atlasInfoDetail .cover-content'));
  271. $('<p>地图高度: ' + data.map_image_height + '像素</p>').appendTo($('#atlasInfoDetail .cover-content'));
  272. if (data.coordinate_system == 0) {
  273. data.coordinate_system = '无坐标图形'
  274. }
  275. $('<p>坐标系: ' + data.coordinate_system + '</p>').appendTo($('#atlasInfoDetail .cover-content'));
  276. $(".close").click(function () {
  277. $("#atlasInfoDetail").hide();
  278. })
  279. }
  280. /**
  281. * 设置界面
  282. */
  283. function setLayout() {
  284. }
  285. function layoutResize() {
  286. }
  287. /**
  288. * 注册订阅
  289. * @type {Function}
  290. * 推送:ONEMAP.C.publisher.publish(options,'moduleName::type');
  291. * 订阅:ONEMAP.C.publisher.subscribe(layoutResize,'sideBarLayoutChange');
  292. */
  293. function subscribe() {
  294. //ONEMAP.C.publisher.subscribe(layoutResize, 'menuListClick');
  295. // ONEMAP.C.publisher.subscribe(remove, 'cleanMap');
  296. }
  297. /**
  298. * 取消订阅
  299. * @type {Function}
  300. * 取消订阅:ONEMAP.C.publisher.unSubscribe(layoutResize,'sideBarLayoutChange');
  301. */
  302. function unSubscribe() {
  303. }
  304. // 更改层级
  305. function changeFloor() {
  306. // console.log("2333");
  307. var layer = $("#mapHolder #map2DWrap .leaflet-layer ");
  308. var layerLength = layer.length;
  309. var li = $("#layerControlMenu .myLayers .mn-content li");
  310. var liLength = li.length;
  311. for (var i = 0; i < liLength; i++) {
  312. if (li.eq(i).attr("cg") == "true") {
  313. // console.log("congratulation");
  314. var DOMID = "zid" + li.eq(i).attr("layer");
  315. // console.log(DOMID);
  316. $("#mapHolder ." + DOMID).css("z-index", layerLength);
  317. layerLength--;
  318. }
  319. }
  320. }
  321. // 设置透明度
  322. function setOpacity(zid, opt) {
  323. map23DControl.tileLayer({
  324. action: 'update',
  325. guid: zid,
  326. layer: {
  327. opacity: opt
  328. }
  329. })
  330. }
  331. function clearLayer() {
  332. $("#layerControlMenu").removeClass("bl");
  333. var layerLis = $("#layerControlMenu .myLayers .mn-content li");
  334. for (var i = 0; i < layerLis.length; i++) {
  335. var guid = $(layerLis[i]).attr("layer");
  336. ONEMAP.C.publisher.publish({
  337. action: 'remove',
  338. guid: guid
  339. }, guid);
  340. $(layerLis[i]).remove();
  341. // 从上部移除我的图层中的对应节点
  342. if (guid) {
  343. var rmvClass = "." + guid;
  344. // $(rmvClass).removeAttr("checked"); // 移除选中状态(旧)
  345. $(rmvClass).next().removeClass('menu-select').addClass("menu-select-no"); // (新)
  346. $(rmvClass).removeClass(guid); // 移除上部对应class
  347. }
  348. // 清空搜索結果列表
  349. $("#placePanel .thematic-content .thematic-search-list li").attr("load", 0);
  350. //
  351. $('#thematicResultsList li.select').removeClass('select');
  352. }
  353. ONEMAP.M.layerControlMenu.checkLayerNull();
  354. map2DViewer.map.setZoomScope(1, 19);
  355. ONEMAP.C.layerLength = 0;
  356. ONEMAP.C.zoomArr = [];
  357. ONEMAP.C.zoomArr2w = [];
  358. }
  359. function checkLayerNull() {
  360. // 我的图层暂无数据时
  361. if (typeof ($("#layerControlMenu .myLayers .mn-content li").eq(0).html()) == "undefined" || $("#layerControlMenu .myLayers .mn-content").text() == "") {
  362. $('#thematicResultsList li.select').removeClass('select');
  363. // 解放缩放等级
  364. map2DViewer.map.setZoomScope(1, 19);
  365. $("#layerControlMenu").removeClass("bl");
  366. }
  367. }
  368. function checkChongMing(name) {
  369. var layerlistDe;
  370. // console.log(name);
  371. if (typeof ($("#layerControlMenu .myLayers .mn-content li").eq(0).html()) == "undefined" || $("#layerControlMenu .myLayers .mn-content").text() == "") {
  372. return true;
  373. } else {
  374. layerlistDe = $("#layerControlMenu .myLayers .mn-content li");
  375. for (var i = 0; i < layerlistDe.length; i++) {
  376. if (name == layerlistDe.eq(i).find(".data-name").text()) {
  377. // console.log("false")
  378. return false;
  379. // console.log(layerlistDe.eq(i).find(".data-name").text());
  380. }
  381. }
  382. return true;
  383. }
  384. }
  385. return ONEMAP.M.myLayerActions = {
  386. init: init,
  387. checkLayerNull: checkLayerNull,
  388. clearLayer: clearLayer,
  389. changeFloor: changeFloor,
  390. checkChongMing: checkChongMing
  391. }
  392. });