MapManager3D.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864
  1. /**
  2. * 创建者:王成
  3. * 创建日期:2021年11月8日
  4. * 描述:三维地图操作
  5. */
  6. /**
  7. * 地图服务相关地址
  8. */
  9. var serverBaseURL = "http://218.59.194.74";
  10. var agsServerPort = "6080";
  11. /**
  12. * 地图API 必须调用init方法 才能正常使用
  13. */
  14. var gisAPI = undefined;
  15. /**
  16. * 案件图层特殊处理
  17. */
  18. var isDrawCaseLabel = false; //案件图层是否显示 案件标注是否绘制
  19. var caseLayerId = 'map_case_polygon'; //案件图层的Id
  20. /**
  21. * 图层类型
  22. */
  23. var layerType = {
  24. mapboxLayer: 'mapboxLayer', //Mapbox图层
  25. onLineRaster: 'onLineRaster', //在线卫星图层
  26. onLineVector: 'onLineVector', //在线标注地图
  27. wmts: 'wmts', //wmts图层
  28. agsVectorServer: 'agsVectorServer', //ArcGIS矢量服务图层
  29. tilesets: 'tilesets', //3D图层
  30. glbs: 'glbs', //glb图层
  31. agsVectorServerToo: 'agsVectorServerToo', //特殊测试图层
  32. geoJson: 'geoJson', //geoJson数据
  33. }
  34. var nodeFather = ['基础数据', '业务数据', '影像数据'];
  35. /**
  36. * 图层配置数组
  37. */
  38. var layerConfigs = [];
  39. /**
  40. * 加载Mapbox图层
  41. * @param {boolena} visible 是否显示
  42. */
  43. function loadMapboxLayer(visible) {
  44. layerConfigs.push({
  45. layId: 'mapBoxLayer',
  46. layName: '暗夜版底图',
  47. layType: layerType.mapboxLayer,
  48. isShow: visible,
  49. fatherIdx: 0,
  50. config: {
  51. id: 'mapBoxLayer',
  52. }
  53. });
  54. }
  55. /**
  56. * 加载在线地图
  57. * @param {boolena} visible 是否显示
  58. */
  59. function loadMapOnline(visible) {
  60. layerConfigs.push({
  61. layId: 'onLineVector',
  62. layName: '天地图',
  63. layType: layerType.onLineVector,
  64. isShow: visible,
  65. fatherIdx: 0,
  66. config: {
  67. id: 'onLineVector',
  68. }
  69. });
  70. }
  71. /**
  72. * 加载影像图
  73. * @param {boolean} 是否显示
  74. */
  75. function loadMapRaster(visible) {
  76. layerConfigs.push({
  77. layId: 'xz_yxt',
  78. layName: '影像图',
  79. layType: layerType.wmts,
  80. isShow: visible,
  81. fatherIdx: 2,
  82. config: {
  83. id: 'xz_yxt',
  84. url: serverBaseURL + ':' + agsServerPort +
  85. '/arcgis/rest/services/LYLSQ_YX_102100_202105/MapServer/WMTS',
  86. minLevel: 0,
  87. maxLevel: 19,
  88. isshow: true,
  89. alpha: 0.75,
  90. }
  91. });
  92. }
  93. /**
  94. * 加载现状图
  95. * @param {boolean} visible 是否显示
  96. */
  97. function loadMapCurrentStation(visible) {
  98. layerConfigs.push({
  99. layId: 'map_xzt',
  100. layName: '现状图',
  101. layType: layerType.wmts,
  102. isShow: visible,
  103. fatherIdx: 1,
  104. config: {
  105. id: 'map_xzt',
  106. url: serverBaseURL + ':' + agsServerPort +
  107. '/arcgis/rest/services/LYLSQ_XZT_102100_202009/MapServer/WMTS',
  108. minLevel: 0,
  109. maxLevel: 19,
  110. isshow: true,
  111. alpha: 0.9,
  112. },
  113. });
  114. }
  115. /**
  116. * 添加镇区规划
  117. * @param {boolean} visible 是否显示
  118. */
  119. function loadMapPlaning(visible) {
  120. layerConfigs.push({
  121. layId: 'map_ght',
  122. layName: '规划图',
  123. layType: layerType.wmts,
  124. isShow: visible,
  125. fatherIdx: 1,
  126. config: {
  127. id: 'map_ght',
  128. url: serverBaseURL + ':' + agsServerPort +
  129. '/arcgis/rest/services/LYLSQ_GHT_102100_202009/MapServer/WMTS',
  130. minLevel: 0,
  131. maxLevel: 19,
  132. isshow: true,
  133. alpha: 0.9,
  134. },
  135. });
  136. }
  137. /**
  138. * 加载镇界
  139. * @param {boolean} visible 是否显示
  140. */
  141. function loadMapTown(visible) {
  142. layerConfigs.push({
  143. layId: 'map_town',
  144. layName: '镇界',
  145. layType: layerType.agsVectorServer,
  146. isShow: visible,
  147. fatherIdx: 1,
  148. config: {
  149. id: 'map_town',
  150. url: serverBaseURL + ':' + agsServerPort + '/arcgis/rest/services/LYLSQ_RE_WEB_V3/MapServer',
  151. layers: [2],
  152. isQuery: false,
  153. label: {
  154. url: serverBaseURL + ':' + agsServerPort + '/arcgis/rest/services/LYLSQ_RE_WEB_V3/MapServer/2',
  155. showField: 'XZQMC',
  156. size: 30,
  157. linespace: 12,
  158. display: 500000,
  159. family: 'SimHei',
  160. lng: 'LNG',
  161. lat: 'LAT',
  162. alt: 'ALT',
  163. color: '102,152,61,1',
  164. image: 'ico_village.png',
  165. key: 'XZQMC',
  166. },
  167. }
  168. });
  169. }
  170. /**
  171. * 加载图斑
  172. * @param {boolean} visible 是否显示
  173. */
  174. function loadMapCasePolygon(visible) {
  175. layerConfigs.push({
  176. layId: caseLayerId,
  177. layName: '案件图斑',
  178. layType: layerType.agsVectorServer,
  179. isShow: visible,
  180. fatherIdx: 1,
  181. config: {
  182. id: caseLayerId,
  183. url: serverBaseURL + ':' + agsServerPort + '/arcgis/rest/services/LYLSQ_RE_WEB_V3/MapServer',
  184. layers: [1],
  185. isQuery: false,
  186. }
  187. });
  188. }
  189. /**
  190. * 加载实景数据
  191. * @param {boolean} visible 是否显示
  192. */
  193. function loadMapVillageTileset(visible) {
  194. var tilesetUrls = [];
  195. tilesetUrls.push('http://218.59.194.82:13080/crdata/sdly/crtiles/tileset.json');
  196. layerConfigs.push({
  197. layId: '3d_data01',
  198. layName: '三维实景',
  199. layType: layerType.tilesets,
  200. isShow: visible,
  201. fatherIdx: 0,
  202. config: {
  203. id: '3d_data01',
  204. isshow: true,
  205. url: tilesetUrls,
  206. }
  207. });
  208. }
  209. /**
  210. * strLng:117.834,
  211. strLat:36.221,
  212. endLng:118.108,
  213. endLat:36.474,
  214. * 添加旋转区域
  215. */
  216. function appendRotateArea() {
  217. gisAPI.addRotateArea({
  218. strLng: 118.050,
  219. strLat: 34.953,
  220. endLng: 118.530,
  221. endLat: 35.434,
  222. northImage: 'zhibei.png',
  223. scaleImage: 'kedu.png'
  224. })
  225. }
  226. /**
  227. * 添加图层
  228. * @param {Object} layerId 图层Id
  229. */
  230. function appendLayer(layerId) {
  231. for (var i = 0; i < layerConfigs.length; i++) {
  232. var layConfig = layerConfigs[i];
  233. if (layConfig.layId == layerId) {
  234. if (layConfig.layType == layerType.onLineVector) {
  235. gisAPI.addOnlineVectorLayer(layConfig.config);
  236. } else if (layConfig.layType == layerType.agsVectorServer) {
  237. gisAPI.addAGSVectorServer(layConfig.config);
  238. } else if (layConfig.layType == layerType.wmts) {
  239. gisAPI.addWmtsTileLayer(layConfig.config);
  240. } else if (layConfig.layType == layerType.tilesets) {
  241. gisAPI.add3DTilesets(layConfig.config);
  242. } else if (layConfig.layType == layerType.glbs) {
  243. gisAPI.addGlbs(layConfig.config);
  244. } else if (layConfig.layType == layerType.agsVectorServerToo) {
  245. gisAPI.addAGSVectorServerToo(layConfig.config);
  246. } else if (layConfig.layType == layerType.mapboxLayer) {
  247. gisAPI.addMapboxLayer(layConfig.config);
  248. } else if (layConfig.layType == layerType.geoJson) {
  249. gisAPI.addGeoJSONLayer(layConfig.config);
  250. }
  251. break;
  252. }
  253. }
  254. }
  255. /**
  256. * 移除图层
  257. * @param {Object} layerId 图层Id
  258. */
  259. function removeLayer(layerId) {
  260. gisAPI.removeLayer(layerId);
  261. }
  262. /**
  263. * 图层初始化显示
  264. */
  265. function layerInit() {
  266. /* 进入中国位置 */
  267. gisAPI.setMapRange({
  268. lng: 103.84, //经度
  269. lat: 31.15, // 维度
  270. alt: 24000000, // 高度
  271. heading: 0, //偏航
  272. pitch: -90, //俯仰,人如果在赤道上空,俯仰角为0可见地球。如果在北纬,俯仰角为负才能见地球
  273. roll: 0.0 //翻滚
  274. })
  275. /* 飞行到指定位置 */
  276. gisAPI.flyToRectangle({
  277. strLng: 118.050,
  278. strLat: 34.953,
  279. endLng: 118.530,
  280. endLat: 35.434,
  281. success: function() {
  282. /* 加载初始图层 */
  283. for (var i = 0; i < layerConfigs.length; i++) {
  284. gisAPI.addBeforeLayerId(layerConfigs[i].layId);
  285. /* 初始化显示图层 */
  286. if (layerConfigs[i].isShow) {
  287. appendLayer(layerConfigs[i].layId);
  288. }
  289. }
  290. /* 增加酷炫效果 */
  291. appendRotateArea();
  292. }
  293. });
  294. }
  295. /**
  296. * 以下代码为注册地图事件
  297. */
  298. /**
  299. * 注册地图范围变化事件
  300. * @param {Object} objMap 地图实例
  301. */
  302. function registerMapAreaChange(objMap) {
  303. objMap.onExtentChange = function(event) {
  304. /* 打印当前地图范围 */
  305. // console.log(JSON.stringify(event));
  306. // gisAPI.addAreaRectangle({
  307. // strLng:event.west,
  308. // strLat:event.south,
  309. // endLng:event.east,
  310. // endLat:event.north,
  311. // });
  312. if (event.height < 1500 && (event.pitch >= -90 && event.pitch <= -40)) {
  313. /* 判断是否查询绘制标注 如果不绘制 则无需执行 */
  314. if (isDrawCaseLabel == true) {
  315. //queryCaseLavelsByRect(event);
  316. }
  317. }
  318. };
  319. }
  320. /**
  321. * 注册地图移动事件
  322. * @param {Object} objMap 地图实例
  323. */
  324. function resgisterMapMoving(objMap) {
  325. objMap.onMouseMove = function(event) {
  326. var msgHtml = "";
  327. // msgHtml += "&nbsp;&nbsp;屏幕坐标(" + event.screenX.toFixed(3) + "," + event.screenY.toFixed(3) + ")";
  328. msgHtml += "<div><span>经度</span><span>" + event.mapX + "</span></div>";
  329. msgHtml += "<div><span>纬度</span><span>" + event.mapY + "</span></div>";
  330. msgHtml += "<div><span>视场角</span><span>" + Math.abs(event.pitch).toFixed(2) + "</span></div>";
  331. msgHtml += "<div><span>视距</span><span>" + event.height.toFixed(2) + "</span></div>";
  332. //console.log(msgHtml);
  333. $("#divButtomInfo").html(msgHtml);
  334. }
  335. }
  336. /* 查询气泡窗口 */
  337. var CaseQueryWindow = $("#divCaseQueryWindow");
  338. /**
  339. * 注册地图场景变化事件
  340. * @param {Object} objMap 地图实例
  341. */
  342. function registerPostSceneChange(objMap) {
  343. objMap.onPostSceneChange = function(event) {
  344. }
  345. }
  346. /**
  347. * 注册查询工具弹出
  348. * @param {Object} objMap 地图实例
  349. */
  350. function registerPopoverQueryTool(objMap) {
  351. objMap.onPopoverQueryTool = function(param) {
  352. /* 判断查询类型 如果是点查询 不弹出 直接查询 区域查询则弹出 */
  353. if (param.queryType == 'point') {
  354. /* 赋值气泡窗口的查询范围属性 */
  355. CaseQueryWindow.attr("extent", param.extent);
  356. /* 开始查询 */
  357. startQueryCasesFromMap();
  358. } else {
  359. setCaseQueryWindowLocation(param.x, param.y);
  360. CaseQueryWindow.show();
  361. /* 赋值气泡窗口的定位属性 */
  362. CaseQueryWindow.attr("location", param.lng + "," + param.lat + "," + param.alt);
  363. /* 赋值气泡窗口的查询范围属性 */
  364. CaseQueryWindow.attr("extent", param.extent);
  365. }
  366. }
  367. }
  368. /**
  369. * @param {float} pointScreenX 气泡窗口关联屏幕点的x位置
  370. * @param {float} pointScreenY 气泡窗口关联屏幕点的y位置
  371. */
  372. function setCaseQueryWindowLocation(pointScreenX, pointScreenY) {
  373. CaseQueryWindow.css('top', pointScreenY - CaseQueryWindow.height() - 15);
  374. CaseQueryWindow.css('left', pointScreenX - CaseQueryWindow.width() / 2);
  375. }
  376. /**
  377. * 页面初始化 只有在第一次的时候加载显示
  378. */
  379. function pageInit() {
  380. /**
  381. * 具体操作
  382. */
  383. /* 地图管理器初始化 */
  384. getNetImageRootURL(function(rootUrl) {
  385. /* 初始化地图 */
  386. // if (document.getElementById("map3d") != undefined) {
  387. // gisAPI = new CrMap({
  388. // selector: 'map3d',
  389. // serverUrl: rootUrl + 'img/',
  390. // });
  391. // muiToast('三维地图初始化完成!');
  392. // } else {
  393. // muiAlert('地图控件未定义','提示');
  394. // }
  395. gisAPI = new CrMap({
  396. selector: 'map3d',
  397. serverUrl: rootUrl + 'img/',
  398. });
  399. /* 设置地形 */
  400. if (gisAPI != undefined) {
  401. /* 添加地形 */
  402. gisAPI.setTerrainLayer({
  403. url: 'http://218.59.194.82:13080/crdata/shandong/dem', //http://218.59.194.82:9080/crdem http://218.59.194.82:9089/bsdem
  404. });
  405. /* 注册地图范围变更事件 */
  406. registerMapAreaChange(gisAPI);
  407. /* 注册地图移动事件 */
  408. resgisterMapMoving(gisAPI);
  409. /* 注册地图场景变化事件 */
  410. registerPostSceneChange(gisAPI);
  411. /* 注册查询弹出工具事件 */
  412. registerPopoverQueryTool(gisAPI);
  413. }else{
  414. muiAlert('gpsAPI未定义','警告');
  415. }
  416. /* 加载Mapbox底图 */
  417. loadMapboxLayer(true);
  418. /* 加载天地图 */
  419. loadMapOnline(false);
  420. /* 加载影像图 */
  421. loadMapRaster(true);
  422. /* 加载现状图 */
  423. loadMapCurrentStation(false);
  424. /* 加载规划图 */
  425. loadMapPlaning(false);
  426. /* 加载镇界 */
  427. loadMapTown(true);
  428. /* 加载案件图斑 */
  429. loadMapCasePolygon(isDrawCaseLabel);
  430. /* 加载实景数据 */
  431. loadMapVillageTileset(false);
  432. /* 图层初始化 */
  433. layerInit();
  434. });
  435. }
  436. /**
  437. * 根据区域查询案件图斑标注
  438. * @param {JSON} options 配置项
  439. */
  440. function queryCaseLavelsByRect(options) {
  441. /* 构建查询模型 */
  442. var iData = {
  443. slng: options.west,
  444. slat: options.south,
  445. elng: options.east,
  446. elat: options.north
  447. }
  448. /* 开始联网查询 */
  449. sendAjax({
  450. data: iData,
  451. type: 'post',
  452. url: 'appQueryCaseLabelsByRect',
  453. success: function(items) {
  454. var promise = gisAPI.removeAllCaseLabel();
  455. promise.then(function(isComplete) {
  456. /* 进行展示之前先计算高程 */
  457. var points = [];
  458. for (var i = 0; i < items.length; i++) {
  459. points.push({
  460. lng: items[i].lng,
  461. lat: items[i].lat,
  462. });
  463. }
  464. /* 计算高度 */
  465. gisAPI.calculateAltitude({
  466. points: points,
  467. success: function(heights) {
  468. for (var i = 0; i < items.length; i++) {
  469. var imgName = "img_case_wait_assign.png";
  470. var estate = items[i].estate;
  471. if (estate == caseState.stateWaitAssign) {
  472. imgName = "img_case_wait_assign.png";
  473. } else if (estate == caseState.stateWaitCheck) {
  474. imgName = "img_case_wait_check.png";
  475. } else if (estate == caseState.stateWaitRepeat) {
  476. imgName = "img_case_wait_flight.png";
  477. } else if (estate == caseState.stateWaitVerify) {
  478. imgName = "img_case_wait_verify.png";
  479. } else if (estate == caseState.stateClose) {
  480. imgName = "img_case_close.png";
  481. }
  482. /* 绘制试试 */
  483. gisAPI.addCaseLabel({
  484. lng: items[i].lng,
  485. lat: items[i].lat,
  486. alt: heights[i],
  487. text: items[i].casenum,
  488. image: imgName,
  489. });
  490. }
  491. console.log("本次查询的数据量:" + items.length);
  492. }
  493. })
  494. })
  495. },
  496. error: function(err) {
  497. }
  498. });
  499. }
  500. /**
  501. * 函数相关
  502. */
  503. /**
  504. * 图层控制
  505. * @param {Object} obj checkBox
  506. * @param {JSON} layer 图层
  507. */
  508. function LayerControl(obj, layer) {
  509. if (obj.checked) {
  510. appendLayer(layer.layId);
  511. setLayerState(layer.layId, true);
  512. /* 案件图层需要进行特殊处理 */
  513. if (layer.layId == caseLayerId) {
  514. isDrawCaseLabel = true;
  515. }
  516. } else {
  517. removeLayer(layer.layId);
  518. setLayerState(layer.layId, false);
  519. /* 案件图层需要进行特殊处理 */
  520. if (layer.layId == caseLayerId) {
  521. var promise = gisAPI.removeAllCaseLabel();
  522. promise.then(function(isComplete) {
  523. isDrawCaseLabel = false;
  524. });
  525. }
  526. }
  527. /* 更新场景 */
  528. gisAPI.updateSence();
  529. }
  530. /**
  531. * @param {Object} obj 点击对象
  532. * @param {string} layId 图层Id
  533. */
  534. function LayerTo(obj, layId) {
  535. var layer = getLayerConfig(layId);
  536. if (layer != undefined) {
  537. if (layer.isShow == false) {
  538. muiToast("该图层未显示,无法定位!");
  539. } else {
  540. // alert(window[layer.layId]);
  541. gisAPI.flyTo(window[layer.layId]);
  542. }
  543. }
  544. }
  545. /**
  546. * 设置图层树的节点是否选中
  547. * @param {Object} layId 节点Id
  548. * @param {Object} isShow 是否选中
  549. */
  550. function setLayerState(layId, isShow) {
  551. for (var i = 0; i < layerConfigs.length; i++) {
  552. if (layerConfigs[i].layId == layId) {
  553. layerConfigs[i].isShow = isShow;
  554. break;
  555. }
  556. }
  557. }
  558. /**
  559. * 根据图层Id获取图层配置JSON
  560. * @param {string} layId 图层Id
  561. */
  562. function getLayerConfig(layId) {
  563. for (var i = 0; i < layerConfigs.length; i++) {
  564. if (layerConfigs[i].layId == layId) {
  565. return layerConfigs[i];
  566. }
  567. }
  568. return undefined;
  569. }
  570. /* 案件标注查询模型 */
  571. var queryCaseLabelsModel = {
  572. page: 0,
  573. /* 查询的起始位置 */
  574. limit: 3000,
  575. /* 每次查询的数量 */
  576. }
  577. /* 案件标注数据数组 [{},{},...] */
  578. var caseLabelsData = [];
  579. /**
  580. * 查询案件的标注数量
  581. * @param {JSON} qModel 查询模型
  582. */
  583. function queryCalseLabels(qModel) {
  584. sendAjax({
  585. data: qModel,
  586. type: 'post',
  587. url: 'appQueryCaseLabels',
  588. waitMessage: '正在加载案件图斑标注数据...',
  589. success: function(resData) {
  590. // alert(JSON.stringify(resData));
  591. var items = resData[0].items;
  592. if (items.length == queryCaseLabelsModel.limit) {
  593. for (var i = 0; i < items.length; i++) {
  594. caseLabelsData.push(items[i]);
  595. /* 绘制试试 */
  596. gisAPI.addCaseLabel({
  597. lng: items[i].lat,
  598. lat: items[i].lng,
  599. alt: items[i].alt,
  600. text: items[i].cstate,
  601. });
  602. }
  603. /* 移动起始点 */
  604. queryCaseLabelsModel.page = queryCaseLabelsModel.page + 1;
  605. /* 继续查询 */
  606. queryCalseLabels(queryCaseLabelsModel);
  607. } else {
  608. for (var i = 0; i < items.length; i++) {
  609. caseLabelsData.push(items[i]);
  610. }
  611. muiAlert(caseLabelsData.length, "提示");
  612. }
  613. },
  614. error: function(err) {
  615. muiAlertError(err);
  616. }
  617. })
  618. }
  619. /**
  620. * 定位
  621. * @param {float} longitude 定位点经度
  622. * @param {float} latitude 定位点纬度
  623. * @param {string} title 案件编号
  624. * @param {string} state 案件状态
  625. * @param {string} area 图斑面积
  626. */
  627. function mapLocation(longitude, latitude, title, state, area) {
  628. printToConsole("定位点位置 lng=" + longitude + " lat=" + latitude);
  629. gisAPI.flyToo({
  630. lng: longitude,
  631. lat: latitude - 0.008,
  632. alt: 500,
  633. heading: 0,
  634. pitch: -45,
  635. duration: 3,
  636. success: function() {
  637. gisAPI.appendLabelToMap({
  638. title: title,
  639. state: '<' + state + '>',
  640. area: '[' + area + ']',
  641. lng: longitude,
  642. lat: latitude,
  643. })
  644. }
  645. });
  646. }
  647. /**
  648. * 按钮点击事件
  649. */
  650. /**
  651. * 图层控制事件
  652. * @param {Object} btnObj 图层控制按钮
  653. */
  654. function EventClick_Layer(btnObj) {
  655. var mainHtml = "";
  656. /* 初始化图层控制控件 */
  657. for (var i = 0; i < nodeFather.length; i++) {
  658. mainHtml += "<h5>" + nodeFather[i] + "</h5>"
  659. mainHtml += "<form id='layerGroup" + i + "' class='mui-input-group'></form>"
  660. }
  661. $("#divLayerList").html(mainHtml);
  662. for (var i = 0; i < layerConfigs.length; i++) {
  663. var layer = layerConfigs[i];
  664. var domDiv = document.createElement('div');
  665. domDiv.className = 'mui-input-row mui-checkbox';
  666. var strHtml = "";
  667. strHtml += "<label><span class='app-icon app-icon-map-layer-normal'></span>" + layer.layName + "</label>";
  668. if (layer.isShow) {
  669. strHtml += "<input name='checkbox' value='Item 1' type='checkbox' checked";
  670. } else {
  671. strHtml += "<input name='checkbox' value='Item 1' type='checkbox'";
  672. }
  673. strHtml += " onclick=\"LayerControl(this," + JSON.stringify(layer).replace(/\"/g, "'") + ")\"/>";
  674. if (layer.layType == layerType.tilesets) {
  675. strHtml += "<span class='app-icon app-icon-map-location cr-layer-control-location'";
  676. strHtml += " onclick=\"LayerTo(this,'" + layer.layId + "')\"/></span>";
  677. }
  678. domDiv.innerHTML = strHtml;
  679. $("#layerGroup" + layer.fatherIdx).append(domDiv);
  680. }
  681. mui('#layerPopover').popover('toggle', btnObj);
  682. }
  683. /**
  684. * 长度测量
  685. * @param {Object} btnObj 按钮
  686. */
  687. function EventClick_MeasureLength(btnObj) {
  688. gisAPI.measureLength(function(msg) {
  689. muiToast(msg);
  690. CaseQueryWindow.hide();
  691. });
  692. }
  693. /**
  694. * 面积测量
  695. * @param {Object} btnObj 按钮
  696. */
  697. function EventClick_MeasureArea(btnObj) {
  698. gisAPI.measureArea(function(msg) {
  699. muiToast(msg);
  700. CaseQueryWindow.hide();
  701. });
  702. }
  703. /**
  704. * GPS定位
  705. * @param {Object} btnObj 按钮
  706. */
  707. function EventClick_Location(btnObj) {
  708. }
  709. /**
  710. * 显示全图
  711. * @param {Object} btnObj 按钮
  712. */
  713. function EventClick_AllView(btnObj) {
  714. /* 进入中国位置 */
  715. gisAPI.setMapRange({
  716. lng: 103.84, //经度
  717. lat: 31.15, // 维度
  718. alt: 24000000, // 高度
  719. heading: 0, //偏航
  720. pitch: -90, //俯仰,人如果在赤道上空,俯仰角为0可见地球。如果在北纬,俯仰角为负才能见地球
  721. roll: 0.0 //翻滚
  722. })
  723. /* 飞行到指定位置 */
  724. gisAPI.flyToRectangle({
  725. strLng: 118.050,
  726. strLat: 34.953,
  727. endLng: 118.530,
  728. endLat: 35.434,
  729. });
  730. }
  731. /**
  732. * 开始从地图上查询案件
  733. */
  734. function startQueryCasesFromMap() {
  735. var extent = $("#divCaseQueryWindow").attr("extent");
  736. /* 隐藏查询气泡窗口 */
  737. CaseQueryWindow.hide();
  738. /* 恢复查询工具初始化状态 */
  739. gisAPI.measureClear();
  740. /* 开始查询 */
  741. caseBase.queryDataByExtent(extent);
  742. }
  743. /**
  744. * 坐标查询
  745. * @param {Object} btnObj 按钮
  746. */
  747. function EventClick_Query_Coords(btnObj) {
  748. }
  749. /**
  750. * 案件点查询
  751. * @param {Object} btnObj 按钮
  752. */
  753. function EventClick_Query_Point(btnObj) {
  754. gisAPI.casePointQuery(function(msg) {
  755. muiToast(msg);
  756. CaseQueryWindow.hide();
  757. });
  758. }
  759. /**
  760. * 案件区域查询
  761. * @param {Object} btnObj 按钮
  762. */
  763. function EventClick_Query_Area(btnObj) {
  764. gisAPI.casePolygonQuery(function(msg) {
  765. muiToast(msg);
  766. CaseQueryWindow.hide();
  767. });
  768. }
  769. /**
  770. * 清扫工具
  771. * @param {Object} btnObj 按钮
  772. */
  773. function EventClick_Clean(btnObj) {
  774. gisAPI.measureClear(function() {
  775. CaseQueryWindow.hide();
  776. });
  777. /* 输出相机参数 */
  778. var result = gisAPI.exportCameraViewParams();
  779. console.log(JSON.stringify(result));
  780. }
  781. /**
  782. * 开始查询
  783. * @param {Object} btnObj 案件查询按钮
  784. */
  785. function EventClick_Case_Query(btnObj) {
  786. startQueryCasesFromMap();
  787. }
  788. /**
  789. * 查询结果窗口显示/隐藏
  790. * @param {Object} btnObj 按钮
  791. */
  792. function EventClick_QueryWindow(btnObj) {
  793. mui('#queryResultPopover').popover('toggle');
  794. }