MapManager.js 45 KB

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