addMap_back.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  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"
  33. class="layui-input-block">
  34. <option value="">选择背景图</option>
  35. </select>
  36. </div>
  37. </div>
  38. </div>
  39. <div class="map-container" id="map" style="height: 500px"></div>
  40. <div class="layui-form-item text-right">
  41. <button class="layui-btn" lay-filter="modelSubmitRole" lay-submit>保存</button>
  42. <button class="layui-btn layui-btn-primary" type="button" id="closePageDialog">取消</button>
  43. </div>
  44. </form>
  45. </div>
  46. </div>
  47. </div>
  48. <!-- js部分 -->
  49. <script type="text/javascript" src="../../../../assets/libs/layui/layui.js"></script>
  50. <script type="text/javascript" src="../../../../assets/js/common.js?v=312"></script>
  51. <script type="text/javascript" src="../../../../assets/libs/jquery/jquery-3.2.1.min.js"></script>
  52. <script src="../../../../assets/libs/leaflet/leaflet.js"></script>
  53. <script src="../../../../assets/libs/leaflet/leaflet-draw/leaflet.draw-src.js"></script>
  54. <script src="../../../../assets/libs/leaflet/leaflet-draw/local.js"></script>
  55. <script src="../../../../assets/libs/leaflet/proj4-compressed.js"></script>
  56. <script src="../../../../assets/libs/leaflet/proj4leaflet.js"></script>
  57. <script>
  58. var imgPath;
  59. var map;
  60. var entMapList;
  61. var loadFlag = true;
  62. layui.use(['layer', 'form', 'uParas', 'admin'], function () {
  63. var $ = layui.jquery;
  64. var layer = layui.layer;
  65. var form = layui.form;
  66. var admin = layui.admin;
  67. var uParas = layui.uParas;
  68. var riskPointId = uParas.getUrlParam("riskPointId");
  69. var entMapId = uParas.getUrlParam("entMapId");
  70. if (entMapId != null && entMapId != undefined) {
  71. $("#entMapId").val(entMapId);
  72. }
  73. $.ajaxSetup({async: false});
  74. $.getJSON(uParas.baseUrl + "/ent/map/getList", {mapType: 2}, function (result) {
  75. var entMap;
  76. if (result.data != null) {
  77. entMapList = result.data;
  78. if (entMapId != null && entMapId != undefined) {
  79. $.each(result.data, function (i, field) {
  80. if (field.mapId.toString() === entMapId) {
  81. imgPath = field.mapRasterLayer;
  82. uParas.initSimpleSelectX("entMapList", "modelRoleForm", result, "mapName", "mapId", entMapId);
  83. return;
  84. }
  85. });
  86. } else {
  87. entMap = result.data[0];
  88. imgPath = entMap.mapRasterLayer;
  89. uParas.initSimpleSelectX("entMapList", "modelRoleForm", result, "mapName", "mapId", entMap.mapId);
  90. $("#entMapId").val(entMap.mapId);
  91. }
  92. }
  93. });
  94. // console.log("entMapList", entMapList);
  95. //监听下拉选择
  96. form.on('select(entMapList)', function (data) {
  97. $.each(entMapList, function (i, field) {
  98. if (field.mapId.toString() === data.value) {
  99. imgPath = field.mapRasterLayer;
  100. return;
  101. }
  102. });
  103. $("#entMapId").val(data.value);
  104. myBmap.clearMapController();
  105. myBmap.init(riskPointId);
  106. });
  107. form.on('submit(modelSubmitRole)', function (data) {
  108. //console.log(data.field);
  109. var layers = plotLayer.getLayers();
  110. var drawIds = '';
  111. if (layers.length > 0) {
  112. layers.forEach(function (v) {
  113. v = v.toGeoJSON();
  114. //console.log(v);
  115. if (v.geometry.type == "Point") {
  116. var data = new Array();
  117. data[0] = v.geometry.coordinates[1];
  118. data[1] = v.geometry.coordinates[0];
  119. drawIds = drawIds += JSON.stringify(data) + ";" + v.geometry.type + "#";
  120. } else {
  121. drawIds = drawIds += JSON.stringify(v.geometry.coordinates) + ";" + v.geometry.type + "#";
  122. }
  123. });
  124. }
  125. data.field.riskPointId = riskPointId;
  126. data.field.drawIds = drawIds;
  127. data.field.entMapId = $("#entMapId").val();
  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(riskPointId);
  149. });
  150. var myBmap = {
  151. mapContainer: "map", //地图容器
  152. mapTile: "http://online{s}.map.bdimg.com/tile/?qt=vtile&x={x}&y={y}&z={z}&styles=pl&scaler=2&udt=20181205", //切片图层
  153. myIcon: null, //保存创建的icon
  154. myMarker: null, //保存自己创建marker
  155. myMarkerType: 0, //marker类型
  156. myMarkerId: null, //markerId
  157. isSave: true, //是否保存标记
  158. checkedIcon: null, //保存选中的icon
  159. deleteMarkerId: null, //保存删除得markerId
  160. mapControl: null, // 地图控制器,用来清除叠加控制
  161. data: {},
  162. init: function (riskPointId) {
  163. var _this = this;
  164. //初始化地图
  165. var map_type = 3;
  166. if (map_type == 4) {
  167. baidu_map();
  168. } else {
  169. image_map();
  170. }
  171. // 增加区域绘制工具栏
  172. plotLayer = new L.FeatureGroup(),
  173. map.addLayer(plotLayer);
  174. var e = {
  175. position: "topright",
  176. draw: {
  177. polyline: {shapeOptions: {color: "#0000ff", weight: 3}},
  178. polygon: {allowIntersection: !0, showArea: !0, shapeOptions: {color: "#0000ff", weight: 2}},
  179. rectangle: {shapeOptions: {color: "#0000ff", weight: 2}},
  180. circle: false,
  181. circlemarker: false,
  182. marker: true,
  183. Point: false
  184. },
  185. edit: {
  186. featureGroup: plotLayer,
  187. remove: !0,
  188. edit: true
  189. }
  190. }, n = mapControl = new L.Control.Draw(e);
  191. // if (loadFlag) {
  192. // map.addControl(n),
  193. // map.on(L.Draw.Event.CREATED, draw_createdHandler);
  194. // }
  195. map.addControl(n),
  196. map.off(L.Draw.Event.CREATED).on(L.Draw.Event.CREATED, draw_createdHandler);
  197. function draw_createdHandler(t) {
  198. // console.dir(t)
  199. t.layerType;
  200. var o = t.layer;
  201. // 逻辑判断
  202. // var layers = plotLayer.getLayers();
  203. // var types;
  204. // if (layers.length > 0) {
  205. // layers.forEach(function (v) {
  206. // types += v.toGeoJSON().geometry.type;
  207. // });
  208. // if (types.indexOf("Point") != -1) {
  209. // Point = 1
  210. // }
  211. // }
  212. // if (o.toGeoJSON().geometry.type == "Point" && Point == 0) {
  213. // plotLayer.addLayer(o);
  214. // } else if (o.toGeoJSON().geometry.type != "Point") {
  215. // plotLayer.addLayer(o);
  216. // }
  217. plotLayer.addLayer(o);
  218. }
  219. //获取数据
  220. $.getJSON("/ent/riskPointMap/findMapDataById", {
  221. riskPointId: riskPointId,
  222. entMapId: $("#entMapId").val()
  223. }, function (result) {
  224. $.each(result.data, function (index, item) {
  225. //console.log(item);
  226. var markerData = item.markerData;
  227. if (markerData != null) {
  228. var optionsData = {
  229. riskPointId: item.riskPointId,
  230. title: item.markerTitle
  231. };
  232. var layers;
  233. if (item.markerType == 3) {
  234. var data = new Array();
  235. $.each($.parseJSON(markerData), function (index, item) {
  236. data[index] = new Array(item[1], item[0]);
  237. });
  238. layers = L.polygon(data, optionsData);
  239. } else if (item.markerType == 1) {
  240. layers = L.marker($.parseJSON(markerData));
  241. } else if (item.markerType == 2) {
  242. var data = new Array();
  243. $.each($.parseJSON(markerData), function (index, item) {
  244. data[index] = new Array(item[1], item[0]);
  245. });
  246. layers = L.polyline(data, optionsData);
  247. }
  248. plotLayer.addLayer(layers);
  249. }
  250. });
  251. });
  252. //底图为图片
  253. function image_map() {
  254. if (map == undefined || map._loaded == undefined) {
  255. map = L.map(_this.mapContainer, {
  256. crs: L.CRS.Simple,
  257. center: L.latLng(50.5, 30.5),
  258. minZoom: 0,
  259. zoom: 4,
  260. attributionControl: false
  261. });
  262. } else {
  263. loadFlag = false;
  264. }
  265. var yx = L.latLng;
  266. var xy = function xy(x, y) {
  267. if (L.Util.isArray(x)) {
  268. return yx(x[1], x[0]);
  269. }
  270. return yx(y, x);
  271. };
  272. map.eachLayer(function (layer) {
  273. map.removeLayer(layer);
  274. });
  275. var bounds = [xy(-600, -600), xy(300, 300)];
  276. L.imageOverlay(imgPath, bounds).addTo(map);
  277. map.fitBounds(bounds);
  278. }
  279. //底图为百度地图
  280. function baidu_map() {
  281. var maxZoom = 26;
  282. var crs = new L.Proj.CRS('EPSG:3395',
  283. '+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs', {
  284. resolutions: function () {
  285. level = 19;
  286. var res = [];
  287. res[0] = Math.pow(2, 18);
  288. for (var i = 1; i < level; i++) {
  289. res[i] = Math.pow(2, (18 - i))
  290. }
  291. return res;
  292. }(),
  293. origin: [0, 0],
  294. bounds: L.bounds([20037508.342789244, 0], [0, 20037508.342789244])
  295. });
  296. var image = new L.TileLayer(_this.mapTile, {
  297. maxZoom: maxZoom,
  298. minZoom: 10,
  299. subdomains: [0, 1, 2],
  300. tms: true
  301. });
  302. map = L.map(_this.mapContainer, {
  303. crs: crs,
  304. layers: [image]
  305. });
  306. map.setView([34.474387, 109.490437], 14);
  307. }
  308. },
  309. clearMapController() { // 清除地图控制器
  310. map.removeControl(mapControl)
  311. }
  312. }
  313. function iconClick(e) {
  314. $(e).toggleClass('icon-active')
  315. }
  316. </script>
  317. </body>
  318. </html>