addMap.html 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8"/>
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  7. <title>可视化编辑</title>
  8. <link rel="stylesheet" href="../../../../assets/libs/layui/css/layui.css"/>
  9. <link rel="stylesheet" href="../../../../assets/module/admin.css?v=312"/>
  10. <link rel="stylesheet" href="../../../../assets/css/editormap.css?v=312"/>
  11. <link rel="stylesheet" type="text/css" href="../../../../assets/libs/leaflet/leaflet-draw/leaflet.draw-src.css">
  12. <link rel="stylesheet" type="text/css" href="../../../../assets/libs/leaflet/leaflet.css">
  13. <link rel="stylesheet" href="../../../../assets/module/formSelects/formSelects-v4.css"/>
  14. </head>
  15. <body>
  16. <!-- 页面加载loading -->
  17. <div class="page-loading">
  18. <div class="ball-loader">
  19. <span></span><span></span><span></span><span></span>
  20. </div>
  21. </div>
  22. <!-- 正文开始 -->
  23. <div class="layui-fluid">
  24. <div class="layui-card">
  25. <div class="layui-card-body">
  26. <form id="modelRoleForm" lay-filter="modelRoleForm" class="layui-form">
  27. <input type="hidden" name="entMapId" id="entMapId">
  28. <div class="layui-form-item">
  29. <div class="layui-inline">
  30. <label class="layui-form-label w-auto w-padding">选择背景图:</label>
  31. <div class="layui-input-inline mr0">
  32. <select id="entMapList" name="entMapList" lay-filter="entMapList" lay-verType="tips" class="layui-input-block">
  33. <option value="">选择背景图</option>
  34. </select>
  35. </div>
  36. </div>
  37. </div>
  38. <div class="map-container" id="map" style="height: 500px"></div>
  39. <div class="layui-form-item text-right">
  40. <button class="layui-btn" lay-filter="modelSubmitRole" lay-submit>保存</button>
  41. <button class="layui-btn layui-btn-primary" type="button" id="closePageDialog">取消</button>
  42. </div>
  43. </form>
  44. </div>
  45. </div>
  46. </div>
  47. <!-- js部分 -->
  48. <script type="text/javascript" src="../../../../assets/libs/layui/layui.js"></script>
  49. <script type="text/javascript" src="../../../../assets/js/common.js?v=312"></script>
  50. <script type="text/javascript" src="../../../../assets/libs/jquery/jquery-3.2.1.min.js"></script>
  51. <script src="../../../../assets/libs/leaflet/leaflet.js"></script>
  52. <script src="../../../../assets/libs/leaflet/leaflet-draw/leaflet.draw-src.js"></script>
  53. <script src="../../../../assets/libs/leaflet/leaflet-draw/local.js"></script>
  54. <script src="../../../../assets/libs/leaflet/proj4-compressed.js"></script>
  55. <script src="../../../../assets/libs/leaflet/proj4leaflet.js"></script>
  56. <script>
  57. var imgPath;
  58. var map;
  59. var entMapList;
  60. var loadFlag = true;
  61. layui.use(['layer', 'form', 'uParas', 'admin'], function () {
  62. var $ = layui.jquery;
  63. var layer = layui.layer;
  64. var form = layui.form;
  65. var admin = layui.admin;
  66. var uParas = layui.uParas;
  67. var riskPointId = uParas.getUrlParam("riskPointId");
  68. var entMapId = uParas.getUrlParam("entMapId");
  69. if (entMapId != null && entMapId != undefined) {
  70. $("#entMapId").val(entMapId);
  71. }
  72. $.ajaxSetup({async: false});
  73. $.getJSON(uParas.baseUrl + "/ent/map/getList", {mapType: 2}, function (result) {
  74. var entMap;
  75. if (result.data != null) {
  76. entMapList = result.data;
  77. if (entMapId != null && entMapId != undefined) {
  78. $.each(result.data, function (i, field) {
  79. if (field.mapId.toString() === entMapId) {
  80. imgPath = field.mapRasterLayer;
  81. uParas.initSimpleSelectX("entMapList", "modelRoleForm", result, "mapName", "mapId", entMapId);
  82. return;
  83. }
  84. });
  85. } else {
  86. entMap = result.data[0];
  87. imgPath = entMap.mapRasterLayer;
  88. uParas.initSimpleSelectX("entMapList", "modelRoleForm", result, "mapName", "mapId", entMap.mapId);
  89. $("#entMapId").val(entMap.mapId);
  90. }
  91. }
  92. });
  93. // console.log("entMapList", entMapList);
  94. //监听下拉选择
  95. form.on('select(entMapList)', function (data) {
  96. $.each(entMapList, function (i, field) {
  97. if (field.mapId.toString() === data.value) {
  98. imgPath = field.mapRasterLayer;
  99. console.log(field)
  100. return;
  101. }
  102. });
  103. $("#entMapId").val(data.value);
  104. myBmap.resetMapLoadData(riskPointId);
  105. });
  106. form.on('submit(modelSubmitRole)', function (data) {
  107. //console.log(data.field);
  108. var layers = plotLayer.getLayers();
  109. var drawIds = '';
  110. if (layers.length > 0) {
  111. layers.forEach(function (v) {
  112. v = v.toGeoJSON();
  113. //console.log(v);
  114. if (v.geometry.type == "Point") {
  115. var data = new Array();
  116. data[0] = v.geometry.coordinates[1];
  117. data[1] = v.geometry.coordinates[0];
  118. drawIds = drawIds += JSON.stringify(data) + ";" + v.geometry.type + "#";
  119. } else {
  120. drawIds = drawIds += JSON.stringify(v.geometry.coordinates) + ";" + v.geometry.type + "#";
  121. }
  122. });
  123. }
  124. data.field.riskPointId = riskPointId;
  125. data.field.drawIds = drawIds;
  126. data.field.entMapId = $("#entMapId").val();
  127. console.log(data.field.entMapId)
  128. $.ajax({
  129. type: "post",
  130. url: "/ent/riskPointMap/saveDangerSourceMapData",
  131. data: data.field,
  132. dataType: "json",
  133. success: function (result) {
  134. if (result.code === 1) {
  135. parent.layer.closeAll();
  136. layer.msg(result.msg);
  137. parent.closeReload();
  138. } else {
  139. layer.msg(result.msg);
  140. }
  141. }
  142. });
  143. return false;
  144. });
  145. $('#closePageDialog').click(function () {
  146. parent.layer.closeAll();
  147. });
  148. myBmap.init();
  149. myBmap.resetMapLoadData(riskPointId);
  150. });
  151. var myBmap = {
  152. mapContainer: "map", //地图容器
  153. mapTile: "http://online{s}.map.bdimg.com/tile/?qt=vtile&x={x}&y={y}&z={z}&styles=pl&scaler=2&udt=20181205", //切片图层
  154. myIcon: null, //保存创建的icon
  155. myMarker: null, //保存自己创建marker
  156. myMarkerType: 0, //marker类型
  157. myMarkerId: null, //markerId
  158. isSave: true, //是否保存标记
  159. checkedIcon: null, //保存选中的icon
  160. deleteMarkerId: null, //保存删除得markerId
  161. mapControl: null, // 地图控制器,用来清除叠加控制
  162. data: {},
  163. layerGroup: null, // 全部图层组
  164. plotLayer: null, // 绘制图层组
  165. init: function () {
  166. var _this = this;
  167. // 初始化图层组
  168. layerGroup = new L.LayerGroup()
  169. //初始化地图
  170. var map_type = 3;
  171. if (map_type == 4) {
  172. baidu_map();
  173. } else {
  174. image_map();
  175. }
  176. // 增加区域绘制工具栏
  177. plotLayer = new L.FeatureGroup(),
  178. map.addLayer(plotLayer);
  179. var e = {
  180. position: "topright",
  181. draw: {
  182. polyline: {shapeOptions: {color: "#0000ff", weight: 3}},
  183. polygon: {allowIntersection: !0, showArea: !0, shapeOptions: {color: "#0000ff", weight: 2}},
  184. rectangle: {shapeOptions: {color: "#0000ff", weight: 2}},
  185. circle: false,
  186. circlemarker: false,
  187. marker: true,
  188. Point: false
  189. },
  190. edit: {
  191. featureGroup: plotLayer,
  192. remove: !0,
  193. edit: true
  194. }
  195. }, n = mapControl = new L.Control.Draw(e);
  196. // if (loadFlag) {
  197. // map.addControl(n),
  198. // map.on(L.Draw.Event.CREATED, draw_createdHandler);
  199. // }
  200. map.addControl(n),
  201. map.off(L.Draw.Event.CREATED).on(L.Draw.Event.CREATED, draw_createdHandler);
  202. function draw_createdHandler(t) {
  203. // console.dir(t)
  204. t.layerType;
  205. var o = t.layer;
  206. // 逻辑判断
  207. // var layers = plotLayer.getLayers();
  208. // var types;
  209. // if (layers.length > 0) {
  210. // layers.forEach(function (v) {
  211. // types += v.toGeoJSON().geometry.type;
  212. // });
  213. // if (types.indexOf("Point") != -1) {
  214. // Point = 1
  215. // }
  216. // }
  217. // if (o.toGeoJSON().geometry.type == "Point" && Point == 0) {
  218. // plotLayer.addLayer(o);
  219. // } else if (o.toGeoJSON().geometry.type != "Point") {
  220. // plotLayer.addLayer(o);
  221. // }
  222. plotLayer.addLayer(o);
  223. myBmap.addLayer(o)
  224. }
  225. //底图为图片
  226. function image_map() {
  227. if (map == undefined || map._loaded == undefined) {
  228. map = L.map(_this.mapContainer, {crs: L.CRS.Simple, center: L.latLng(50.5, 30.5), minZoom: 0, zoom: 4, attributionControl: false});
  229. } else {
  230. loadFlag = false;
  231. }
  232. }
  233. //底图为百度地图
  234. function baidu_map() {
  235. var maxZoom = 26;
  236. var crs = new L.Proj.CRS('EPSG:3395',
  237. '+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs', {
  238. resolutions: function () {
  239. level = 19;
  240. var res = [];
  241. res[0] = Math.pow(2, 18);
  242. for (var i = 1; i < level; i++) {
  243. res[i] = Math.pow(2, (18 - i))
  244. }
  245. return res;
  246. }(),
  247. origin: [0, 0],
  248. bounds: L.bounds([20037508.342789244, 0], [0, 20037508.342789244])
  249. });
  250. var image = new L.TileLayer(_this.mapTile, {
  251. maxZoom: maxZoom,
  252. minZoom: 10,
  253. subdomains: [0, 1, 2],
  254. tms: true
  255. });
  256. map = L.map(_this.mapContainer, {
  257. crs: crs,
  258. layers: [image]
  259. });
  260. map.setView([34.474387, 109.490437], 14);
  261. }
  262. },
  263. resetMapLoadData(riskPointId){ // 重置地图加载数据
  264. myBmap.clearLayer()
  265. myBmap.loadData(riskPointId)
  266. myBmap.resetMapImage()
  267. },
  268. /**
  269. * @Author: NanKeYang
  270. * @Description: 重置地图图片
  271. * @Data: 2019/12/23 10:59
  272. */
  273. resetMapImage:function () {
  274. var yx = L.latLng;
  275. var xy = function xy(x, y) {
  276. if (L.Util.isArray(x)) {
  277. return yx(x[1], x[0]);
  278. }
  279. return yx(y, x);
  280. };
  281. // map.eachLayer(function (layer) {
  282. // console.log(layer)
  283. // // map.removeLayer(layer);
  284. // });
  285. var bounds = [xy(-600, -600), xy(300, 300)];
  286. let imgOverlay = L.imageOverlay(imgPath, bounds).addTo(map);
  287. myBmap.addLayer(imgOverlay);
  288. map.fitBounds(bounds);
  289. },
  290. /**
  291. * @Author: NanKeYang
  292. * @Description: 加载数据
  293. * @Data: 2019/12/23 10:59
  294. */
  295. loadData:function(riskPointId){
  296. //获取数据
  297. $.getJSON("/ent/riskPointMap/findMapDataById", {riskPointId: riskPointId, entMapId: $("#entMapId").val()}, function (result) {
  298. $.each(result.data, function (index, item) {
  299. //console.log(item);
  300. var markerData = item.markerData;
  301. if (markerData != null) {
  302. var optionsData = {
  303. riskPointId: item.riskPointId,
  304. title: item.markerTitle
  305. };
  306. var layers;
  307. if (item.markerType == 3) {
  308. var data = new Array();
  309. $.each($.parseJSON(markerData), function (index, item) {
  310. data[index] = new Array(item[1], item[0]);
  311. });
  312. layers = L.polygon(data, optionsData);
  313. } else if (item.markerType == 1) {
  314. layers = L.marker($.parseJSON(markerData));
  315. } else if (item.markerType == 2) {
  316. var data = new Array();
  317. $.each($.parseJSON(markerData), function (index, item) {
  318. data[index] = new Array(item[1], item[0]);
  319. });
  320. layers = L.polyline(data, optionsData);
  321. }
  322. plotLayer.addLayer(layers);
  323. myBmap.addLayer(layers)
  324. }
  325. });
  326. });
  327. },
  328. /**
  329. * @Author: NanKeYang
  330. * @Description: 添加图层
  331. * @Data: 2019/12/23 11:00
  332. */
  333. addLayer: function(layer){
  334. layerGroup.addLayer(layer)
  335. },
  336. /**
  337. * @Author: NanKeYang
  338. * @Description: 清空图层
  339. * @Data: 2019/12/23 11:00
  340. */
  341. clearLayer:function () {
  342. layerGroup.eachLayer(function (layerItem) {
  343. map.removeLayer(layerItem)
  344. })
  345. layerGroup.clearLayers()
  346. plotLayer.clearLayers()
  347. },
  348. /**
  349. * @Author: NanKeYang
  350. * @Description: 清除地图控制
  351. * @Data: 2019/12/23 11:00
  352. */
  353. clearMapController(){ // 清除地图控制器
  354. map.removeControl(mapControl)
  355. }
  356. }
  357. function iconClick(e) {
  358. $(e).toggleClass('icon-active')
  359. }
  360. </script>
  361. </body>
  362. </html>