toolFor3d.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. /**
  2. * 三维侧栏功能
  3. */
  4. define([
  5. 'html!templates/tools/toolFor3d',
  6. 'css!styles/tools/toolFor3d'
  7. ],
  8. function(tpcLayout){
  9. /**
  10. * 状态值
  11. * @type {Boolean}
  12. * @default false
  13. * @private
  14. */
  15. var status = {
  16. initialized:false,//是否初始化
  17. veiwHeightType:null
  18. };
  19. /**
  20. * 模块数据 用于数据存储和外部调用
  21. * @type {Object}
  22. * 数据存放
  23. */
  24. var modValue = {
  25. };
  26. /**
  27. * 三维侧栏初始化设置
  28. */
  29. function init(){
  30. if(!status.initialized){
  31. setLayout();
  32. bindEvent();
  33. $(window).resize(function() {
  34. resizeLayout();
  35. });
  36. }
  37. ONEMAP.D.currentSideBarMod = 'toolsFor3d';
  38. status.initialized = true;
  39. var zIndex = ONEMAP.M.sideBar.getZIndex();
  40. $("#toolsFor3d").css({zIndex:zIndex});
  41. };
  42. function setLayout(){
  43. $(tpcLayout).appendTo($("#sideBarBody"));
  44. var mxListTemplate = Handlebars.compile($('#moxing-list-item-template').html());
  45. $('#model3DList').append(mxListTemplate(ONEMAP.D.globalSettingData.map3DModelSetting));
  46. };
  47. function bindEvent(){
  48. $('#model3DList li input:checkbox').bind('change',function(e){
  49. if($(this).is(':checked')){
  50. var modelData = ONEMAP.D.globalSettingData.map3DModelSetting[$(this).val()];
  51. modelData.indexNum = $(this).val();
  52. add3DModel(modelData);
  53. }else {
  54. var modelData = {
  55. indexNum:$(this).val()
  56. }
  57. add3DModel(modelData);
  58. }
  59. });
  60. //清除路线
  61. $('#clearFlyLine').bind('click',function(){
  62. locaSpaceMap.Globe.Action = 0; //使鼠标动作返回普通浏览状态
  63. locaSpaceMap.Globe.MemoryLayer.RemoveAllFeature();
  64. locaSpaceMap.Refresh(); //刷新显示
  65. });
  66. //绘制路线
  67. $("#drawFlyLine").bind('click',function(){
  68. if($(this).hasClass('cur')){
  69. $(this).removeClass('cur');
  70. locaSpaceMap.Globe.Action = 0; //使鼠标动作返回普通浏览状态
  71. locaSpaceMap.Refresh(); //刷新显示
  72. }else {
  73. $('#toolsModal .modal-body .cur').removeClass('cur');
  74. $(this).addClass('cur');
  75. locaSpaceMap.Globe.Action = 10;
  76. locaSpaceMap.Refresh(); //刷新显示
  77. }
  78. })
  79. //选定路线
  80. $('#selectFlyLine').bind('click',function(){
  81. if($(this).hasClass('cur')){
  82. $(this).removeClass('cur');
  83. locaSpaceMap.Globe.Action = 0; //使鼠标动作返回普通浏览状态
  84. locaSpaceMap.Refresh(); //刷新显示
  85. }else {
  86. $('#toolsModal .modal-body .cur').removeClass('cur');
  87. $(this).addClass('cur');
  88. locaSpaceMap.Globe.Action = 5;
  89. locaSpaceMap.Refresh(); //刷新显示
  90. }
  91. });
  92. //沿线飞行
  93. $('#flyByLine').bind('click',function(){
  94. var features=locaSpaceMap.Globe.DestLayerFeatureAdd.GetAllFeatures();
  95. if(locaSpaceMap.Globe.SelectedObject){
  96. var flyAlongLineSpeed=parseInt($('#flyOptions').find('input[name="flySpeed"]').val())?parseInt($('#flyOptions').find('input[name="flySpeed"]').val()):0;
  97. var flyAlongLineHeight=parseInt($('#flyOptions').find('input[name="flyHeight"]').val())?parseInt($('#flyOptions').find('input[name="flyHeight"]').val()):0;
  98. var flyAlongLineElev=parseInt($('#flyOptions').find('input[name="flyElevation"]').val())?parseInt($('#flyOptions').find('input[name="flyElevation"]').val()):0;
  99. if(flyAlongLineSpeed<100 || flyAlongLineSpeed>100000){
  100. alert('请输入大于100小于100000的速度值');
  101. return false;
  102. }
  103. if(flyAlongLineHeight<300 || flyAlongLineHeight>100000){
  104. alert('请输入大于300小于100000的高度值');
  105. return false;
  106. }
  107. if(flyAlongLineElev<1 || flyAlongLineElev>90){
  108. alert('请输入大于1小于90的仰角值');
  109. return false;
  110. }
  111. //禁止倾斜
  112. locaSpaceMap.Globe.FlyAlongLineSpeed=flyAlongLineSpeed;
  113. locaSpaceMap.Globe.FlyEyeAlongWithLine1(locaSpaceMap.Globe.SelectedObject.Geometry, flyAlongLineHeight, flyAlongLineElev, true, 0 , true);
  114. locaSpaceMap.Globe.Action = 0;
  115. $('#drawFlyLine, #selectFlyLine, #flyByLine').hide();
  116. $('#flyStop , #flyGo').show();
  117. }else {
  118. alert('请绘制或选择路线!');
  119. }
  120. });
  121. $('#flyGo').bind('click',function(){
  122. locaSpaceMap.Globe.ContinueFly();
  123. });
  124. $('#flyStop').bind('click',function(){
  125. $('#drawFlyLine, #selectFlyLine, #flyByLine').show();
  126. $('#flyStop , #flyGo').hide();
  127. locaSpaceMap.Globe.StopFly();
  128. });
  129. //工具
  130. //清除工具
  131. $('#clearAllTools').bind('click',function(){
  132. locaSpaceMap.Globe.Action = 0; //使鼠标动作返回普通浏览状态
  133. locaSpaceMap.Globe.ClearMeasure(); //清理量算遗留下来的线
  134. locaSpaceMap.Globe.ClearAnalysis();//清除所有分析
  135. locaSpaceMap.Refresh(); //刷新显示
  136. });
  137. //雷达分析
  138. $('#toolLDZZ').bind('click',function(){
  139. if($(this).hasClass('cur')){
  140. $(this).removeClass('cur');
  141. locaSpaceMap.Globe.Action = 0; //使鼠标动作返回普通浏览状态
  142. locaSpaceMap.Refresh(); //刷新显示
  143. }else {
  144. $('#toolsModal .modal-body .cur').removeClass('cur');
  145. var maxHeight = $('#toolsFor3d').height() > $('#toolsFor3dWrap').height()?$('#toolsFor3d').height():$('#toolsFor3dWrap').height();
  146. $('#coverHeight').css({height:maxHeight});
  147. $('#coverHeight').show();
  148. status.veiwHeightType='toolLDZZ';
  149. }
  150. });
  151. //可视域分析
  152. $('#toolKSYFX').bind('click',function(){
  153. if($(this).hasClass('cur')){
  154. $(this).removeClass('cur');
  155. locaSpaceMap.Globe.Action = 0; //使鼠标动作返回普通浏览状态
  156. locaSpaceMap.Refresh(); //刷新显示
  157. }else {
  158. $('#toolsModal .modal-body .cur').removeClass('cur');
  159. var maxHeight = $('#toolsFor3d').height() > $('#toolsFor3dWrap').height()?$('#toolsFor3d').height():$('#toolsFor3dWrap').height();
  160. $('#coverHeight').css({height:maxHeight});
  161. $('#coverHeight').show();
  162. status.veiwHeightType='toolKSYFX';
  163. }
  164. });
  165. $('#coverHeight .cancel').bind('click',function(){
  166. $('#coverHeight').hide();
  167. });
  168. $('#coverHeight .sure').bind('click',function(){
  169. var height = parseInt($('#coverHeight .input').val());
  170. if(height>0 && height<1000){
  171. $('#coverHeight').hide();
  172. switch(status.veiwHeightType){
  173. case 'toolLDZZ':
  174. locaSpaceMap.Globe.CenterHeightOfViewEnvelopeAnalysis = height;
  175. locaSpaceMap.Globe.Action=14;
  176. locaSpaceMap.Refresh(); //刷新显示
  177. break;
  178. case 'toolKSYFX':
  179. locaSpaceMap.Globe.CenterHeightOfViewshedAnalysis = height;
  180. locaSpaceMap.Globe.Action=13;
  181. locaSpaceMap.Refresh(); //刷新显示
  182. break;
  183. }
  184. }else {
  185. alert('请输入大于0小于1000的高度值');
  186. }
  187. });
  188. //通视分析
  189. $('#toolTTFX').bind('click',function(){
  190. if($(this).hasClass('cur')){
  191. $(this).removeClass('cur');
  192. locaSpaceMap.Globe.Action = 0; //使鼠标动作返回普通浏览状态
  193. locaSpaceMap.Refresh(); //刷新显示
  194. }else {
  195. $('#toolsModal .modal-body .cur').removeClass('cur');
  196. $(this).addClass('cur');
  197. locaSpaceMap.Globe.Action=15;
  198. locaSpaceMap.Refresh(); //刷新显示
  199. }
  200. });
  201. //高度测量
  202. $('#toolGDLS').bind('click',function(){
  203. if($(this).hasClass('cur')){
  204. $(this).removeClass('cur');
  205. locaSpaceMap.Globe.Action = 0; //使鼠标动作返回普通浏览状态
  206. locaSpaceMap.Refresh(); //刷新显示
  207. }else {
  208. $('#toolsModal .modal-body .cur').removeClass('cur');
  209. $(this).addClass('cur');
  210. locaSpaceMap.Globe.Action=4;
  211. locaSpaceMap.Globe.RulerHeight.SpaceMeasure = false; // 量算模式绘制线的时候是从地表为起点向上绘制
  212. locaSpaceMap.Globe.RulerHeight.ValueMode = 1; // 量算的线上显示的值是相对地表高度
  213. locaSpaceMap.Refresh(); //刷新显示
  214. }
  215. });
  216. };
  217. function resizeLayout(){
  218. };
  219. /**
  220. * 加载/移除3D模型
  221. * @return {[type]} [description]
  222. */
  223. function add3DModel(options){
  224. if(options.name){
  225. modValue['model'+options.indexNum] = locaSpace.AddLayer(options.url);
  226. locaSpace.FlyToPlace(options.center.lng,options.center.lat,options.zoom,0,45);
  227. }else {
  228. locaSpaceMap.Globe.Layers.RemoveLayerByID(modValue['model'+options.indexNum]['ID']);
  229. }
  230. locaSpaceMap.Refresh();
  231. };
  232. return ONEMAP.M.toolFor3d = {
  233. init:init
  234. }
  235. })