getCollect3DData.js 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716
  1. /**
  2. * [ONEMAP.M.projectController]
  3. * @return {[object]}
  4. */
  5. define(function (tplLayout) {
  6. /**
  7. * 初始化并订阅事件
  8. * @return {[type]} [description]
  9. */
  10. /**
  11. * 模块数据 用于数据存储和外部调用
  12. * @type {Object}
  13. * 数据存放
  14. */
  15. var modValue = {
  16. QXSY: {},
  17. model: {},
  18. seleted_guid: null,
  19. stereoscopic_handle: null,
  20. }
  21. /**
  22. * 状态值
  23. * @type {Boolean}
  24. * @default false
  25. * @private
  26. */
  27. var status = {
  28. initialized: false,
  29. isShowChild: false,
  30. connect: false,
  31. webSocketState: false
  32. };
  33. function init() {
  34. if (!localStorage.getItem("systemToken")) {
  35. ONEMAP.C.publisher.publish({
  36. type: 'warning',
  37. message: '用户尚未登录!'
  38. }, 'noteBar::add');
  39. return;
  40. }
  41. if (!status.initialized) {
  42. subscribe();
  43. bindEvent();
  44. prototypeBind();
  45. status.initialized = true;
  46. // $("#threeData").parent().find(".menu-content").show();
  47. }
  48. ONEMAP.C.publisher.publish({
  49. modName: 'threeData'
  50. }, 'menuListClick');
  51. }
  52. function prototypeBind() {
  53. //1.0GLTG插件
  54. var fixGltf = function (gltf) {
  55. if (!gltf.extensionsUsed) {
  56. return;
  57. }
  58. var v = gltf.extensionsUsed.indexOf('KHR_technique_webgl');
  59. var t = gltf.extensionsRequired.indexOf('KHR_technique_webgl');
  60. // 中招了。。
  61. if (v !== -1) {
  62. gltf.extensionsRequired.splice(t, 1, 'KHR_techniques_webgl');
  63. gltf.extensionsUsed.splice(v, 1, 'KHR_techniques_webgl');
  64. gltf.extensions = gltf.extensions || {};
  65. gltf.extensions['KHR_techniques_webgl'] = {};
  66. gltf.extensions['KHR_techniques_webgl'].programs = gltf.programs;
  67. gltf.extensions['KHR_techniques_webgl'].shaders = gltf.shaders;
  68. gltf.extensions['KHR_techniques_webgl'].techniques = gltf.techniques;
  69. var techniques = gltf.extensions['KHR_techniques_webgl'].techniques;
  70. gltf.materials.forEach(function (mat, index) {
  71. gltf.materials[index].extensions['KHR_technique_webgl'].values = gltf.materials[index].values;
  72. gltf.materials[index].extensions['KHR_techniques_webgl'] = gltf.materials[index].extensions['KHR_technique_webgl'];
  73. var vtxfMaterialExtension = gltf.materials[index].extensions['KHR_techniques_webgl'];
  74. for (var value in vtxfMaterialExtension.values) {
  75. var us = techniques[vtxfMaterialExtension.technique].uniforms;
  76. for (var key in us) {
  77. if (us[key] === value) {
  78. vtxfMaterialExtension.values[key] = vtxfMaterialExtension.values[value];
  79. delete vtxfMaterialExtension.values[value];
  80. break;
  81. }
  82. }
  83. };
  84. });
  85. techniques.forEach(function (t) {
  86. for (var attribute in t.attributes) {
  87. var name = t.attributes[attribute];
  88. t.attributes[attribute] = t.parameters[name];
  89. };
  90. for (var uniform in t.uniforms) {
  91. var name = t.uniforms[uniform];
  92. t.uniforms[uniform] = t.parameters[name];
  93. };
  94. });
  95. }
  96. }
  97. Object.defineProperties(Cesium.Model.prototype, {
  98. _cachedGltf: {
  99. set: function (value) {
  100. this._vtxf_cachedGltf = value;
  101. if (this._vtxf_cachedGltf && this._vtxf_cachedGltf._gltf) {
  102. fixGltf(this._vtxf_cachedGltf._gltf);
  103. }
  104. },
  105. get: function () {
  106. return this._vtxf_cachedGltf;
  107. }
  108. }
  109. });
  110. }
  111. function bindEvent() {
  112. $.ajax({
  113. type: "POST",
  114. headers: {
  115. token: localStorage.getItem("systemToken"),
  116. },
  117. data: {
  118. columnId: onemapUrlConfig.columnConfig.model.id,
  119. states: "1,2,3",
  120. pageSize: 1000,
  121. page: 0,
  122. },
  123. dataType: "json",
  124. url: onemapUrlConfig.DMS_URL + '/dms/content/selectContentList',
  125. success: function (result) {
  126. if (result.code != 200) {
  127. ONEMAP.C.publisher.publish({
  128. type: 'warning',
  129. message: result.message,
  130. }, 'noteBar::add');
  131. return
  132. }
  133. let data = result.content.data;
  134. let thrData = data.map(function (item) {
  135. return {
  136. "category": "倾斜摄影",
  137. "info": "",
  138. "type": "qxData",
  139. "name": item.title,
  140. "url": item.c_url
  141. }
  142. })
  143. let threeLength = thrData.length;
  144. var ul = $('<ul class="menu-content"></ul>');
  145. for (var i = 0; i < threeLength; i++) {
  146. var threeDlist = $('<li class="item" cid="' + i + '"><input type="checkbox" class="zt-cbx" layer=""><span class="meun-checkBox menu-select-no"></span><span class="no-bg">' + thrData[i].name + '</span></li>');
  147. ul.append(threeDlist);
  148. }
  149. var html = ul.html();
  150. $(".sanWei .menu-content").html(html);
  151. $(".sanWei li").unbind('click').bind('click', function () {
  152. var menuCheckBox = $(this).find('.meun-checkBox');
  153. var ztCbx = $(this).find('.zt-cbx');
  154. if (menuCheckBox.hasClass("menu-select-no")) {
  155. menuCheckBox.removeClass('menu-select-no').addClass("menu-select");
  156. if (!map23DData.display.map3D) {
  157. $("#mapModelChange .bg")[0].click()
  158. }
  159. var idx = $(this).attr('cid');
  160. var modelData = thrData[idx]//ONEMAP.D.globalSettingData.map3DModelSetting[idx];
  161. var guid = null
  162. var options = {};
  163. if (modelData.type == "qxData") {
  164. guid = add3DQX(modelData);
  165. options = {
  166. action: "add",
  167. DOM: {
  168. guid: guid,
  169. type: "QXSY",
  170. name: $(this).find('.no-bg').text(),
  171. },
  172. mod: "QXSY"
  173. }
  174. } else {
  175. guid = add3DModel(modelData)
  176. options = {
  177. action: "add",
  178. DOM: {
  179. guid: guid,
  180. type: "MOXING",
  181. name: $(this).find('.no-bg').text(),
  182. },
  183. mod: "MOXING"
  184. }
  185. }
  186. if (!guid) {
  187. return
  188. }
  189. ztCbx.attr("layer", guid);
  190. ztCbx.attr("class", "zt-cbx " + guid);
  191. // // 添加到我的图层
  192. // var options = {
  193. // action: "add",
  194. // DOM: {
  195. // guid: guid,
  196. // type: "QXSY",
  197. // name: $(this).find('.no-bg').text(),
  198. // },
  199. // mod: "QXSY"
  200. // }
  201. ONEMAP.M.myLayers.myLayerControl(options); // 添加信息到“我的图层”
  202. ONEMAP.C.publisher.subscribe(layerAction, guid);
  203. } else {
  204. menuCheckBox.removeClass('menu-select').addClass("menu-select-no");
  205. var guid = ztCbx.attr("layer");
  206. var type = guid.split("-")[0]
  207. if (type == "QXSY") {
  208. removeQXSY(guid);
  209. } else {
  210. removeMX(guid)
  211. }
  212. ONEMAP.M.myLayers.myLayerControl({
  213. action: "remove",
  214. DOMid: guid
  215. }); // 移除数据层
  216. }
  217. })
  218. },
  219. error: function (result) {
  220. debugger
  221. console.log(result);
  222. }
  223. })
  224. return;
  225. // TODO
  226. // var thrData = ONEMAP.D.globalSettingData.map3DModelSetting;
  227. // var threeLength = ONEMAP.D.globalSettingData.map3DModelSetting.length;
  228. // alert(thrData);
  229. var ul = $('<ul class="menu-content"></ul>');
  230. for (var i = 0; i < threeLength; i++) {
  231. var threeDlist = $('<li class="item" cid="' + i + '"><input type="checkbox" class="zt-cbx" layer=""><span class="meun-checkBox menu-select-no"></span><span class="no-bg">' + thrData[i].name + '</span></li>');
  232. ul.append(threeDlist);
  233. }
  234. var data = ul.html();
  235. $(".sanWei .menu-content").html(data);
  236. $(".sanWei li").unbind('click').bind('click', function () {
  237. var menuCheckBox = $(this).find('.meun-checkBox');
  238. var ztCbx = $(this).find('.zt-cbx');
  239. if (menuCheckBox.hasClass("menu-select-no")) {
  240. menuCheckBox.removeClass('menu-select-no').addClass("menu-select");
  241. if (!map23DData.display.map3D) {
  242. $("#mapModelChange .bg")[0].click()
  243. }
  244. var idx = $(this).attr('cid');
  245. var modelData = ONEMAP.D.globalSettingData.map3DModelSetting[idx];
  246. var guid = null
  247. var options = {};
  248. if (modelData.type == "qxData") {
  249. guid = add3DQX(modelData);
  250. options = {
  251. action: "add",
  252. DOM: {
  253. guid: guid,
  254. type: "QXSY",
  255. name: $(this).find('.no-bg').text(),
  256. },
  257. mod: "QXSY"
  258. }
  259. } else {
  260. guid = add3DModel(modelData)
  261. options = {
  262. action: "add",
  263. DOM: {
  264. guid: guid,
  265. type: "MOXING",
  266. name: $(this).find('.no-bg').text(),
  267. },
  268. mod: "MOXING"
  269. }
  270. }
  271. if (!guid) {
  272. return
  273. }
  274. ztCbx.attr("layer", guid);
  275. ztCbx.attr("class", "zt-cbx " + guid);
  276. // // 添加到我的图层
  277. // var options = {
  278. // action: "add",
  279. // DOM: {
  280. // guid: guid,
  281. // type: "QXSY",
  282. // name: $(this).find('.no-bg').text(),
  283. // },
  284. // mod: "QXSY"
  285. // }
  286. ONEMAP.M.myLayers.myLayerControl(options); // 添加信息到“我的图层”
  287. ONEMAP.C.publisher.subscribe(layerAction, guid);
  288. } else {
  289. menuCheckBox.removeClass('menu-select').addClass("menu-select-no");
  290. var guid = ztCbx.attr("layer");
  291. var type = guid.split("-")[0]
  292. if (type == "QXSY") {
  293. removeQXSY(guid);
  294. } else {
  295. removeMX(guid)
  296. }
  297. ONEMAP.M.myLayers.myLayerControl({
  298. action: "remove",
  299. DOMid: guid
  300. }); // 移除数据层
  301. }
  302. })
  303. }
  304. function layerAction(options) {
  305. if (options.guid.split("-")[0] == "QXSY") {
  306. if (options.action == "remove") {
  307. removeQXSY(options.guid)
  308. } else if (options.action == "opacity") {
  309. opacityQXSY(options)
  310. } else if (options.action == "controlShow") {
  311. controlShowQXSY(options)
  312. } else if (options.action == "location") {
  313. locationQXSY(options)
  314. }
  315. } else if (options.guid.split("-")[0] == "MOXING") {
  316. if (options.action == "remove") {
  317. removeMX(options.guid)
  318. } else if (options.action == "opacity") {
  319. opacityMX(options)
  320. } else if (options.action == "set") {
  321. // 高亮显示模型,选中后可拖动
  322. removeModelHighlight();
  323. if (modValue.seleted_guid != null && options.guid == modValue.seleted_guid) {
  324. removeControlStereoscopic();
  325. modValue.seleted_guid = null;
  326. return;
  327. }
  328. modValue.seleted_guid = options.guid;
  329. addControlStereoscopic();
  330. }
  331. }
  332. }
  333. function removeQXSY(guid) {
  334. map3DViewer.map.scene.primitives.remove(modValue.QXSY[guid]);
  335. delete modValue.QXSY[guid];
  336. }
  337. function opacityQXSY(options) {
  338. // if (options.options.opacity)
  339. // modValue.QXSY[options.guid].show = true
  340. // if (!options.options.opacity)
  341. // modValue.QXSY[options.guid].show = false
  342. modValue.QXSY[options.guid].style = new Cesium.Cesium3DTileStyle({
  343. // //写法一
  344. color: "color('rgba(255,255,255," + options.options.opacity + ")')",
  345. // //写法2
  346. // color: {
  347. // evaluateColor: function (feature, result) {
  348. // let color = new Cesium.Color(1, 1, 1, options.options.opacity);
  349. // return color;
  350. // }
  351. // },
  352. show: true,
  353. })
  354. }
  355. function controlShowQXSY(options) {
  356. if (options.options.show)
  357. modValue.QXSY[options.guid].show = true
  358. if (!options.options.show)
  359. modValue.QXSY[options.guid].show = false
  360. }
  361. function removeMX(guid) {
  362. map3DViewer.map.entities.remove(modValue.model[guid]);
  363. delete modValue.model[guid];
  364. if (modValue.seleted_guid == guid) {
  365. removeControlStereoscopic()
  366. modValue.seleted_guid = null
  367. }
  368. }
  369. function opacityMX(options) {
  370. if (options.options.opacity) {
  371. modValue.model[options.guid].show = true
  372. } else {
  373. modValue.model[options.guid].show = false
  374. }
  375. }
  376. function locationQXSY(options) {
  377. map3DViewer.map.zoomTo(modValue.QXSY[options.guid])
  378. }
  379. // 添加控制 模型 事件
  380. function addControlStereoscopic() {
  381. removeControlStereoscopic()
  382. addModelHighlight();
  383. modValue.stereoscopic_handle = new Cesium.ScreenSpaceEventHandler(map3DViewer.map.scene.canvas);
  384. // console.log(viewer.scene.canvas);
  385. modValue.stereoscopic_handle.setInputAction(mouseLeftDown, Cesium.ScreenSpaceEventType.LEFT_DOWN);
  386. }
  387. function mouseLeftDown(e) {
  388. //当鼠标点击时获取移动的位置
  389. var pick = map3DViewer.map.scene.pick(e.position);
  390. // console.log(pick);
  391. if (pick != undefined) {
  392. var id = pick.id._id;
  393. if (modValue.seleted_guid != id) {
  394. return;
  395. } else {
  396. //禁止地图移动,绑定鼠标移动时间,移动时模型随之移动
  397. setMapControl(false)
  398. modValue.stereoscopic_handle.setInputAction(mouseLeftUp, Cesium.ScreenSpaceEventType.LEFT_UP);
  399. modValue.stereoscopic_handle.setInputAction(mouseMove, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
  400. }
  401. }
  402. }
  403. function mouseLeftUp(e) {
  404. // //当鼠标点击时获取移动的位置
  405. // var pick = map3DViewer.map.scene.pick(e.position);
  406. // if (pick != undefined) {
  407. // var id = pick.id._id;
  408. // if (modValue.seleted_guid != id) {
  409. // return;
  410. // } else {
  411. // //恢复地图移动 取消鼠标移动事件
  412. // setMapControl(true)
  413. // modValue.stereoscopic_handle.removeInputAction(mouseMove, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
  414. // }
  415. // }
  416. //恢复地图移动 取消鼠标移动事件
  417. setMapControl(true)
  418. modValue.stereoscopic_handle.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP)
  419. modValue.stereoscopic_handle.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE)
  420. }
  421. function mouseMove(e) {
  422. var ray = map3DViewer.map.camera.getPickRay(e.endPosition);
  423. var cartesian = map3DViewer.map.scene.globe.pick(ray, map3DViewer.map.scene);
  424. // console.log(cartesian);
  425. modValue.model[modValue.seleted_guid].position.setValue(cartesian);
  426. }
  427. // 移除控制 模型 事件
  428. function removeControlStereoscopic() {
  429. if (modValue.stereoscopic_handle != null) {
  430. modValue.stereoscopic_handle.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN);
  431. modValue.stereoscopic_handle.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP);
  432. modValue.stereoscopic_handle.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);
  433. modValue.stereoscopic_handle = null;
  434. }
  435. }
  436. // 添加 模型 高亮
  437. function addModelHighlight() {
  438. modValue.model[modValue.seleted_guid].model.silhouetteColor = Cesium.Color.BLUE;
  439. modValue.model[modValue.seleted_guid].model.silhouetteSize = 3.0;
  440. }
  441. // 移除 模型 高亮
  442. function removeModelHighlight() {
  443. if (modValue.seleted_guid != null) {
  444. modValue.model[modValue.seleted_guid].model.silhouetteSize = 0.0;
  445. }
  446. }
  447. function setMapControl(judge) {
  448. var obj = {};
  449. if (!judge) {
  450. modValue.screenSpaceCameraController = {
  451. rotateEventTypes: map3DViewer.map.scene.screenSpaceCameraController.rotateEventTypes,
  452. tiltEventTypes: map3DViewer.map.scene.screenSpaceCameraController.tiltEventTypes,
  453. translateEventTypes: map3DViewer.map.scene.screenSpaceCameraController.translateEventTypes,
  454. zoomEventTypes: map3DViewer.map.scene.screenSpaceCameraController.zoomEventTypes
  455. // enableRotate: map3DViewer.map.scene.screenSpaceCameraController.enableRotate,
  456. // enableTranslate: map3DViewer.map.scene.screenSpaceCameraController.enableTranslate,
  457. // enableZoom: map3DViewer.map.scene.screenSpaceCameraController.enableZoom,
  458. // enableTilt: map3DViewer.map.scene.screenSpaceCameraController.enableTilt,
  459. }
  460. obj = {
  461. rotateEventTypes: undefined,
  462. tiltEventTypes: undefined,
  463. translateEventTypes: undefined,
  464. zoomEventTypes: undefined
  465. }
  466. } else {
  467. if (!modValue.screenSpaceCameraController) {
  468. return
  469. }
  470. obj = {
  471. rotateEventTypes: modValue.screenSpaceCameraController.rotateEventTypes,
  472. tiltEventTypes: modValue.screenSpaceCameraController.tiltEventTypes,
  473. translateEventTypes: modValue.screenSpaceCameraController.translateEventTypes,
  474. zoomEventTypes: modValue.screenSpaceCameraController.zoomEventTypes,
  475. }
  476. modValue.screenSpaceCameraController = null;
  477. }
  478. // 如果为真,则允许用户旋转相机。如果为假,相机将锁定到当前标题。此标志仅适用于2D和3D。
  479. // map3DViewer.map.scene.screenSpaceCameraController.enableRotate = obj.enableRotate;
  480. // // 如果为true,则允许用户平移地图。如果为假,相机将保持锁定在当前位置。此标志仅适用于2D和Columbus视图模式。
  481. // map3DViewer.map.scene.screenSpaceCameraController.enableTranslate = obj.enableTranslate;
  482. // // 如果为真,允许用户放大和缩小。如果为假,相机将锁定到距离椭圆体的当前距离
  483. // map3DViewer.map.scene.screenSpaceCameraController.enableZoom = obj.enableZoom;
  484. // // 如果为真,则允许用户倾斜相机。如果为假,相机将锁定到当前标题。这个标志只适用于3D和哥伦布视图。
  485. // map3DViewer.map.scene.screenSpaceCameraController.enableTilt = obj.enableTilt;
  486. map3DViewer.map.scene.screenSpaceCameraController.rotateEventTypes = obj.rotateEventTypes;
  487. map3DViewer.map.scene.screenSpaceCameraController.tiltEventTypes = obj.tiltEventTypes;
  488. map3DViewer.map.scene.screenSpaceCameraController.translateEventTypes = obj.translateEventTypes;
  489. map3DViewer.map.scene.screenSpaceCameraController.zoomEventTypes = obj.zoomEventTypes;
  490. }
  491. /**
  492. * 设置界面
  493. */
  494. function setLayout() {
  495. }
  496. /**
  497. * 界面重置
  498. * @return {[type]} [description]
  499. */
  500. function layoutResize(options) {
  501. if (options.modName != "threeData") {
  502. remove();
  503. } else {
  504. if (status.isShowChild) {
  505. remove();
  506. } else {
  507. $("#menu .sanWei").addClass('active');
  508. status.isShowChild = true;
  509. if (map23DData.show3DAlert) {
  510. ONEMAP.C.publisher.publish('3D', 'layout::mapStyle');
  511. }
  512. }
  513. }
  514. }
  515. /**
  516. * 模块移除
  517. * @return {[type]} [description]
  518. */
  519. function remove() {
  520. //取消订阅
  521. unSubscribe();
  522. $("#menu .sanWei").removeClass('active');
  523. status.isShowChild = false;
  524. }
  525. /**
  526. * 加载/移除倾斜摄影
  527. * @return {[type]} [description]
  528. */
  529. function add3DQX(options) {
  530. var guid = map23DControl.buildGuid('QXSY-3DData');
  531. var tilesetUrl = options.url
  532. var tileset = new Cesium.Cesium3DTileset({
  533. url: tilesetUrl,
  534. show: true,
  535. });
  536. modValue.tileset = tileset
  537. map3DViewer.map.scene.primitives.add(tileset, 1);
  538. tileset.readyPromise.then(function (tileset) {
  539. // mapControl.viewer.camera.viewBoundingSphere(tileset.boundingSphere, new Cesium.HeadingPitchRange(0, -0.5, 0));
  540. // changeHeight(0)
  541. });
  542. map3DViewer.map.zoomTo(tileset);
  543. modValue.QXSY[guid] = tileset
  544. return guid;
  545. };
  546. /**
  547. * [add3DModel description]
  548. * 加载/移除三维模型
  549. * @param {[type]} options [description]
  550. * @return {[type]} [description]
  551. */
  552. function add3DModel(options) {
  553. var guid = map23DControl.buildGuid('MOXING-3DData');
  554. options.m_height = JSON.parse(options.m_height);
  555. options.m_hdeading = JSON.parse(options.m_hdeading);
  556. options.m_pitch = JSON.parse(options.m_pitch);
  557. options.m_roll = JSON.parse(options.m_roll);
  558. options.m_scale = JSON.parse(options.m_scale);
  559. var position = Cesium.Cartesian3.fromDegrees(options.center.lng, options.center.lat, options.m_height);
  560. var tileset = map3DViewer.map.entities.add({
  561. id: guid,
  562. position: position,
  563. orientation: Cesium.Transforms.headingPitchRollQuaternion(
  564. position,
  565. new Cesium.HeadingPitchRoll(
  566. Cesium.Math.toRadians(options.m_hdeading),
  567. Cesium.Math.toRadians(options.m_pitch),
  568. Cesium.Math.toRadians(options.m_roll)
  569. )
  570. ),
  571. model: {
  572. uri: onemapUrlConfig.qxsy + options.url,
  573. // uri: options.url,
  574. minimumPixelSize: 128,
  575. scale: options.m_scale,
  576. heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND
  577. }
  578. });
  579. map3DViewer.map.zoomTo(tileset);
  580. modValue.model[guid] = tileset;
  581. return guid;
  582. }
  583. function add3DModelNoFly(options) {
  584. if (options.name) {
  585. modValue['model' + options.indexNum] = locaSpaceMap.Globe.Layers.Add1(options.url);
  586. } else {
  587. locaSpaceMap.Globe.Layers.RemoveLayerByID(modValue['model' + options.indexNum]['ID']);
  588. }
  589. locaSpaceMap.Refresh();
  590. };
  591. function qxAction(options) {
  592. var thrData = ONEMAP.D.globalSettingData.map3DModelSetting;
  593. var opData = {
  594. lng: "",
  595. lat: "",
  596. zoom: ""
  597. };
  598. for (var i = 0; i < thrData.length; i++) {
  599. var threeDlist = thrData[i].type;
  600. if (threeDlist == "qxData") {
  601. // alert("qx");
  602. // alert(opData.lng);
  603. // alert(thrData[i].center.lat)
  604. if (options == "add") {
  605. // alert(thrData[i].name);
  606. add3DModelNoFly(thrData[i]);
  607. thrData[i].indexNum = i;
  608. if (opData.lng == "") {
  609. opData.lng = thrData[i].center.lng;
  610. opData.lat = thrData[i].center.lat;
  611. opData.zoom = thrData[i].zoom;
  612. // if(options == "add"){
  613. point3D = locaSpaceMap.CreateGeoPoint3D();
  614. point3D.X = opData.lng;
  615. point3D.Y = opData.lat;
  616. point3D.Z = opData.zoom;
  617. feature = locaSpaceMap.CreateFeature();
  618. feature.Geometry = point3D;
  619. locaSpaceMap.Globe.FlyToFeature1(feature, 0, 45, 1); //飞行定位到目标点
  620. //locaSpace.FlyToPlace(opData.lng,opData.lat,opData.zoom,0,45);
  621. // }
  622. }
  623. } else if (options == "remove") {
  624. var modelData = {
  625. indexNum: i
  626. }
  627. add3DModelNoFly(modelData);
  628. }
  629. } else {
  630. // alert(threeDlist);
  631. }
  632. }
  633. // if(options == "add"){
  634. // locaSpace.FlyToPlace(opData.lng,opData.lat,opData.zoom,0,45);
  635. // }
  636. }
  637. /**
  638. * 注册订阅
  639. * @type {Function}
  640. * 推送:ONEMAP.C.publisher.publish(options,'moduleName::type');
  641. * 订阅:ONEMAP.C.publisher.subscribe(layoutResize,'sideBarLayoutChange');
  642. */
  643. function subscribe() {
  644. ONEMAP.C.publisher.subscribe(layoutResize, 'menuListClick');
  645. ONEMAP.C.publisher.subscribe(qxAction, '3DModelControl');
  646. // ONEMAP.C.publisher.subscribe(remove, 'cleanMap');
  647. }
  648. /**
  649. * 取消订阅
  650. * @type {Function}
  651. * 取消订阅:ONEMAP.C.publisher.unSubscribe(layoutResize,'sideBarLayoutChange');
  652. */
  653. function unSubscribe() {
  654. }
  655. return ONEMAP.M.threeData = {
  656. init: init
  657. }
  658. });