MapManager.js 45 KB

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