MapManager.js 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600
  1. /*+++++++++++++++地图管理类 所有与地图相关的内容均位于此++++++++++++++++++*/
  2. /* 地图组件 */
  3. var jtMapKit;
  4. /* 图层类型 */
  5. var LayerType = {
  6. server: 'server', //服务图层
  7. base: 'base', //基础图层
  8. }
  9. /* 定位比例尺 */
  10. var locationScale = 6000;
  11. /* 地图默认范围 */
  12. var initMapExtent = {
  13. xmin: 118.032810723,
  14. ymin: 34.901398239,
  15. xmax: 118.51750693,
  16. ymax: 35.521009885,
  17. }
  18. /* 案件图层的查询URL及数据过滤条件 */
  19. var caseServerUrl = undefined;
  20. var caseQueryFilter = undefined;
  21. let mapQueryUrl = undefined;
  22. let rasterLayerTitle = "baseYxtMapLayer";
  23. /* 图层配置 */
  24. var layerConfig = undefined;
  25. /* 当前地图用户 */
  26. let mapByUser = undefined;
  27. /**
  28. * 加载地图
  29. * @param {string} MainDivID 地图容器Id
  30. * @param {JSON} user 初始化位置
  31. */
  32. function MapInit(MainDivID, user) {
  33. mapByUser = user;
  34. // muiShowWaitLoading("地图初始化...");
  35. getNetImageRootURL(function(rootUrl) {
  36. /* 初始化地图组件 */
  37. jtMapKit = new JTMapKit({
  38. selector: MainDivID,
  39. serverUrl: rootUrl + "resource/image/",
  40. baseMapUrl: user.baseMapUrl,
  41. });
  42. //挂接主地图的加载事件
  43. jtMapKit.onViewReady = function() {
  44. /* 加载影像地图 */
  45. LoadRasterServer(function() {
  46. /* 初始化范围 */
  47. jtMapKit.zoomToExtent(initMapExtent);
  48. /* 加载矢量地图 */
  49. LoadVectorServer(function() {
  50. muiToast("地图初始化完成!");
  51. jtMapKit.setUIScaleBarVisible(true);
  52. jtMapKit.isLoad = true;
  53. });
  54. });
  55. }
  56. /* 绑定多图层查询开始事件 */
  57. jtMapKit.onQueryLayersTaskBegin = function() {
  58. plus.nativeUI.showWaiting('查询中...');
  59. }
  60. });
  61. }
  62. /**
  63. * 加载栅格服务
  64. * @param {functions} callSuccess 加载成功回调
  65. */
  66. function LoadRasterServer(callSuccess) {
  67. if (layerConfig) {
  68. let rasterLayer = undefined; /* 加载的影像服务 */
  69. /* 寻找当前需要显示的影像图层 */
  70. for (let layer of layerConfig[0].layerList) {
  71. if (layer.layerType === 'base' && layer.layerIsVisible === '1') {
  72. rasterLayer = layer;
  73. break;
  74. }
  75. }
  76. /* 加载影像图 */
  77. jtMapKit.addTileLayer({
  78. url: rasterLayer.layerURL,
  79. title: rasterLayerTitle,
  80. }, function() {
  81. if (callSuccess) callSuccess();
  82. }, function(err) {
  83. console.log(err);
  84. });
  85. }
  86. }
  87. /* 此处方法改造 主要是为了考虑图层加载成功或失败的问题 */
  88. /**
  89. * 添加矢量图层
  90. * @param {function} callComplete 完成回调
  91. */
  92. function LoadVectorServer(callComplete) {
  93. if (layerConfig) {
  94. let vectorLayers = [];
  95. for (let layer of layerConfig[0].layerList) {
  96. if (layer.layerType === 'server') {
  97. // vectorLayers.unshift(layer);
  98. vectorLayers.push(layer);
  99. }
  100. if (layer.layerType === 'server' && layer.isCase === '1') {
  101. caseServerUrl = layer.layerURL + "/" + layer.lyrIdx;
  102. caseQueryFilter = layer.layerIsFilter;
  103. }
  104. }
  105. /* 设置地图查询地址 */
  106. mapQueryUrl = layerConfig[0].layerList[0].layerURL;
  107. appendVectorLayers(0, vectorLayers, function() {
  108. if (callComplete) callComplete();
  109. })
  110. }
  111. }
  112. /**
  113. * 添加图层
  114. * @param {int} index 当前加载的图层索引
  115. * @param {array} layers 加载的图层数组
  116. * @param {function} callComplete 完成回调
  117. */
  118. function appendVectorLayers(index, layers, callComplete) {
  119. if (index === layers.length) {
  120. if (callComplete) callComplete();
  121. } else {
  122. let layer = layers[index];
  123. jtMapKit.addDynamicLayer({
  124. url: layer.layerURL,
  125. title: layer.eName,
  126. subids: [parseInt(layer.lyrIdx)],
  127. visible: layer.layerIsVisible === '1' ? true : false,
  128. labelVisible: layer.labelIsVisible === "1" ? true : false,
  129. filter: layer.layerIsFilter,
  130. }, function() {
  131. appendVectorLayers(index + 1, layers, callComplete);
  132. }, function(err) {
  133. appendVectorLayers(index + 1, layers, callComplete);
  134. });
  135. }
  136. }
  137. /**
  138. * 创建草图绘制回调工具栏
  139. * @param {string} btnTitle 按钮标题名称
  140. * @param {string} functionName 调用函数名称
  141. * @param {JSON} options 调用参数
  142. */
  143. function createToolsBySketch(btnTitle, functionName, options) {
  144. var btnHtml = "";
  145. btnHtml +=
  146. "<button class='mui-btn mui-btn-primary mui-icon app-icon app-icon-map-redo jt-btn-normal'";
  147. btnHtml += " onclick=\"sketchUndo()\">撤销</button>";
  148. btnHtml +=
  149. "<button class='mui-btn mui-btn-primary mui-icon app-icon app-icon-map-undo mui-right jt-btn-normal'";
  150. btnHtml += " onclick=\"sketchRedo()\">恢复</button>";
  151. if (functionName) {
  152. btnHtml +=
  153. "<button class='mui-btn mui-btn-primary mui-icon app-icon app-icon-map-areaquery jt-btn-normal wc-btn-query wc-btn-map-query'";
  154. btnHtml += " onclick=\"" + functionName + "(" + JSON.stringify(options).replace(/\"/g, "'") + ")\">" +
  155. btnTitle + "</button>";
  156. } else {
  157. btnHtml += "<button class='mui-btn mui-btn-primary jt-btn-normal wc-btn-query wc-btn-map-query'>" +
  158. options
  159. .text + "</button>";
  160. }
  161. showNormalResult(btnHtml);
  162. }
  163. /**
  164. * 草图工具 恢复
  165. */
  166. function sketchRedo() {
  167. jtMapKit.sketchRedo();
  168. }
  169. /**
  170. * 草图工具 回退
  171. */
  172. function sketchUndo() {
  173. jtMapKit.sketchUndo();
  174. }
  175. /**
  176. * 定位地图位置
  177. * @param {string} longitude 定位经度
  178. * @param {string} latitude 定位纬度
  179. */
  180. function mapLocation(longitude, latitude) {
  181. var iLongitude = parseFloat(longitude);
  182. var iLatitude = parseFloat(latitude);
  183. jtMapKit.setCenter([iLongitude, iLatitude]);
  184. jtMapKit.setScale(locationScale);
  185. }
  186. /**
  187. * 切换底图为影像底图
  188. */
  189. function EventClick_ShowRaster() {
  190. jtMapKit.loadBaseRasterMap(function() {
  191. });
  192. }
  193. /**
  194. * 切换底图为标准底图
  195. */
  196. function EventClick_ShowVector() {
  197. jtMapKit.loadBaseVectorMap(function() {
  198. });
  199. }
  200. /**
  201. * 测量长度
  202. */
  203. function EventClick_MeasureLength() {
  204. hideNormalResult();
  205. muiToast("地图单击测量长度!");
  206. jtMapKit.eMeasureLength(function(len) {
  207. createToolsBySketch('', undefined, {
  208. text: len,
  209. })
  210. });
  211. }
  212. /**
  213. * 测量面积
  214. */
  215. function EventClick_MeasureArea() {
  216. hideNormalResult();
  217. muiToast("地图单击测量面积!");
  218. jtMapKit.eMeasureArea(function(area) {
  219. createToolsBySketch('', undefined, {
  220. text: area,
  221. })
  222. });
  223. }
  224. /* GPS定位是否开启 */
  225. let gpsIsOn = false;
  226. /**
  227. * 定位位置
  228. */
  229. function EventClick_Location() {
  230. /* 开启或关闭方向监听 */
  231. if (gpsIsOn) {
  232. gpsIsOn = false;
  233. plusOrientationListenerOff(function() {
  234. plusGPSListenerOff(function() {
  235. jtMapKit.gpsRemoveFromMap();
  236. muiToast("定位关闭!");
  237. $("#spanLocationLabel").text("开启定位");
  238. jtMapKit.gpsSetAngle(0);
  239. });
  240. });
  241. } else {
  242. gpsIsOn = true;
  243. plusGPSListenerOn(function(latitude, longitude) {
  244. jtMapKit.gpsAppendToMap({
  245. longitude: longitude,
  246. latitude: latitude,
  247. });
  248. });
  249. plusOrientationListenerOn(function(angle) {
  250. // console.log("方位角 = " + angle);
  251. jtMapKit.gpsSetAngle(angle);
  252. });
  253. muiToast("定位开启!");
  254. $("#spanLocationLabel").text("关闭定位");
  255. }
  256. }
  257. /**
  258. * 地图初始化
  259. */
  260. function EventClick_MapInit() {
  261. jtMapKit.zoomToExtent(initMapExtent);
  262. muiToast("地图范围已初始化!");
  263. }
  264. /**
  265. * 查询地图上点击位置的坐标
  266. */
  267. function EventClick_QueryCoord() {
  268. hideNormalResult();
  269. muiToast("地图单击,获取地理坐标!");
  270. jtMapKit.eMeasureCoordinate(function(res) {
  271. let msg = "经度:" + res.x.toFixed(6) + " 纬度:" + res.y.toFixed(6);
  272. showNormalResult(msg);
  273. });
  274. }
  275. /**
  276. * 输入坐标进行查询定位
  277. */
  278. function EventClick_CoordQuery() {
  279. mui('#popoverCoordLocation').popover('toggle');
  280. }
  281. /**
  282. * 输入定位按钮
  283. */
  284. function EventClick_InputLocation() {
  285. var longitude = $("#iLongitude").val();
  286. var latitude = $("#iLatitude").val();
  287. if (longitude == '') {
  288. muiAlert("请输入经度", "提示", function() {
  289. $("#iLongitude").focus();
  290. });
  291. return;
  292. }
  293. if (latitude == '') {
  294. muiAlert("请输入纬度", "提示", function() {
  295. $("#iLatitude").focus();
  296. });
  297. return;
  298. }
  299. var fLongitude = parseFloat(longitude);
  300. var fLatitude = parseFloat(latitude);
  301. if (fLongitude < 100 || fLongitude > 150) {
  302. muiAlert("经度数值必须在100~150之间", "提示", function() {
  303. $("#iLongitude").focus();
  304. });
  305. return;
  306. }
  307. if (fLatitude < 20 || fLatitude > 50) {
  308. muiAlert("纬度数值必须在20~50之间", "提示", function() {
  309. $("#iLatitude").focus();
  310. });
  311. return;
  312. }
  313. jtMapKit.AddPointToMap(fLongitude, fLatitude);
  314. }
  315. /**
  316. * 清除绘制内容 恢复地图初始状态
  317. */
  318. function EventClick_Clean() {
  319. jtMapKit.DeleteTempDraw(function() {
  320. hideNormalResult();
  321. });
  322. }
  323. /* 控制的图层数组 */
  324. var controlLayers = [];
  325. var controlCategorys = [];
  326. /**
  327. * 图层控制事件
  328. * @param {Object} btnObj 按钮
  329. */
  330. function EventClick_Layer(btnObj) {
  331. /* 初始化图层控制数组 */
  332. controlLayers = [];
  333. controlCategorys = [];
  334. /* 组装图层控制 */
  335. if (layerConfig) {
  336. /* 获取分组 */
  337. for (var i in layerConfig[0].categoryList) {
  338. var category = layerConfig[0].categoryList[i];
  339. controlCategorys.push({
  340. name: category.cyName,
  341. childs: "",
  342. });
  343. }
  344. /* 获取具体图层 */
  345. for (var i in layerConfig[0].layerList) {
  346. /* 添加到控制数组 */
  347. var layer = layerConfig[0].layerList[i];
  348. controlLayers.push(layer);
  349. var parLayer = {
  350. layerType: layer.layerType,
  351. eName: layer.eName,
  352. };
  353. var mmm = "";
  354. if (layer.layerType == LayerType.server) {
  355. mmm += "<div class='mui-input-row jt-layer-control-input-row'>";
  356. mmm += "<label><span class='app-icon app-icon-map-layer-vector'></span>" + layer
  357. .cName +
  358. "</label>";
  359. if (layer.layerIsVisible == "1") {
  360. mmm += "<input name='checkbox' type='checkbox' checked";
  361. } else {
  362. mmm += "<input name='checkbox' type='checkbox'";
  363. }
  364. mmm += " onclick=\"LayerControl(this,'" + layer.eName + "','" + layer.layerType + "')\">";
  365. /* 加入控制图层标注 */
  366. mmm += "<span class='jt-label'>标注</span>";
  367. if (layer.labelIsVisible == "1") {
  368. mmm += "<input name='checkbox' type='checkbox' checked";
  369. } else {
  370. mmm += "<input name='checkbox' type='checkbox'";
  371. }
  372. mmm += " onclick=\"LayerLabelControl(this,'" + layer.eName + "')\">";
  373. } else if (layer.layerType == LayerType.base) {
  374. mmm += "<div class='mui-input-row jt-layer-control-input-row'>";
  375. mmm += "<label><span class='app-icon app-icon-map-layer-raster'></span>" + layer
  376. .cName +
  377. "</label>"
  378. if (layer.layerIsVisible == "1") {
  379. mmm += "<input name='chkbaselayer' type='checkbox' checked";
  380. } else {
  381. mmm += "<input name='chkbaselayer' type='checkbox'";
  382. }
  383. mmm += " onclick=\"LayerControl(this,'" + layer.eName + "','" + layer.layerType + "')\">";
  384. }
  385. mmm += "</div>";
  386. /* 加入分组 */
  387. for (var cIdx = 0; cIdx < controlCategorys.length; cIdx++) {
  388. if (layer.pName == controlCategorys[cIdx].name) {
  389. controlCategorys[cIdx].childs += mmm;
  390. continue;
  391. }
  392. }
  393. }
  394. /* 组装并展示 */
  395. var contentHtml = "";
  396. for (var i in controlCategorys) {
  397. var content = controlCategorys[i];
  398. if (content.childs != "") {
  399. contentHtml += "<h5 class='jt-layer-control-label'>" + content.name + "</h5>";
  400. contentHtml += "<form class='mui-input-group jt-layer-control-content'>" + content
  401. .childs + "</form>";
  402. }
  403. }
  404. showRightResultWindow("图层管理", contentHtml);
  405. }
  406. }
  407. /**
  408. * 存储图层设置
  409. * @param {string} layerName 图层名称
  410. * @param {boolean} isVisible 显示/隐藏
  411. */
  412. function SaveLayerControl(layerName, isVisible) {
  413. if (layerConfig) {
  414. for (let layer of layerConfig[0].layerList) {
  415. if (layer.eName.toLocaleLowerCase() === layerName.toLocaleLowerCase()) {
  416. layer.layerIsVisible = isVisible === true ? "1" : "0";
  417. break;
  418. }
  419. }
  420. /* 更新图层控制信息本地化 */
  421. saveStorage({
  422. key: layerKey,
  423. value: JSON.stringify(layerConfig),
  424. })
  425. }
  426. }
  427. /**
  428. * 控制图层显示或隐藏
  429. * @param {Object} obj checkbox控件
  430. * @param {string} layerName 图层名称
  431. * @param {string} layerType 图层类型
  432. */
  433. function LayerControl(obj, layerName, layerType) {
  434. /* 定义控制图层 */
  435. let controlLayer = undefined;
  436. if (layerConfig) {
  437. /* 如果设置的影像基础图层 则将全部显示的图层默认设置为关闭 */
  438. if (layerType === LayerType.base) {
  439. /* 设置全部图层默认关闭 */
  440. for (let layer of layerConfig[0].layerList) {
  441. if (layer.layerType === LayerType.base) {
  442. layer.layerIsVisible = "0";
  443. }
  444. }
  445. /* 设置控件样式 */
  446. if (obj.checked) {
  447. /* 设置其他控件为关闭状态 */
  448. let chkObjs = document.getElementsByName('chkbaselayer');
  449. for (let chkObj of chkObjs) {
  450. chkObj.checked = false;
  451. }
  452. /* 设置当前控件为选择状态 */
  453. obj.checked = true;
  454. }
  455. }
  456. /* 先找到需要控制的图层 */
  457. for (let layer of layerConfig[0].layerList) {
  458. if (layer.eName === layerName) {
  459. layer.layerIsVisible = obj.checked ? "1" : "0";
  460. controlLayer = layer;
  461. }
  462. }
  463. /* 更新图层控制信息本地化 */
  464. saveStorage({
  465. key: layerKey,
  466. value: JSON.stringify(layerConfig),
  467. })
  468. }
  469. /* 判断控制的图层是 要素图层/影像图层 */
  470. if (controlLayer && controlLayer.layerType == LayerType.server) {
  471. jtMapKit.setVisibleByName(controlLayer.eName, controlLayer.layerIsVisible == "1" ? true : false);
  472. } else if (controlLayer && controlLayer.layerType === LayerType.base) {
  473. jtMapKit.removeLayer(rasterLayerTitle, function() {
  474. if (obj.checked) {
  475. jtMapKit.addTileLayer({
  476. url: controlLayer.layerURL,
  477. title: rasterLayerTitle,
  478. });
  479. }
  480. }, function(err) {
  481. /* 说明要删除的图层不存在 */
  482. if (obj.checked) {
  483. jtMapKit.addTileLayer({
  484. url: controlLayer.layerURL,
  485. title: rasterLayerTitle,
  486. });
  487. }
  488. });
  489. }
  490. }
  491. /**
  492. * 图层标注控制
  493. * @param {Object} obj CheckBox控件
  494. * @param {string} layerName 图层名称
  495. */
  496. function LayerLabelControl(obj, layerName) {
  497. /* 获取当前控制的图层 */
  498. if (layerConfig) {
  499. let isVisible = undefined;
  500. for (let layer of layerConfig[0].layerList) {
  501. if (layer.eName === layerName) {
  502. layer.labelIsVisible = obj.checked ? "1" : "0";
  503. isVisible = layer.labelIsVisible;
  504. break; //退出循环
  505. }
  506. }
  507. if (isVisible) jtMapKit.setLabelVisibleByName(layerName, isVisible === '1' ? true : false);
  508. }
  509. /* 更新图层本地化 */
  510. saveStorage({
  511. key: layerKey,
  512. value: JSON.stringify(layerConfig),
  513. })
  514. }
  515. /**
  516. * 右侧弹出窗口并展示内容
  517. * @param {String} title 标题
  518. * @param {String} content 展示内容
  519. */
  520. function showRightResultWindow(title, content) {
  521. /* 如果已经弹出图层控制 则关闭显示 */
  522. if (mui('.mui-off-canvas-wrap').offCanvas().isShown()) {
  523. $("#divTitle").html(title);
  524. $("#divContent").html(content);
  525. } else {
  526. $("#divTitle").html(title);
  527. $("#divContent").html(content);
  528. /* 打印 */
  529. mui('.mui-off-canvas-wrap').offCanvas('show');
  530. }
  531. }
  532. /**
  533. * 展示查询结果
  534. * @param {Array[string,string]} Ids 查询要素集
  535. */
  536. function showQueryTaskResult(Ids) {
  537. queryCaseIds = [];
  538. for (let Id of Ids) {
  539. queryCaseIds.push(Id);
  540. }
  541. caseBase.queryDataByCaseId(queryCaseIds);
  542. }
  543. /**
  544. * 显示结果内容
  545. * @param {Object} result 结果信息
  546. */
  547. function showNormalResult(result) {
  548. $('.cr-result div').html(result);
  549. if ($('.cr-result').is(':hidden')) {
  550. $('.cr-result').slideDown(200, function() {});
  551. }
  552. }
  553. /**
  554. * 隐藏查询工具
  555. * @param {function} callback 隐藏后回调
  556. */
  557. function hideNormalResult(callback) {
  558. $('.cr-result').hide(function() {
  559. if (callback) callback();
  560. });
  561. }
  562. /**
  563. * 地图点击查询图层数据
  564. */
  565. function EventClick_Query_Point() {
  566. hideNormalResult();
  567. /* 查询的图层数组 */
  568. let queryLayers = [];
  569. for (let layer of layerConfig[0].layerList) {
  570. if (layer.isQuery == "1" && layer.layerIsVisible == '1') {
  571. queryLayers.push({
  572. id: layer.lyrIdx,
  573. fldName: layer.showField,
  574. eName: layer.eName,
  575. cName: layer.cName,
  576. isCase: layer.isCase === '1' ? true : false,
  577. });
  578. }
  579. }
  580. if (queryLayers.length == 0) {
  581. muiAlert("请开启显示需要查询的图层!");
  582. return;
  583. }
  584. muiToast("地图上单击,查询当前可视的地图数据!");
  585. jtMapKit.manyLayerQueryByPoint({
  586. url: mapQueryUrl,
  587. queryLayers: queryLayers,
  588. }, function(res) {
  589. showManyLayerQueryResult(res);
  590. }, function(err) {
  591. muiAlert(err, '提示');
  592. });
  593. }
  594. /**
  595. * 地图区域查询图层数据
  596. */
  597. function EventClick_Query_Polygon() {
  598. hideNormalResult();
  599. /* 查询的图层数组 */
  600. let queryLayers = [];
  601. for (let layer of layerConfig[0].layerList) {
  602. if (layer.isQuery == "1" && layer.layerIsVisible == '1') {
  603. queryLayers.push({
  604. id: layer.lyrIdx,
  605. fldName: layer.showField,
  606. eName: layer.eName,
  607. cName: layer.cName,
  608. isCase: layer.isCase === '1' ? true : false,
  609. });
  610. }
  611. }
  612. if (queryLayers.length == 0) {
  613. muiAlert("请开启需要查询的图层!");
  614. return;
  615. }
  616. muiToast("地图上单击绘制查询区域,单击查询按钮开始查询数据!");
  617. jtMapKit.manyLayerQueryByPolygon({
  618. url: mapQueryUrl,
  619. queryLayers: queryLayers,
  620. }, function(op) {
  621. createToolsBySketch('开始查询', 'manyLayerQuerySpatialData', {
  622. geometry: op.geometry,
  623. });
  624. }, function(res) {
  625. hideNormalResult();
  626. showManyLayerQueryResult(res);
  627. }, function(err) {
  628. hideNormalResult();
  629. muiAlert(err, '提示');
  630. });
  631. }
  632. /**
  633. * 通用占压分析
  634. */
  635. function EventClick_Common_Spatial_Analysis() {
  636. muiToast("地图上单击绘制分析区域,单击分析按钮进行占压分析!");
  637. jtMapKit.commonOccupyAnalysis(function(res) {
  638. createToolsBySketch('占压分析', 'commonSpatialAnalysis', {
  639. geometry: res,
  640. });
  641. })
  642. hideNormalResult();
  643. }
  644. /**
  645. * 开始根据绘制进行多图层查询
  646. * @param {JSON} options 参数项
  647. * options.queryLayers{array{JSON}}:可查询图层数组
  648. * options.url{string}:查询服务地址
  649. * options.geometry{JSON}:查询参考要素
  650. */
  651. function manyLayerQuerySpatialData(options) {
  652. if (options.geometry == undefined || options.geometry.rings[0].length <= 3) {
  653. muiAlert("绘制的区域不符合要求,请继续绘制");
  654. return;
  655. }
  656. jtMapKit.manyLayerQueryByPolygonComplete();
  657. }
  658. /**
  659. * 开始根据绘制区域进行空间占压分析
  660. * @param {JSON} options 参数项
  661. * options.geometry{string}:坐标串
  662. */
  663. function commonSpatialAnalysis(options) {
  664. let count = options.geometry.split(',').length;
  665. if (count < 8) {
  666. muiAlert("绘制的区域不符合要求,请继续绘制");
  667. return;
  668. }
  669. /* 隐藏窗口 */
  670. hideNormalResult();
  671. /* 锁定草图 */
  672. jtMapKit.sketchComplete();
  673. /* 查询配置表 */
  674. csaConfig = [];
  675. sendAjax({
  676. url: 'appQuerySpatialAnalysisConfig',
  677. data: {
  678. tabName: 'zdfx'
  679. },
  680. waitMessage: '初始化...',
  681. success: function(resData) {
  682. /* 装配配置表 */
  683. for (let item of resData[0].itemList) {
  684. csaConfig.push({
  685. tabEName: item.tabEName,
  686. tabCName: item.tabCName,
  687. fldName: item.fldEName,
  688. cntName: item.cntName,
  689. cntCName: item.cntCName,
  690. geoCoords: options.geometry,
  691. isDelete: '0',
  692. })
  693. }
  694. /* 执行分析 */
  695. if (csaConfig.length > 0) {
  696. csaConfig[0].isDelete = "1"; /* 设置删除原有数据标志 */
  697. _executeCSA(0);
  698. } else {
  699. muiAlertError("没有配置数据,请联系管理员!");
  700. }
  701. },
  702. error: function(err) {
  703. muiAlertError(err);
  704. }
  705. })
  706. }
  707. /* 通用占压分析配置表 */
  708. let csaConfig = [];
  709. /**
  710. * 执行通用占压分析
  711. * @param {int} index 配置索引
  712. */
  713. function _executeCSA(index) {
  714. if (index == csaConfig.length) {
  715. console.log("占压分析执行完成...");
  716. /* 清除已有数据 */
  717. csaDatas = [];
  718. /* 分析完成 开始查询结果数据 */
  719. // _queryCSAData(0);
  720. _queryCSACount();
  721. return;
  722. }
  723. sendAjax({
  724. url: 'appExecuteCommonSpatialAnalysis',
  725. data: csaConfig[index],
  726. waitMessage: '执行' + csaConfig[index].tabCName + "占压分析...",
  727. success: function(resData) {
  728. _executeCSA(index + 1);
  729. },
  730. error: function(err) {
  731. _executeCSA(index + 1);
  732. console.log(err);
  733. }
  734. })
  735. }
  736. /**
  737. * 查询占压分析统计结果
  738. */
  739. function _queryCSACount() {
  740. sendAjax({
  741. url: 'appQueryOccupyAnalysisCount',
  742. waitMessage: '查询中...',
  743. data: {},
  744. success: function(resData) {
  745. let csaCounts = [];
  746. for (let data of resData) {
  747. let items = [];
  748. for (let item of data.itemList) {
  749. items.push({
  750. selCode: item.selCode,
  751. selName: item.selName,
  752. selNumber: item.selNumber,
  753. })
  754. }
  755. csaCounts.push({
  756. tabName: data.tabName,
  757. fldName: data.fldName,
  758. items: items,
  759. });
  760. _showCSACountResult(csaCounts);
  761. }
  762. },
  763. error: function(err) {
  764. muiAlertError(err);
  765. }
  766. })
  767. }
  768. /**
  769. * 展示统计数据
  770. * @param {Array} datas 统计数据Array{JSON}
  771. */
  772. function _showCSACountResult(datas) {
  773. /* 初始化 加入根节点*/
  774. let divRoot = document.createElement('div');
  775. divRoot.className = 'jt-csa-count-result-panel';
  776. let rootHtml = "";
  777. /* 创建横向滚动tab */
  778. rootHtml +=
  779. "<div class='mui-scroll-wrapper mui-slider-indicator mui-segmented-control mui-segmented-control-inverted'>";
  780. rootHtml += "<div class='mui-scroll'>";
  781. for (let i = 0; i < datas.length; i++) {
  782. let data = datas[i];
  783. rootHtml += "<a href='#csa_count_" + i + "' class='mui-control-item";
  784. if (i === 0) {
  785. rootHtml += " mui-active";
  786. }
  787. rootHtml += "'>" + data.tabName + "</a>";
  788. }
  789. rootHtml += "</div>";
  790. rootHtml += "</div>";
  791. /* 创建统计信息详细内容 */
  792. rootHtml += "<div class='mui-content-padded'>";
  793. for (let i = 0; i < datas.length; i++) {
  794. let data = datas[i];
  795. rootHtml += "<div id='csa_count_" + i + "' class='mui-control-content";
  796. if (i === 0) {
  797. rootHtml += " mui-active";
  798. }
  799. rootHtml += "'>";
  800. /* 加入具体内容头 */
  801. rootHtml += "<div class='jt-row-head'>";
  802. rootHtml += "<span onclick='showDetails(this)'>" + data.fldName + "</span>";
  803. rootHtml += "<span>面积</span>";
  804. rootHtml += "</div>";
  805. /* 加入数据 */
  806. rootHtml += "<div class='jt-row-content'>";
  807. rootHtml += "<div class='mui-scroll-wrapper'>";
  808. rootHtml += "<div class='mui-scroll'>";
  809. for (let item of data.items) {
  810. rootHtml += "<div class='jt-row'>";
  811. rootHtml += "<span onclick='showDetails(this)'>" + item.selCode + "</span>";
  812. rootHtml += "<span onclick='showDetails(this)'>" + item.selName + "</span>";
  813. rootHtml += "</div>";
  814. }
  815. rootHtml += "</div>";
  816. rootHtml += "</div>";
  817. rootHtml += "</div>";
  818. rootHtml += "</div>";
  819. }
  820. rootHtml += "</div>";
  821. divRoot.innerHTML = rootHtml;
  822. /* 创建弹窗的标题头 */
  823. var header = document.createElement('header');
  824. header.className = 'mui-bar';
  825. let headHtml = "<div class='jt-cnt-bar'>";
  826. headHtml +=
  827. "<button type='button' class='app-icon app-iocn-details jt-cnt-bar-button' onclick='_queryCSAData(0)'>详细信息</button>";
  828. headHtml += "<span class='jt-cnt-bar-title'>占压分析统计</span>";
  829. headHtml += "</div>";
  830. header.innerHTML = headHtml;
  831. /* 显示信息 */
  832. _showMuiPopover(header, divRoot);
  833. }
  834. /**
  835. * 显示结果内容
  836. * @param {Object} domHeader 标题
  837. * @param {Object} domContent 内容
  838. * @param {boolean} isCase 多图层查询包含案件 调整弹出框高度
  839. */
  840. function _showMuiPopover(domHeader, domContent, isCase) {
  841. if (isCase && isCase === true) {
  842. $("#queryResultPopover").addClass('wc-popover-case-property');
  843. } else {
  844. $("#queryResultPopover").removeClass('wc-popover-case-property');
  845. }
  846. /* 清除原有显示内容 */
  847. $("#queryResultPopover").html('');
  848. /* 添加弹框显示内容 */
  849. $("#queryResultPopover").append(domHeader);
  850. $("#queryResultPopover").append(domContent);
  851. /* 显示弹框 */
  852. mui("#queryResultPopover").popover('show');
  853. /* 重置滚动容器 该方法是必须的 否则将导致滚动容器滚动失败 */
  854. mui('.mui-scroll-wrapper').scroll();
  855. /* 给标题添加事件 */
  856. domHeader.onclick = function() {
  857. mui("#queryResultPopover").popover('hide');
  858. };
  859. }
  860. /* 查询结果数据集 */
  861. let csaDatas = [];
  862. /**
  863. * 查询通用占地分析数据
  864. * @param {int} index 查询索引
  865. */
  866. function _queryCSAData(index) {
  867. if (index == csaConfig.length) {
  868. // _initCSAData(csaDatas);
  869. _initCSADetailData(csaDatas);
  870. return;
  871. }
  872. sendAjax({
  873. url: 'appQueryCommonSpatialAnalysis',
  874. data: {
  875. tabEName: csaConfig[index].tabEName,
  876. start: '1',
  877. count: '10',
  878. },
  879. waitMessage: '查询' + csaConfig[index].tabCName + "分析结果...",
  880. success: function(resData) {
  881. if (resData[0].dataCount > 0) {
  882. let items = [];
  883. for (let item of resData[0].dataList) {
  884. items.push(item);
  885. }
  886. csaDatas.push({
  887. config: {
  888. name: csaConfig[index].tabCName,
  889. isLast: resData[0].isLast,
  890. },
  891. queryParam: {
  892. tabEName: csaConfig[index].tabEName,
  893. start: '1',
  894. count: '10',
  895. },
  896. items: items,
  897. });
  898. }
  899. _queryCSAData(index + 1);
  900. },
  901. error: function(err) {
  902. _queryCSAData(index + 1);
  903. }
  904. })
  905. }
  906. /**
  907. * 展示通用占压分析明细数据
  908. * @param {Array} datas 明细数据Array{JSON}
  909. */
  910. function _initCSADetailData(datas) {
  911. /* 初始化 加入根节点*/
  912. let divRoot = document.createElement('div');
  913. divRoot.className = 'jt-csa-count-result-panel';
  914. let rootHtml = "";
  915. /* 创建横向滚动tab */
  916. rootHtml +=
  917. "<div class='mui-scroll-wrapper mui-slider-indicator mui-segmented-control mui-segmented-control-inverted'>";
  918. rootHtml += "<div class='mui-scroll'>";
  919. for (let i = 0; i < datas.length; i++) {
  920. let data = datas[i];
  921. rootHtml += "<a href='#item_count" + i + "' class='mui-control-item";
  922. if (i === 0) {
  923. rootHtml += " mui-active";
  924. }
  925. rootHtml += "'>" + data.config.name + "</a>";
  926. }
  927. rootHtml += "</div>";
  928. rootHtml += "</div>";
  929. /* 创建具体内容 */
  930. rootHtml += "<div class='mui-content-padded'>";
  931. for (let i = 0; i < datas.length; i++) {
  932. let data = datas[i];
  933. rootHtml += "<div id='item_count" + i + "' class='mui-control-content jt-mui-control-content";
  934. if (i === 0) {
  935. rootHtml += " mui-active";
  936. }
  937. rootHtml += "'>";
  938. rootHtml += "<div class='jt-row-content'>";
  939. rootHtml += "<div class='mui-scroll-wrapper'>";
  940. let panelId = 'panel' + i;
  941. rootHtml += "<div class='mui-scroll' id='" + panelId + "'>";
  942. rootHtml += _createCASDetailDataItem(data.items, panelId, data.config.isLast, data.queryParam);
  943. /* 以上是具体内容 */
  944. rootHtml += "</div>";
  945. rootHtml += "</div>";
  946. rootHtml += "</div>";
  947. rootHtml += "</div>";
  948. }
  949. rootHtml += "</div>";
  950. divRoot.innerHTML = rootHtml;
  951. /* 创建弹窗的标题头 */
  952. var header = document.createElement('header');
  953. header.className = 'mui-bar';
  954. let headHtml = "<div class='jt-cnt-bar'>";
  955. headHtml +=
  956. "<button type='button' class='app-icon app-iocn-details jt-cnt-bar-button' onclick='_queryCSACount()'>统计信息</button>";
  957. headHtml += "<span class='jt-cnt-bar-title'>占压分析明细</span>";
  958. headHtml += "</div>";
  959. header.innerHTML = headHtml;
  960. /* 显示弹框 */
  961. _showMuiPopover(header, divRoot);
  962. }
  963. /**
  964. * 根据数据项创建Html
  965. * @param {JSON} items 数据集
  966. * @param {string} domId 装载数据项的容器Id
  967. * @param {string} isLast 是否到达数据末尾
  968. * @param {JSON} queryParam 数据查询参数
  969. */
  970. function _createCASDetailDataItem(items, domId, isLast, queryParam) {
  971. let itemHtml = "";
  972. for (let j = 0; j < items.length; j++) {
  973. let item = items[j];
  974. if (j % 2 == 0) {
  975. itemHtml += "<div class='jt-feature-data-row jt-row-even-number'>";
  976. } else {
  977. itemHtml += "<div class='jt-feature-data-row jt-row-odd-number'>";
  978. }
  979. itemHtml += "<span>" + item.rowNumber + "</span>";
  980. itemHtml += "<span class='jt-nowrap' onclick='showDetails(this)'>" + item.showName + "</span>";
  981. itemHtml += "<span class='jt-nowrap' onclick='showDetails(this)'>" + item.feaArea + "亩</span>";
  982. itemHtml += "<button type='button' class='mui-btn app-icon app-icon-location jt-button'";
  983. itemHtml += " onclick = \"_queryFeatureWktAndLocation('" + item.oid +
  984. "','fx_common_spatial_analysis')\" />";
  985. itemHtml += "<button type='button' class='mui-btn app-icon app-iocn-details jt-button'";
  986. itemHtml += " onclick = \"openDetailsPage('" + item.tabEName + "','" + item.fId + "')\" />"
  987. itemHtml += "</div>";
  988. }
  989. /* 删除加载更多按钮 */
  990. let btnPanelId = domId + "_" + "lastDom";
  991. $("#" + btnPanelId).remove();
  992. /* 判断是否需要加载更多按钮 */
  993. if (isLast === '0') {
  994. itemHtml += "<div class='jt-csa-data-item-row' id='" + btnPanelId + "'>";
  995. itemHtml += "<button class='mui-btn mui-btn-block jt-btn-load'";
  996. itemHtml += " onclick=\"_loadManyCSAData('" + domId + "'," + JSON.stringify(queryParam).replace(/\"/g,
  997. "'") + ")\"/>";
  998. itemHtml += "加载更多";
  999. itemHtml += "</button>";
  1000. itemHtml += "</div>"
  1001. }
  1002. return itemHtml;
  1003. }
  1004. /**
  1005. * 查询要素并定位
  1006. * @param {string} objId objectid
  1007. * @param {string} tabName 数据表名称
  1008. */
  1009. function _queryFeatureWktAndLocation(objId, tabName) {
  1010. var iData = {
  1011. tabName: tabName,
  1012. objId: objId,
  1013. }
  1014. sendAjax({
  1015. type: 'post',
  1016. url: "appQueryJSONCoordinates",
  1017. waitMessage: '正在查询图形数据...',
  1018. data: iData,
  1019. success: function(resData) {
  1020. let item = resData[0];
  1021. if (item.type === 'Polygon' || item.type === 'MultiPolygon') {
  1022. jtMapKit.appendPolygonToMap({
  1023. type: item.type,
  1024. coordinates: item.coordinates,
  1025. })
  1026. } else {
  1027. muiAlertError('图形异常,请联系管理员!');
  1028. }
  1029. },
  1030. error: function(err) {
  1031. muiAlertError(err);
  1032. }
  1033. })
  1034. }
  1035. /**
  1036. * @param {string} domId 数据装载容器Id
  1037. * @param {JSON} queryParam 查询参数
  1038. */
  1039. function _loadManyCSAData(domId, queryParam) {
  1040. queryParam.start = parseInt(queryParam.start) + parseInt(queryParam.count);
  1041. sendAjax({
  1042. url: 'appQueryCommonSpatialAnalysis',
  1043. data: queryParam,
  1044. waitMessage: '加载更多数据...',
  1045. success: function(resData) {
  1046. let itemHtml = _createCASDetailDataItem(resData[0].dataList, domId, resData[0].isLast,
  1047. queryParam);
  1048. $("#" + domId).html($("#" + domId).html() + itemHtml);
  1049. },
  1050. error: function(err) {
  1051. muiAlertError(err);
  1052. }
  1053. })
  1054. }
  1055. /**
  1056. * 控制通用占地分析数据项容器显示/隐藏
  1057. * @param {Object} dom 点击事件的dom
  1058. * @param {int} index 数据项容器索引
  1059. */
  1060. function _showCSADataItem(dom, index) {
  1061. /* 指示器点击 */
  1062. indicator(dom);
  1063. /* 设置所有数据项容器默认隐藏 */
  1064. $(".jt-csa-data-panel").each(function(index, element) {
  1065. $(element).hide();
  1066. });
  1067. /* 显示当前数据项 */
  1068. $($(".jt-csa-data-panel")[index]).show();
  1069. /* 设置滚动条到最顶端 */
  1070. mui('#csaScrollWrapper').scroll().scrollTo(0, 0, 100); //100毫秒滚动到顶
  1071. }
  1072. /* 多图层查询结果展示相关 */
  1073. /**
  1074. * 多图层查询结果展示
  1075. * @param {JSON} datas
  1076. */
  1077. function showManyLayerQueryResult(datas, isInputQuery) {
  1078. /* 案件要素 */
  1079. let caseItems = undefined;
  1080. /* 承载案件的容器 */
  1081. let caseDomId = undefined;
  1082. /* 可修改内容的容器Id */
  1083. let caseHeadDomId = undefined;
  1084. /* 初始化 加入根节点*/
  1085. let divRoot = document.createElement('div');
  1086. divRoot.className = 'jt-csa-count-result-panel';
  1087. let rootHtml = "";
  1088. /* 创建横向滚动tab */
  1089. rootHtml +=
  1090. "<div class='mui-scroll-wrapper mui-slider-indicator mui-segmented-control mui-segmented-control-inverted'>";
  1091. rootHtml += "<div class='mui-scroll'>";
  1092. for (let i = 0; i < datas.length; i++) {
  1093. let data = datas[i];
  1094. let topDomId = "top_item_" + i;
  1095. rootHtml += "<a href='#item_count" + i + "' class='mui-control-item";
  1096. if (i === 0) {
  1097. if (datas.length === 1) {
  1098. rootHtml += " jt-control-item mui-active";
  1099. } else {
  1100. rootHtml += " mui-active";
  1101. }
  1102. }
  1103. rootHtml += "' id='" + topDomId + "'>" + data.cName + "</a>";
  1104. if (data.isCase) {
  1105. caseHeadDomId = topDomId;
  1106. }
  1107. }
  1108. rootHtml += "</div>";
  1109. rootHtml += "</div>";
  1110. /* 创建具体内容 */
  1111. rootHtml += "<div class='mui-content-padded'>";
  1112. for (let i = 0; i < datas.length; i++) {
  1113. let data = datas[i];
  1114. rootHtml += "<div id='item_count" + i + "' class='mui-control-content jt-mui-control-content";
  1115. if (i === 0) {
  1116. rootHtml += " mui-active";
  1117. }
  1118. rootHtml += "'>";
  1119. rootHtml += "<div class='jt-row-content'>";
  1120. rootHtml += "<div class='mui-scroll-wrapper'>";
  1121. let panelId = 'panel' + i;
  1122. rootHtml += "<div class='mui-scroll' id='" + panelId + "'>";
  1123. if (!data.isCase) {
  1124. rootHtml += createManyLayerQueryItem(data.features);
  1125. } else {
  1126. caseDomId = panelId;
  1127. if (!isInputQuery) {
  1128. caseItems = data.features;
  1129. } else {
  1130. caseItems = data.caseId;
  1131. }
  1132. }
  1133. /* 以上是具体内容 */
  1134. rootHtml += "</div>";
  1135. rootHtml += "</div>";
  1136. rootHtml += "</div>";
  1137. rootHtml += "</div>";
  1138. }
  1139. rootHtml += "</div>";
  1140. divRoot.innerHTML = rootHtml;
  1141. /* 创建弹窗的标题头 */
  1142. /* 创建弹窗的标题头 */
  1143. var header = document.createElement('header');
  1144. header.className = 'mui-bar';
  1145. header.innerHTML = '查询结果';
  1146. /* 显示弹框 */
  1147. _showMuiPopover(header, divRoot, true);
  1148. /* 判断是否存案件 */
  1149. if (caseDomId && caseItems && caseHeadDomId) {
  1150. _manyLayerQueryCases(caseDomId, caseItems, caseHeadDomId);
  1151. }
  1152. }
  1153. /* 记录案件展示轮播器当前位置及总数 */
  1154. let caseSliderCurrentIndex = 0;
  1155. let caseSliderItemCount = 0;
  1156. let caseSliderQueryModel = undefined;
  1157. let caseSliderContent = undefined;
  1158. let caseSliderIsLast = false;
  1159. /**
  1160. * 装载案件
  1161. * @param {String} domId 承载内容的容器Id
  1162. * @param {Array} items 数据集
  1163. * @param {String} domHeadId 子容器关联的标题头容器Id
  1164. */
  1165. function _manyLayerQueryCases(domId, items, domHeadId) {
  1166. /* 初始化案件展示轮播器当前位置及项目总数 */
  1167. caseSliderCurrentIndex = 0;
  1168. caseSliderItemCount = 0;
  1169. caseSliderIsLast = false;
  1170. caseSliderQueryModel = undefined;
  1171. caseSliderContent = undefined;
  1172. /* 创建查询模型 */
  1173. caseSliderQueryModel = {
  1174. userID: mapByUser.userID,
  1175. queryCount: '10',
  1176. queryType: 'Input',
  1177. startNum: '0',
  1178. additionalConditions: '',
  1179. }
  1180. /* 重置标题头容器样式 */
  1181. $("#" + domHeadId).addClass('jt-segmented-control-item');
  1182. setCaseHeadContent(domHeadId, '案件图斑', undefined, undefined, false);
  1183. if (Object.prototype.toString.call(items) === '[object Array]') {
  1184. let caseIds = [];
  1185. /* 加载案件Id */
  1186. for (let item of items) {
  1187. caseIds.push("'" + item.sValue + "'");
  1188. }
  1189. caseSliderQueryModel.additionalConditions = "ajh in (" + caseIds.toString() + ")";
  1190. } else {
  1191. caseSliderQueryModel.additionalConditions = "ajh like '%" + items + "%'";
  1192. }
  1193. /* 创建内容slider容器*/
  1194. let divSlider = document.createElement('div');
  1195. divSlider.className = 'mui-slider';
  1196. /* 创建具体内容容器 */
  1197. caseSliderContent = document.createElement('div');
  1198. caseSliderContent.className = 'mui-slider-group'
  1199. divSlider.append(caseSliderContent);
  1200. /* 加入slider到容器中 */
  1201. $("#" + domId).append(divSlider);
  1202. /* 滑动组件滑动监听 */
  1203. document.querySelector(".mui-slider").addEventListener('slide', function(event) {
  1204. /* 记录当前滑动位置 */
  1205. caseSliderCurrentIndex = event.detail.slideNumber;
  1206. if (caseSliderCurrentIndex === caseSliderItemCount - 1 && !caseSliderIsLast) {
  1207. setCaseHeadContent(domHeadId, '案件图斑', caseSliderCurrentIndex, caseSliderItemCount, true);
  1208. } else {
  1209. setCaseHeadContent(domHeadId, '案件图斑', caseSliderCurrentIndex, caseSliderItemCount, false);
  1210. }
  1211. });
  1212. /* 加载数据 */
  1213. _manyLayerQueryAndAppendItems(caseSliderQueryModel, caseSliderContent, function() {
  1214. /* 初始化slider 这很重要 否则将无法滑动 定位到上次滑动结束位置*/
  1215. mui('.mui-slider').slider().gotoItem(caseSliderCurrentIndex);
  1216. setCaseHeadContent(domHeadId, '案件图斑', caseSliderCurrentIndex, caseSliderItemCount, false);
  1217. });
  1218. }
  1219. /**
  1220. * 设置显示内容
  1221. * @param {String} domId 显示内容的容器Id
  1222. * @param {String} title 标题
  1223. * @param {Number} index 当前索引
  1224. * @param {Number} count 总数
  1225. * @param {boolean} isLoadMany 是否显示加载更多按钮
  1226. */
  1227. function setCaseHeadContent(domId, title, index, count, isLoadMany) {
  1228. let divHtml = "<div class='jt-segmented-control-item-content'>";
  1229. divHtml += "<span>" + title + "</span>";
  1230. if (count) {
  1231. divHtml += "<span class='jt-number'>" + (parseInt(index) + 1) + "/" + count + "</span>";
  1232. }
  1233. if (isLoadMany) {
  1234. divHtml +=
  1235. "<button class='app-icon app-iocn-details jt-cnt-bar-button' onclick=\"_caseSliderLoadMany('" + domId +
  1236. "')\">加载更多</button>";
  1237. }
  1238. divHtml += "<div>";
  1239. setHtmlByDomId(domId, divHtml);
  1240. }
  1241. /**
  1242. * 加载更多
  1243. * @param {String} domHeadId 显示内容的容器Id
  1244. */
  1245. function _caseSliderLoadMany(domHeadId) {
  1246. caseSliderQueryModel.startNum = parseInt(caseSliderQueryModel.startNum) + parseInt(caseSliderQueryModel.queryCount);
  1247. _manyLayerQueryAndAppendItems(caseSliderQueryModel, caseSliderContent, function() {
  1248. /* 初始化slider 这很重要 否则将无法滑动 定位到上次滑动结束位置*/
  1249. mui('.mui-slider').slider().gotoItem(caseSliderCurrentIndex);
  1250. setCaseHeadContent(domHeadId, '案件图斑', caseSliderCurrentIndex, caseSliderItemCount, false);
  1251. })
  1252. }
  1253. /**
  1254. * @param {JSON} queryModel 查询模型
  1255. * @param {Object} domSliderContent 加载具体内容的容器dom
  1256. * @param {Function} callSuccess 成功回调callSuccess()
  1257. */
  1258. function _manyLayerQueryAndAppendItems(queryModel, domSliderContent, callSuccess) {
  1259. /* 远程获取案件信息 */
  1260. sendAjax({
  1261. data: queryModel,
  1262. url: 'appQueryCases',
  1263. waitMessage: '案件装载中...',
  1264. success: function(caseDatas) {
  1265. /* 循环增加所有案件 */
  1266. for (var i = 0; i < caseDatas.length; i++) {
  1267. appendToSliderItemByCase(caseDatas[i], domSliderContent, false);
  1268. /* 总数增加 */
  1269. caseSliderItemCount++;
  1270. }
  1271. /* 判断是否已经到最后 */
  1272. if (caseDatas.length < parseInt(queryModel.queryCount)) caseSliderIsLast = true;
  1273. /* 回调告知已经加载完成 */
  1274. if (callSuccess) callSuccess();
  1275. },
  1276. error: function(err) {
  1277. muiAlertError(err);
  1278. },
  1279. });
  1280. }
  1281. /**
  1282. * 创建多图层查询项目
  1283. * @param {JSON} items 传递的数据
  1284. */
  1285. function createManyLayerQueryItem(items) {
  1286. let itemHtml = "";
  1287. for (let j = 0; j < items.length; j++) {
  1288. let item = items[j];
  1289. if (j % 2 == 0) {
  1290. itemHtml += "<div class='jt-feature-data-row jt-row-even-number'>";
  1291. } else {
  1292. itemHtml += "<div class='jt-feature-data-row jt-row-odd-number'>";
  1293. }
  1294. itemHtml += "<span>" + (parseInt(j) + 1) + "</span>";
  1295. itemHtml += "<span class='jt-nowrap' onclick='showDetails(this)'>" + item.sValue + "</span>";
  1296. itemHtml += "<button type='button' class='mui-btn app-icon app-icon-location jt-button'";
  1297. itemHtml += " onclick = \"_queryFeatureWktAndLocation('" + item.fId +
  1298. "','" + item.tabName + "')\" />";
  1299. itemHtml += "<button type='button' class='mui-btn app-icon app-iocn-details jt-button'";
  1300. itemHtml += " onclick = \"openDetailsPage('" + item.tabName + "','" + item.fId + "')\" />"
  1301. itemHtml += "</div>";
  1302. }
  1303. return itemHtml;
  1304. }
  1305. /**
  1306. * 定位地图到指定区域
  1307. * @param {string} xmin x最小值
  1308. * @param {string} ymin y最小值
  1309. * @param {string} xmax x最大值
  1310. * @param {string} ymax y最大值
  1311. */
  1312. function mapToExtent(xmin, ymin, xmax, ymax) {
  1313. let _xmin = parseFloat(xmin);
  1314. let _ymin = parseFloat(ymin);
  1315. let _xmax = parseFloat(xmax);
  1316. let _ymax = parseFloat(ymax);
  1317. jtMapKit.zoomToExtentNormal({
  1318. xmin: _xmin,
  1319. ymin: _ymin,
  1320. xmax: _xmax,
  1321. ymax: _ymax,
  1322. })
  1323. }
  1324. /**
  1325. * 打开详情页面
  1326. * @param {string} tabName 表名称
  1327. * @param {string} fldValue 值
  1328. */
  1329. function openDetailsPage(tabName, fldValue) {
  1330. mui.openWindow({
  1331. url: 'page-details.html',
  1332. id: 'page-details.html',
  1333. styles: {
  1334. top: '0px',
  1335. bottom: '0px',
  1336. left: '0px',
  1337. right: '0px',
  1338. background: 'transparent',
  1339. },
  1340. show: {
  1341. aniShow: 'slide-in-bottom',
  1342. duration: '300',
  1343. },
  1344. extras: {
  1345. tabName: tabName,
  1346. fldValue: fldValue,
  1347. }
  1348. });
  1349. }
  1350. /* +++++++++++++++++++++通用选择图斑占地分析相关代码+++++++++++++++++++++ */
  1351. /**
  1352. * 弹窗展示内容
  1353. * @param {string} title 标题
  1354. * @param {string} html 展示内容 li的集合
  1355. */
  1356. function _showPopover(title, html) {
  1357. /* 创建根据容器-滚动容器的父容器 */
  1358. let divScrollWrapper = document.createElement('div');
  1359. divScrollWrapper.className = 'mui-scroll-wrapper';
  1360. /* 创建滚动子容器 */
  1361. let divScroll = document.createElement('div');
  1362. divScroll.className = 'mui-scroll';
  1363. divScrollWrapper.append(divScroll);
  1364. /* 加入数据项内容html */
  1365. divScroll.innerHTML = html;
  1366. /* 创建弹窗的标题头 */
  1367. var header = document.createElement('header');
  1368. header.className = 'mui-bar';
  1369. header.innerHTML = title;
  1370. /* 显示信息 */
  1371. _showMuiPopover(header, divScrollWrapper);
  1372. }
  1373. /**
  1374. * 选择要素空间占压分析
  1375. */
  1376. function EventClick_Select_Spatial_Analysis() {
  1377. hideNormalResult();
  1378. /* 查询的图层数组 */
  1379. let queryLayers = [];
  1380. for (let layer of layerConfig[0].layerList) {
  1381. if (layer.isQuery === '1' && layer.layerIsVisible == '1') {
  1382. queryLayers.push({
  1383. fldName: layer.showField,
  1384. eName: layer.eName,
  1385. cName: layer.cName,
  1386. });
  1387. }
  1388. }
  1389. if (queryLayers.length == 0) {
  1390. muiAlert("请开启需要进行占压分析的图层!");
  1391. return;
  1392. }
  1393. muiToast("地图单击图斑进行分析!");
  1394. selectFeatureExecuteAnalysis({
  1395. queryLayers: queryLayers,
  1396. });
  1397. }
  1398. /**
  1399. * 选择要素进行分析
  1400. * @param {JSON} options 配置项
  1401. * @param {Array} options.queryLayers 分析的表JSON数组
  1402. */
  1403. function selectFeatureExecuteAnalysis(options) {
  1404. if (options === undefined || options.queryLayers === undefined) {
  1405. muiAlert('参数异常!', '警告');
  1406. return;
  1407. }
  1408. jtMapKit.occupyAnalysis({
  1409. url: mapQueryUrl,
  1410. queryLayers: options.queryLayers,
  1411. }, function(res) {
  1412. showSelectOccypyFeatures(res);
  1413. // console.log(JSON.stringify(res));
  1414. }, function(err) {
  1415. muiAlertError(err);
  1416. });
  1417. }
  1418. /**
  1419. * 展示选择的图元要素数据
  1420. * @param {Array} data 选择的图元要素
  1421. */
  1422. function showSelectOccypyFeatures(data) {
  1423. let resHtml = "";
  1424. resHtml += "<div class='mui-card'>";
  1425. resHtml += "<ul class='mui-table-view'>";
  1426. for (let index in data) {
  1427. let item = data[index];
  1428. if (index % 2 === 0) {
  1429. resHtml += "<li class='mui-table-view-cell jt-row-even-number mui-collapse'>";
  1430. } else {
  1431. resHtml += "<li class='mui-table-view-cell jt-row-odd-number mui-collapse'>";
  1432. }
  1433. /* 创建主项 */
  1434. resHtml += "<a class='mui-navigate-right'><span>" + item.tabCName + "</span></a>";
  1435. resHtml += "<div class='mui-collapse-content'>";
  1436. /* 创建子项 */
  1437. for (let feaIdx in item.features) {
  1438. let feature = item.features[feaIdx];
  1439. resHtml += "<div class='jt-csa-data-item-row'>";
  1440. resHtml += "<span class='jt-number-icon'>" + (parseInt(feaIdx) + 1) + "</span>";
  1441. resHtml += "<div class='jt-content jt-nowrap'>";
  1442. resHtml += "<span class='jt-title jt-nowrap'>" + feature.showName + "</span>";
  1443. resHtml += "</div>";
  1444. resHtml += "<button type='button' class='mui-btn app-icon app-icon-location jt-button'";
  1445. resHtml += " onclick = \"_queryFeatureWktAndLocation('" + feature.objId + "','" + feature.tabName +
  1446. "')\" />"
  1447. resHtml += "<button type='button' class='mui-btn app-icon app-icon-accupy-analysis jt-button'";
  1448. resHtml += " onclick = \"_featureOccupyAnalysis('" + feature.tabName + "','" + feature.objId + "')\" />"
  1449. resHtml += "</div>";
  1450. }
  1451. resHtml += "</div>";
  1452. resHtml += "</li>";
  1453. }
  1454. resHtml += "</ul>";
  1455. resHtml += "</div>";
  1456. /* 展示结果 */
  1457. _showPopover('进行占压分析', resHtml);
  1458. }
  1459. /**
  1460. * 要素占压分析
  1461. * @param {string} tabName 分析表名
  1462. * @param {int} objId 要素唯一标识
  1463. */
  1464. function _featureOccupyAnalysis(tabName, objId) {
  1465. /* 分析配置表 该表与通用占压分析通用 */
  1466. csaConfig = [];
  1467. sendAjax({
  1468. url: 'appQuerySpatialAnalysisConfig',
  1469. data: {
  1470. tabName: tabName,
  1471. },
  1472. waitMessage: '初始化...',
  1473. success: function(resData) {
  1474. /* 装配配置表 */
  1475. for (let item of resData[0].itemList) {
  1476. csaConfig.push({
  1477. tabEName: item.tabEName,
  1478. tabCName: item.tabCName,
  1479. fldName: item.fldEName,
  1480. cntName: item.cntName,
  1481. cntCName: item.cntCName,
  1482. objId: objId,
  1483. sName: tabName,
  1484. isDelete: '0',
  1485. })
  1486. }
  1487. /* 执行分析 */
  1488. if (csaConfig.length > 0) {
  1489. csaConfig[0].isDelete = "1"; /* 设置删除原有数据标志 */
  1490. _executeFOA(0);
  1491. } else {
  1492. muiAlertError("没有配置数据,请联系管理员!");
  1493. }
  1494. },
  1495. error: function(err) {
  1496. muiAlertError(err);
  1497. }
  1498. })
  1499. }
  1500. /**
  1501. * 执行选择要素占压分析
  1502. * @param {int} index 配置索引
  1503. */
  1504. function _executeFOA(index) {
  1505. if (index == csaConfig.length) {
  1506. /* 清除已有数据 */
  1507. csaDatas = [];
  1508. /* 开始查询结果数据 */
  1509. _queryCSACount();
  1510. return;
  1511. }
  1512. sendAjax({
  1513. url: 'appExecuteFeatureOccupyAnalysis',
  1514. data: csaConfig[index],
  1515. waitMessage: '执行' + csaConfig[index].tabCName + "占压分析...",
  1516. success: function(resData) {
  1517. _executeFOA(index + 1);
  1518. },
  1519. error: function(err) {
  1520. _executeFOA(index + 1);
  1521. }
  1522. })
  1523. }