addMap_back.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  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. return;
  100. }
  101. });
  102. $("#entMapId").val(data.value);
  103. myBmap.clearMapController();
  104. myBmap.init(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. $.ajax({
  128. type: "post",
  129. url: "/ent/riskPointMap/saveDangerSourceMapData",
  130. data: data.field,
  131. dataType: "json",
  132. success: function (result) {
  133. if (result.code === 1) {
  134. parent.layer.closeAll();
  135. layer.msg(result.msg);
  136. parent.closeReload();
  137. } else {
  138. layer.msg(result.msg);
  139. }
  140. }
  141. });
  142. return false;
  143. });
  144. $('#closePageDialog').click(function () {
  145. parent.layer.closeAll();
  146. });
  147. myBmap.init(riskPointId);
  148. });
  149. var myBmap = {
  150. mapContainer: "map", //地图容器
  151. mapTile: "http://online{s}.map.bdimg.com/tile/?qt=vtile&x={x}&y={y}&z={z}&styles=pl&scaler=2&udt=20181205", //切片图层
  152. myIcon: null, //保存创建的icon
  153. myMarker: null, //保存自己创建marker
  154. myMarkerType: 0, //marker类型
  155. myMarkerId: null, //markerId
  156. isSave: true, //是否保存标记
  157. checkedIcon: null, //保存选中的icon
  158. deleteMarkerId: null, //保存删除得markerId
  159. mapControl: null, // 地图控制器,用来清除叠加控制
  160. data: {},
  161. init: function (riskPointId) {
  162. var _this = this;
  163. //初始化地图
  164. var map_type = 3;
  165. if (map_type == 4) {
  166. baidu_map();
  167. } else {
  168. image_map();
  169. }
  170. // 增加区域绘制工具栏
  171. plotLayer = new L.FeatureGroup(),
  172. map.addLayer(plotLayer);
  173. var e = {
  174. position: "topright",
  175. draw: {
  176. polyline: {shapeOptions: {color: "#0000ff", weight: 3}},
  177. polygon: {allowIntersection: !0, showArea: !0, shapeOptions: {color: "#0000ff", weight: 2}},
  178. rectangle: {shapeOptions: {color: "#0000ff", weight: 2}},
  179. circle: false,
  180. circlemarker: false,
  181. marker: true,
  182. Point: false
  183. },
  184. edit: {
  185. featureGroup: plotLayer,
  186. remove: !0,
  187. edit: true
  188. }
  189. }, n = mapControl = new L.Control.Draw(e);
  190. // if (loadFlag) {
  191. // map.addControl(n),
  192. // map.on(L.Draw.Event.CREATED, draw_createdHandler);
  193. // }
  194. map.addControl(n),
  195. map.off(L.Draw.Event.CREATED).on(L.Draw.Event.CREATED, draw_createdHandler);
  196. function draw_createdHandler(t) {
  197. // console.dir(t)
  198. t.layerType;
  199. var o = t.layer;
  200. // 逻辑判断
  201. // var layers = plotLayer.getLayers();
  202. // var types;
  203. // if (layers.length > 0) {
  204. // layers.forEach(function (v) {
  205. // types += v.toGeoJSON().geometry.type;
  206. // });
  207. // if (types.indexOf("Point") != -1) {
  208. // Point = 1
  209. // }
  210. // }
  211. // if (o.toGeoJSON().geometry.type == "Point" && Point == 0) {
  212. // plotLayer.addLayer(o);
  213. // } else if (o.toGeoJSON().geometry.type != "Point") {
  214. // plotLayer.addLayer(o);
  215. // }
  216. plotLayer.addLayer(o);
  217. }
  218. //获取数据
  219. $.getJSON("/ent/riskPointMap/findMapDataById", {riskPointId: riskPointId, entMapId: $("#entMapId").val()}, function (result) {
  220. $.each(result.data, function (index, item) {
  221. //console.log(item);
  222. var markerData = item.markerData;
  223. if (markerData != null) {
  224. var optionsData = {
  225. riskPointId: item.riskPointId,
  226. title: item.markerTitle
  227. };
  228. var layers;
  229. if (item.markerType == 3) {
  230. var data = new Array();
  231. $.each($.parseJSON(markerData), function (index, item) {
  232. data[index] = new Array(item[1], item[0]);
  233. });
  234. layers = L.polygon(data, optionsData);
  235. } else if (item.markerType == 1) {
  236. layers = L.marker($.parseJSON(markerData));
  237. } else if (item.markerType == 2) {
  238. var data = new Array();
  239. $.each($.parseJSON(markerData), function (index, item) {
  240. data[index] = new Array(item[1], item[0]);
  241. });
  242. layers = L.polyline(data, optionsData);
  243. }
  244. plotLayer.addLayer(layers);
  245. }
  246. });
  247. });
  248. //底图为图片
  249. function image_map() {
  250. if (map == undefined || map._loaded == undefined) {
  251. map = L.map(_this.mapContainer, {crs: L.CRS.Simple, center: L.latLng(50.5, 30.5), minZoom: 0, zoom: 4, attributionControl: false});
  252. } else {
  253. loadFlag = false;
  254. }
  255. var yx = L.latLng;
  256. var xy = function xy(x, y) {
  257. if (L.Util.isArray(x)) {
  258. return yx(x[1], x[0]);
  259. }
  260. return yx(y, x);
  261. };
  262. map.eachLayer(function (layer) {
  263. map.removeLayer(layer);
  264. });
  265. var bounds = [xy(-600, -600), xy(300, 300)];
  266. L.imageOverlay(imgPath, bounds).addTo(map);
  267. map.fitBounds(bounds);
  268. }
  269. //底图为百度地图
  270. function baidu_map() {
  271. var maxZoom = 26;
  272. var crs = new L.Proj.CRS('EPSG:3395',
  273. '+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs', {
  274. resolutions: function () {
  275. level = 19;
  276. var res = [];
  277. res[0] = Math.pow(2, 18);
  278. for (var i = 1; i < level; i++) {
  279. res[i] = Math.pow(2, (18 - i))
  280. }
  281. return res;
  282. }(),
  283. origin: [0, 0],
  284. bounds: L.bounds([20037508.342789244, 0], [0, 20037508.342789244])
  285. });
  286. var image = new L.TileLayer(_this.mapTile, {
  287. maxZoom: maxZoom,
  288. minZoom: 10,
  289. subdomains: [0, 1, 2],
  290. tms: true
  291. });
  292. map = L.map(_this.mapContainer, {
  293. crs: crs,
  294. layers: [image]
  295. });
  296. map.setView([34.474387, 109.490437], 14);
  297. }
  298. },
  299. clearMapController(){ // 清除地图控制器
  300. map.removeControl(mapControl)
  301. }
  302. }
  303. function iconClick(e) {
  304. $(e).toggleClass('icon-active')
  305. }
  306. </script>
  307. </body>
  308. </html>