f61_space_point.html 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0" />
  6. <meta name="author" content="火星科技 http://mars3d.cn " />
  7. <meta name="apple-touch-fullscreen" content="yes" />
  8. <meta name="apple-mobile-web-app-capable" content="yes" />
  9. <meta name="apple-mobile-web-app-status-bar-style" content="black" />
  10. <meta name="format-detection" content="telephone=no" />
  11. <meta name="x5-fullscreen" content="true" />
  12. <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
  13. <!-- 标题及搜索关键字 -->
  14. <meta name="keywords" content="火星科技,cesium,3D,GIS,marsgis,三维,地球,地图,开发,框架,系统,示例,资料,模型,离线,外包,合肥,安徽,中国" />
  15. <meta
  16. name="description"
  17. content="火星科技 合肥火星 合肥火星科技 合肥火星科技有限公司 leaflet leaflet框架 leaflet开发 cesium cesium开发 cesium框架 三维 地球 模型 gis marsgis 地图离线 地图开发 地图框架 地图外包 框架 开发 外包 地图离线 二维地图 三维地图 全景漫游 地理信息系统 云GIS 三维GIS GIS平台 WebGIS"
  18. />
  19. <link rel="shortcut icon" type="image/x-icon" href="" />
  20. <title>外太空物 </title>
  21. <!--第三方lib-->
  22. <script
  23. type="text/javascript"
  24. src="../lib/include-lib.js"
  25. libpath="../lib/"
  26. include="jquery,jquery-range,bootstrap,bootstrap-checkbox,bootstrap-slider,font-awesome,layer,toastr,haoutil,mars3d,mars3d-space"
  27. ></script>
  28. <link href="css/style.css" rel="stylesheet" />
  29. <style>
  30. /* 滑动轨的样式设置 */
  31. .slider .tooltip.top {
  32. margin-top: -45px;
  33. }
  34. .slider .tooltip-inner {
  35. font-size: 18px;
  36. border: #cde1de 1px solid;
  37. }
  38. </style>
  39. </head>
  40. <body class="dark">
  41. <!--加载前进行操作提示,优化用户体验-->
  42. <div id="mask" class="signmask" onclick="removeMask()"></div>
  43. <div id="mars3dContainer" class="mars3d-container"></div>
  44. <!--查询条件面板-->
  45. <div id="viewContorUi" class="infoview">
  46. <table class="mars-table">
  47. <tr>
  48. <td>系列卫星</td>
  49. <td>
  50. <select id="selXilie" class="selectpicker form-control">
  51. <option value="" selected="selected">无</option>
  52. <option value="gps">美国 GPS系统</option>
  53. <option value="bd">中国 北斗卫星系统</option>
  54. <option value="glonass">俄罗斯 格洛纳斯系统</option>
  55. <option value="inmarsat">国际海事卫星(Inmarsat)</option>
  56. <option value="landsat">地球资源卫星(Landsat)</option>
  57. <option value="digitalglobe">数位全球(DigitalGlobe)</option>
  58. </select>
  59. </td>
  60. </tr>
  61. <tr>
  62. <td>所属国家</td>
  63. <td>
  64. <select id="selCountry" class="selectpicker form-control">
  65. <option value="" selected="selected">全部</option>
  66. <option value="US">美国</option>
  67. <option value="CIS">俄罗斯</option>
  68. <option value="PRC">中国</option>
  69. <option value="UK">英国</option>
  70. <option value="FR">法国</option>
  71. <option value="CA">加拿大</option>
  72. <option value="AUS">澳大利亚</option>
  73. <option value="JPN">小日本</option>
  74. <option value="IND">印度</option>
  75. </select>
  76. </td>
  77. </tr>
  78. <tr>
  79. <td>对象类型</td>
  80. <td>
  81. <select id="selType" class="selectpicker form-control">
  82. <option value="" selected="selected">全部</option>
  83. <option value="satellite">普通卫星</option>
  84. <option value="junk">垃圾(卫星碎片、火箭和助推器)</option>
  85. </select>
  86. </td>
  87. </tr>
  88. <tr title="雷达截面">
  89. <td>雷达截面</td>
  90. <td>
  91. <input id="slider-rcs" type="text" />
  92. </td>
  93. </tr>
  94. <tr>
  95. <td>发射日期</td>
  96. <td>
  97. <input id="slider-launchdate" type="text" />
  98. </td>
  99. </tr>
  100. <tr>
  101. <td>轨道周期</td>
  102. <td>
  103. <input id="slider-period" type="text" />
  104. </td>
  105. </tr>
  106. <tr>
  107. <td>轨道类型</td>
  108. <td>
  109. <select id="selGuidao" class="selectpicker form-control">
  110. <option value="" selected="selected">全部</option>
  111. <option value="low">低地球轨道</option>
  112. <option value="medium">中地球轨道</option>
  113. <option value="geosynchronous">地球同步轨道</option>
  114. <option value="geostationary">地球静止轨道</option>
  115. <option value="high">高地球轨道</option>
  116. </select>
  117. </td>
  118. </tr>
  119. <tr>
  120. <td>倾斜角度</td>
  121. <td>
  122. <input id="slider-inclination" type="text" />
  123. </td>
  124. </tr>
  125. <tr>
  126. <td>远地点高度</td>
  127. <td>
  128. <input id="slider-apogee" type="text" />
  129. </td>
  130. </tr>
  131. <tr>
  132. <td>近地点高度</td>
  133. <td>
  134. <input id="slider-perigee" type="text" />
  135. </td>
  136. </tr>
  137. <tr>
  138. <td></td>
  139. <td>
  140. <input id="btnClearQuery" type="button" class="btn btn-primary" value="重置" onclick="resetUI()" />
  141. </td>
  142. </tr>
  143. </table>
  144. </div>
  145. <!--卫星详情面板-->
  146. <div id="pointInfo" class="infoview" style="display: none">
  147. <input id="btnBack" type="button" class="btn btn-primary" value="返回" onclick="highlightSatellite()" />
  148. <table class="mars-table tb-border">
  149. <tr>
  150. <td class="nametd">名称</td>
  151. <td id="td_name"></td>
  152. </tr>
  153. <tr title="北美空防司令部目录号">
  154. <td class="nametd">目录号</td>
  155. <td id="td_norad"></td>
  156. </tr>
  157. <tr title="空间研委会编号">
  158. <td class="nametd">国际代号</td>
  159. <td id="td_cospar"></td>
  160. </tr>
  161. <tr>
  162. <td class="nametd">对象类型</td>
  163. <td id="td_type"></td>
  164. </tr>
  165. <tr>
  166. <td class="nametd">操作状态</td>
  167. <td id="td_status"></td>
  168. </tr>
  169. <tr>
  170. <td class="nametd">所有者/国家</td>
  171. <td id="td_country"></td>
  172. </tr>
  173. <tr>
  174. <td class="nametd">发射日期</td>
  175. <td id="td_launchDate"></td>
  176. </tr>
  177. <tr>
  178. <td class="nametd">发射地点</td>
  179. <td id="td_launchSite"></td>
  180. </tr>
  181. <tr id="viewDecay">
  182. <td class="nametd">衰减日期</td>
  183. <td id="td_decayDate"></td>
  184. </tr>
  185. <tr>
  186. <td class="nametd">轨道周期[分钟]</td>
  187. <td id="td_period"></td>
  188. </tr>
  189. <tr>
  190. <td class="nametd">倾角[度]</td>
  191. <td id="td_inclination"></td>
  192. </tr>
  193. <tr>
  194. <td class="nametd">远地点高度[公里]</td>
  195. <td id="td_apogee"></td>
  196. </tr>
  197. <tr>
  198. <td class="nametd">近地点高度[公里]</td>
  199. <td id="td_perigee"></td>
  200. </tr>
  201. <tr>
  202. <td class="nametd">雷达截面</td>
  203. <td id="td_rcs"></td>
  204. </tr>
  205. <tr>
  206. <td class="nametd">轨道中心</td>
  207. <td id="td_orbitCenter"></td>
  208. </tr>
  209. <tr>
  210. <td class="nametd">轨道类型</td>
  211. <td id="td_orbitType"></td>
  212. </tr>
  213. <tr>
  214. <td class="nametd">更多资料</td>
  215. <td>
  216. <a id="link_n2yo" href="" class="rc-vertical" target="_blank">N2YO...</a>
  217. </td>
  218. </tr>
  219. </table>
  220. </div>
  221. <script src="./js/common.js"></script>
  222. <script type="text/javascript">
  223. "use script"; //开发环境建议开启严格模式
  224. var map;
  225. var graphicLayer;
  226. var allCount;
  227. function initMap(options) {
  228. //合并属性参数,可覆盖config.json中的对应配置
  229. var mapOptions = mars3d.Util.merge(options, {
  230. scene: {
  231. center: { lat: 29.646563, lng: 96.25028, alt: 150004581, heading: 352, pitch: -90 },
  232. cameraController: {
  233. zoomFactor: 3.0,
  234. minimumZoomDistance: 1,
  235. maximumZoomDistance: 500000000,
  236. constrainedAxis: false, //解除在南北极区域鼠标操作限制
  237. },
  238. clock: {
  239. multiplier: 2, //速度
  240. },
  241. },
  242. control: {
  243. animation: true, //是否创建动画小器件,左下角仪表
  244. timeline: true, //是否显示时间线控件
  245. },
  246. });
  247. delete mapOptions.terrain;
  248. //创建三维地球场景
  249. map = new mars3d.Map("mars3dContainer", mapOptions);
  250. //修改天空盒
  251. map.scene.skyBox = new Cesium.SkyBox({
  252. sources: {
  253. negativeX: "img/skybox/5/tycho2t3_80_mx.jpg",
  254. negativeY: "img/skybox/5/tycho2t3_80_my.jpg",
  255. negativeZ: "img/skybox/5/tycho2t3_80_mz.jpg",
  256. positiveX: "img/skybox/5/tycho2t3_80_px.jpg",
  257. positiveY: "img/skybox/5/tycho2t3_80_py.jpg",
  258. positiveZ: "img/skybox/5/tycho2t3_80_pz.jpg",
  259. },
  260. });
  261. initUI();
  262. queryTleApiData()
  263. .then(function (arr) {
  264. initData(arr);
  265. })
  266. .catch(function () {
  267. haoutil.msg("获取空间目标轨道数据异常!");
  268. });
  269. }
  270. // 访问后端接口,取数据
  271. function queryTleApiData() {
  272. return new Promise(function (resolve, reject) {
  273. $.ajax({
  274. url: "//data.mars3d.cn/file/apidemo/tle.json",
  275. type: "get",
  276. dataType: "json",
  277. success: function (result) {
  278. resolve(result.list);
  279. },
  280. error: function (data) {
  281. reject(data);
  282. },
  283. });
  284. });
  285. }
  286. function initData(arr) {
  287. allCount = arr.length;
  288. haoutil.msg("当前外太空物数量: " + allCount);
  289. //创建Graphic图层
  290. graphicLayer = new mars3d.layer.GraphicLayer();
  291. map.addLayer(graphicLayer);
  292. //单击地图空白处
  293. map.on(mars3d.EventType.clickMap, function (event) {
  294. highlightSatellite();
  295. });
  296. graphicLayer.on(mars3d.EventType.click, function (event) {
  297. console.log("单击了卫星", event);
  298. //单击事件
  299. highlightSatellite(event.graphic);
  300. });
  301. for (let i = 0; i < arr.length; i++) {
  302. let item = arr[i];
  303. let style = {
  304. pixelSize: 5,
  305. color: "rgba(0,255,0,0.6)",
  306. outlineWidth: 1,
  307. outlineColor: "#000000",
  308. scaleByDistance: new Cesium.NearFarScalar(20000000, 1.0, 150000000, 0.4),
  309. };
  310. //转为属性,方便使用
  311. if (item.info) {
  312. item.cospar = item.info[0]; // 国际代号
  313. item.type = item.info[1]; //对象类型
  314. item.status = item.info[2]; // 操作状态代码
  315. item.country = item.info[3]; //所有权(国家)
  316. item.launchDate = item.info[4] && new Date(item.info[4]); //发射日期
  317. item.launchSite = item.info[5]; //发射地点
  318. item.decayDate = item.info[6]; // 衰减日期
  319. item.period = item.info[7]; // 轨道周期[分钟]
  320. item.inclination = item.info[8]; // 倾角[度]
  321. item.apogee = item.info[9]; //远地点高度[公里]
  322. item.perigee = item.info[10]; //近地点高度[公里]
  323. item.rcs = item.info[11]; //雷达截面
  324. // item.dataStatus = item.info[12]; // 数据状态码
  325. item.orbitCenter = item.info[13]; // 轨道中心
  326. item.orbitType = item.info[14]; // 轨道类型
  327. delete item.info;
  328. }
  329. var primitive = new mars3d.graphic.PointPrimitive({
  330. id: item.id,
  331. style: style,
  332. attr: item,
  333. });
  334. graphicLayer.addGraphic(primitive);
  335. }
  336. initWorker(arr);
  337. }
  338. //采用多线程来计算卫星位置
  339. var worker;
  340. function initWorker(arr) {
  341. worker = new Worker("./js/tleWorker.js");
  342. worker.onmessage = function (event) {
  343. let time = event.data.time;
  344. let positionObj = event.data.positionObj;
  345. // console.log('接收到数据', positionObj)
  346. for (var id in positionObj) {
  347. let item = positionObj[id];
  348. if (!item) {
  349. continue;
  350. }
  351. let graphic = graphicLayer.getGraphicById(id);
  352. if (graphic) {
  353. graphic.position = new Cesium.Cartesian3(item.x, item.y, item.z);
  354. }
  355. }
  356. //循环继续发送请求消息
  357. postWorkerMessage(arr);
  358. };
  359. //主线程调用worker.postMessage()方法,向 Worker 发消息。
  360. postWorkerMessage(arr);
  361. }
  362. function postWorkerMessage(arr) {
  363. //取数据的时间范围,开始时间
  364. let date = Cesium.JulianDate.toDate(map.clock.currentTime);
  365. //主线程调用worker.postMessage()方法,向 Worker 发消息。
  366. worker.postMessage({
  367. time: date,
  368. list: arr,
  369. });
  370. }
  371. var lastSelectWX;
  372. function highlightSatellite(satelliteObj) {
  373. if (lastSelectWX) {
  374. $("#pointInfo").hide();
  375. $("#viewContorUi").show();
  376. //重置上次选中的轨道样式
  377. lastSelectWX.remove(true);
  378. lastSelectWX = null;
  379. }
  380. if (satelliteObj) {
  381. let item = satelliteObj.attr;
  382. showInfo(item);
  383. //高亮选中的轨道样式
  384. var weixin = new mars3d.graphic.Satellite({
  385. tle1: item.tle1,
  386. tle2: item.tle2,
  387. model: {
  388. url: "//data.mars3d.cn/gltf/mars/weixin.gltf",
  389. scale: 1,
  390. autoHeading: true,
  391. minimumPixelSize: 50,
  392. show: item.name ? true : false,
  393. },
  394. label: {
  395. color: "#ffffff",
  396. opacity: 1,
  397. font_family: "楷体",
  398. font_size: 30,
  399. outline: true,
  400. outlineColor: "#000000",
  401. outlineWidth: 3,
  402. background: true,
  403. backgroundColor: "#000000",
  404. backgroundOpacity: 0.5,
  405. font_weight: "normal",
  406. font_style: "normal",
  407. pixelOffsetX: 0,
  408. pixelOffsetY: -20,
  409. scaleByDistance: true,
  410. scaleByDistance_far: 10000000,
  411. scaleByDistance_farValue: 0.4,
  412. scaleByDistance_near: 100000,
  413. scaleByDistance_nearValue: 1,
  414. show: true,
  415. },
  416. path: {
  417. show: true,
  418. color: "#e2e2e2",
  419. opacity: 0.8,
  420. width: 1,
  421. },
  422. });
  423. map.graphicLayer.addGraphic(weixin);
  424. lastSelectWX = weixin;
  425. }
  426. }
  427. function showInfo(attr) {
  428. if (!attr.name) {
  429. return;
  430. }
  431. $("#pointInfo").show();
  432. $("#viewContorUi").hide();
  433. $("#td_name").html(attr.name);
  434. $("#td_norad").html(attr.id);
  435. $("#td_cospar").html(attr.cospar);
  436. $("#td_type").html(attr.type);
  437. $("#td_status").html(getStatusName(attr.status));
  438. $("#td_country").html(getCountryName(attr.country));
  439. if (attr.launchDate) {
  440. $("#td_launchDate").html(attr.launchDate.format("yyyy-MM-dd"));
  441. }
  442. $("#td_launchSite").html(getLaunchSiteName(attr.launchSite));
  443. if (attr.status == "D") {
  444. $("#td_decayDate").html(attr.decayDate);
  445. $("#viewDecay").show();
  446. } else {
  447. $("#viewDecay").hide();
  448. }
  449. $("#td_period").html(mars3d.Util.formatNum(attr.period, 2) + " 分钟");
  450. $("#td_inclination").html(attr.inclination + "°");
  451. $("#td_apogee").html(mars3d.Util.formatNum(attr.apogee, 0) + " km");
  452. $("#td_perigee").html(mars3d.Util.formatNum(attr.perigee, 0) + " km");
  453. $("#td_rcs").html(attr.rcs || "未知");
  454. $("#td_orbitCenter").html(attr.orbitCenter);
  455. $("#td_orbitType").html(attr.orbitType);
  456. $("#link_n2yo").attr("href", "https://www.n2yo.com/satellite/?s=" + attr.id);
  457. }
  458. // Orbital altitude definitions.
  459. var LOW_ORBIT = 2000;
  460. var GEOSYNCHRONOUS_ORBIT = 35786;
  461. function initUI() {
  462. $("#selXilie").change(function () {
  463. selectSatellites();
  464. });
  465. $("#selGuidao").change(function () {
  466. var val = $(this).val();
  467. switch (val) {
  468. default:
  469. $("#slider-apogee").slider("setValue", [
  470. $("#slider-apogee").slider("getAttribute", "min"),
  471. $("#slider-apogee").slider("getAttribute", "max"),
  472. ]);
  473. $("#slider-perigee").slider("setValue", [
  474. $("#slider-perigee").slider("getAttribute", "min"),
  475. $("#slider-perigee").slider("getAttribute", "max"),
  476. ]);
  477. $("#slider-inclination").slider("setValue", [
  478. $("#slider-inclination").slider("getAttribute", "min"),
  479. $("#slider-inclination").slider("getAttribute", "max"),
  480. ]);
  481. break;
  482. case "low":
  483. $("#slider-apogee").slider("setValue", [$("#slider-apogee").slider("getAttribute", "min"), LOW_ORBIT]);
  484. $("#slider-perigee").slider("setValue", [$("#slider-perigee").slider("getAttribute", "min"), LOW_ORBIT]);
  485. break;
  486. case "medium":
  487. $("#slider-apogee").slider("setValue", [LOW_ORBIT, GEOSYNCHRONOUS_ORBIT]);
  488. $("#slider-perigee").slider("setValue", [LOW_ORBIT, GEOSYNCHRONOUS_ORBIT]);
  489. break;
  490. case "geosynchronous":
  491. $("#slider-apogee").slider("setValue", [GEOSYNCHRONOUS_ORBIT * 0.98, GEOSYNCHRONOUS_ORBIT * 1.02]);
  492. $("#slider-perigee").slider("setValue", [GEOSYNCHRONOUS_ORBIT * 0.98, GEOSYNCHRONOUS_ORBIT * 1.02]);
  493. break;
  494. case "geostationary":
  495. $("#slider-apogee").slider("setValue", [GEOSYNCHRONOUS_ORBIT * 0.98, GEOSYNCHRONOUS_ORBIT * 1.02]);
  496. $("#slider-perigee").slider("setValue", [GEOSYNCHRONOUS_ORBIT * 0.98, GEOSYNCHRONOUS_ORBIT * 1.02]);
  497. $("#slider-inclination").slider("setValue", [0, 1]);
  498. break;
  499. case "high":
  500. $("#slider-apogee").slider("setValue", [GEOSYNCHRONOUS_ORBIT * 1.02, $("#slider-apogee").slider("getAttribute", "max")]);
  501. $("#slider-perigee").slider("setValue", [GEOSYNCHRONOUS_ORBIT * 1.02, $("#slider-perigee").slider("getAttribute", "max")]);
  502. break;
  503. }
  504. selectSatellites();
  505. });
  506. $("#selCountry").change(function () {
  507. selectSatellites();
  508. });
  509. $("#selType").change(function () {
  510. selectSatellites();
  511. });
  512. $("#slider-rcs")
  513. .slider({
  514. id: "slider-rcs-internal",
  515. ticks: [0, 1, 10, 50, 100, 1000],
  516. ticks_positions: [0, 20, 40, 60, 80, 100],
  517. ticks_labels: ["0", "1", "10", "50", "100", "1000"],
  518. range: true,
  519. value: [0, 1000],
  520. })
  521. .on("slideStop", function () {
  522. selectSatellites();
  523. });
  524. $("#slider-launchdate")
  525. .slider({
  526. id: "slider-launchdate-internal",
  527. ticks: [1950, 1960, 1970, 1980, 1990, 2000, 2010, 2021],
  528. ticks_labels: ["'50", "'60", "'70", "'80", "'90", "'00", "'10", "'20"],
  529. range: true,
  530. value: [1950, 2021],
  531. })
  532. .on("slideStop", function () {
  533. selectSatellites();
  534. });
  535. $("#slider-period")
  536. .slider({
  537. id: "slider-period-internal",
  538. ticks: [0, 100, 200, 1000, 10000, 60000],
  539. ticks_positions: [0, 20, 40, 60, 80, 100],
  540. ticks_labels: ["0", "100", "200", "1k", "1w", "6w"],
  541. range: true,
  542. value: [0, 60000],
  543. })
  544. .on("slideStop", function () {
  545. selectSatellites();
  546. });
  547. $("#slider-inclination")
  548. .slider({
  549. id: "slider-inclination-internal",
  550. ticks: [0, 30, 60, 90, 120, 150],
  551. ticks_positions: [0, 20, 40, 60, 80, 100],
  552. ticks_labels: ["0°", "30°", "60°", "90°", "120°", "150°"],
  553. range: true,
  554. value: [0, 150],
  555. })
  556. .on("slideStop", function () {
  557. selectSatellites();
  558. });
  559. //远地点高度
  560. $("#slider-apogee")
  561. .slider({
  562. id: "slider-apogee-internal",
  563. ticks: [0, 1000, 2000, 5000, 10000, 600000],
  564. ticks_positions: [0, 20, 40, 60, 80, 100],
  565. ticks_labels: ["0", "1km", "2km", "5km", "10km", "600km"],
  566. range: true,
  567. value: [0, 600000],
  568. })
  569. .on("slideStop", function () {
  570. selectSatellites();
  571. });
  572. //近地点高度
  573. $("#slider-perigee")
  574. .slider({
  575. id: "slider-perigee-internal",
  576. ticks: [0, 1000, 2000, 5000, 10000, 500000],
  577. ticks_positions: [0, 20, 40, 60, 80, 100],
  578. ticks_labels: ["0", "1km", "2km", "5km", "10km", "500km"],
  579. range: true,
  580. value: [0, 500000],
  581. })
  582. .on("slideStop", function () {
  583. selectSatellites();
  584. });
  585. }
  586. function resetUI() {
  587. if (!graphicLayer) {
  588. return;
  589. }
  590. $("#selXilie").val("");
  591. $("#selCountry").val("");
  592. $("#selType").val("");
  593. $("#selGuidao").val("");
  594. resetSlider("#slider-rcs");
  595. resetSlider("#slider-launchdate");
  596. resetSlider("#slider-period");
  597. resetSlider("#slider-inclination");
  598. resetSlider("#slider-apogee");
  599. resetSlider("#slider-perigee");
  600. //循环所有卫星
  601. graphicLayer.eachGraphic(function (graphic) {
  602. if (graphic.selected) {
  603. graphic.setStyle({
  604. color: "rgba(0,255,0,0.6)",
  605. outlineColor: "#000000",
  606. });
  607. graphic.selected = false;
  608. }
  609. });
  610. }
  611. function resetSlider(name) {
  612. $(name).slider("setValue", [$(name).slider("getAttribute", "min"), $(name).slider("getAttribute", "max")]);
  613. }
  614. // Well known satellite constellations.
  615. var GPS = [
  616. // eslint-disable-next-line prettier/prettier
  617. 20959, 22877, 23953, 24876, 25933, 26360, 26407, 26605, 26690, 27663, 27704, 28129, 28190, 28361, 28474, 28874, 29486, 29601, 32260, 32384,
  618. 32711, 35752, 36585, 37753, 38833, 39166, 39533, 39741, 40105, 40294, 40534,
  619. ];
  620. var GLONASS = [
  621. // eslint-disable-next-line prettier/prettier
  622. 28915, 29672, 29670, 29671, 32276, 32275, 32393, 32395, 36111, 36112, 36113, 36400, 36402, 36401, 37139, 37138, 37137, 37829, 37869, 37867,
  623. 37868, 39155, 39620, 40001,
  624. ];
  625. var INMARSAT = [20918, 21149, 21814, 21940, 23839, 24307, 24674, 24819, 25153, 28628, 28899, 33278, 40384, 39476];
  626. var LANDSAT = [25682, 39084];
  627. var DIGITALGLOBE = [25919, 32060, 33331, 35946, 40115];
  628. // 判断卫星数据
  629. function selectSatellites(options = {}) {
  630. if (!graphicLayer) {
  631. return;
  632. }
  633. var xilie = $("#selXilie").val(); //系列卫星
  634. var country = $("#selCountry").val(); //所属国家
  635. var type = $("#selType").val(); //对象类型
  636. var val1 = $("#slider-launchdate").slider("getValue");
  637. var val2 = $("#slider-period").slider("getValue");
  638. var val3 = $("#slider-inclination").slider("getValue");
  639. var val4 = $("#slider-apogee").slider("getValue");
  640. var val5 = $("#slider-perigee").slider("getValue");
  641. var val6 = $("#slider-rcs").slider("getValue");
  642. var min1 = $("#slider-launchdate").slider("getAttribute", "min");
  643. var min2 = $("#slider-period").slider("getAttribute", "min");
  644. var min3 = $("#slider-inclination").slider("getAttribute", "min");
  645. var min4 = $("#slider-apogee").slider("getAttribute", "min");
  646. var min5 = $("#slider-perigee").slider("getAttribute", "min");
  647. var min6 = $("#slider-rcs").slider("getAttribute", "min");
  648. var max1 = $("#slider-launchdate").slider("getAttribute", "max");
  649. var max2 = $("#slider-period").slider("getAttribute", "max");
  650. var max3 = $("#slider-inclination").slider("getAttribute", "max");
  651. var max4 = $("#slider-apogee").slider("getAttribute", "max");
  652. var max5 = $("#slider-perigee").slider("getAttribute", "max");
  653. var max6 = $("#slider-rcs").slider("getAttribute", "max");
  654. let selCount = 0;
  655. //循环所有卫星
  656. graphicLayer.eachGraphic(function (graphic) {
  657. //先将所有样式还原
  658. if (graphic.selected) {
  659. graphic.setStyle({
  660. color: "rgba(0,255,0,0.6)",
  661. outlineColor: "#000000",
  662. });
  663. graphic.selected = false;
  664. }
  665. let attr = graphic.attr; //卫星的属性
  666. //系列卫星时
  667. if (xilie) {
  668. let selected;
  669. switch (xilie) {
  670. case "gps":
  671. selected = GPS.indexOf(attr.id) !== -1;
  672. break;
  673. case "bd":
  674. selected = attr.name.indexOf("BD") !== -1 || attr.name.indexOf("BEIDOU") !== -1;
  675. break;
  676. case "glonass":
  677. selected = GLONASS.indexOf(attr.id) !== -1;
  678. break;
  679. case "inmarsat":
  680. selected = INMARSAT.indexOf(attr.id) !== -1;
  681. break;
  682. case "landsat":
  683. selected = LANDSAT.indexOf(attr.id) !== -1;
  684. break;
  685. case "digitalglobe":
  686. selected = DIGITALGLOBE.indexOf(attr.id) !== -1;
  687. break;
  688. }
  689. if (!selected) {
  690. return;
  691. }
  692. }
  693. //国家
  694. if (country && country !== attr.country) {
  695. return;
  696. }
  697. //类型的判断
  698. if (type) {
  699. let name = attr.name;
  700. if (type === "junk" && name.indexOf(" DEB") === -1 && name.indexOf(" R/B") === -1) {
  701. return;
  702. }
  703. if (type === "satellite" && (name.indexOf(" DEB") !== -1 || name.indexOf(" R/B") !== -1)) {
  704. return;
  705. }
  706. }
  707. // 滑动轨的判断
  708. // Launch date
  709. if (val1[0] !== min1 || val1[1] !== max1) {
  710. if (!attr.launchDate) {
  711. return;
  712. }
  713. var y = attr.launchDate.getFullYear();
  714. if (y <= val1[0] || y >= val1[1]) {
  715. return;
  716. }
  717. }
  718. // Orbital period
  719. if (val2[0] !== min2 || val2[1] !== max2) {
  720. if (!attr.period) {
  721. return;
  722. }
  723. if (attr.period < val2[0] || attr.period > val2[1]) {
  724. return;
  725. }
  726. }
  727. // Inclination
  728. if (val3[0] !== min3 || val3[1] !== max3) {
  729. if (!attr.inclination) {
  730. return;
  731. }
  732. if (attr.inclination < val3[0] || attr.inclination > val3[1]) {
  733. return;
  734. }
  735. }
  736. // Apogee
  737. if (val4[0] !== min4 || val4[1] !== max4) {
  738. if (!attr.apogee) {
  739. return;
  740. }
  741. if (attr.apogee < val4[0] || attr.apogee > val4[1]) {
  742. return;
  743. }
  744. }
  745. // Perigee
  746. if (val5[0] !== min5 || val5[1] !== max5) {
  747. if (!attr.perigee) {
  748. return;
  749. }
  750. if (attr.perigee < val5[0] || attr.perigee > val5[1]) {
  751. return;
  752. }
  753. }
  754. // 尺寸的判断
  755. if (val6[0] !== min6 || val6[1] !== max6) {
  756. if (!attr.rcs) {
  757. return;
  758. }
  759. if (attr.rcs <= val6[0] || attr.rcs >= val6[1]) {
  760. return;
  761. }
  762. }
  763. //将筛选到的数据修改为红色
  764. if (!graphic.selected) {
  765. graphic.selected = true;
  766. graphic.setStyle({
  767. color: "rgba(255,0,0,1.0)",
  768. outlineColor: "#FFFFFF",
  769. });
  770. }
  771. selCount++;
  772. });
  773. haoutil.msg(`${allCount}个对象中,有 ${selCount} 个符合条件`);
  774. }
  775. function getStatusName(code) {
  776. switch (code) {
  777. case "+":
  778. return "运作的";
  779. case "-":
  780. return "非运转的";
  781. case "P":
  782. return "部分运转,部分完成主要任务或次要任务";
  783. case "B":
  784. return "备份/备用,先前运行的卫星进入储备状态";
  785. case "S":
  786. return "备用,新卫星等待完全激活";
  787. case "X":
  788. return "扩展的任务";
  789. case "D":
  790. return "衰退的";
  791. case "?":
  792. return "未知的";
  793. }
  794. return code;
  795. }
  796. function getLaunchSiteName(code) {
  797. switch (code) {
  798. case "AFETR":
  799. return "美国佛罗里达州空军东部试验场";
  800. case "AFWTR":
  801. return "美国加州空军西部试验场";
  802. case "CAS":
  803. return "Canaries Airspace";
  804. case "DLS":
  805. return "俄罗斯Dombarovskiy发射场";
  806. case "ERAS":
  807. return "东部领空范围";
  808. case "FRGUI":
  809. return "法属圭亚那库鲁的欧洲太空港";
  810. case "HGSTR":
  811. return "阿尔及利亚的Hammaguira空间轨道靶场";
  812. case "JSC":
  813. return "中国酒泉航天中心";
  814. case "KODAK":
  815. return "美国阿拉斯加科迪亚克发射中心";
  816. case "KSCUT":
  817. return "日本内浦航天中心";
  818. case "KWAJ":
  819. return "美国陆军夸贾林环礁";
  820. case "KYMSC":
  821. return "俄罗斯Kapustin Yar导弹和太空综合体";
  822. case "NSC":
  823. return "韩国罗老宇航中心";
  824. case "PLMSC":
  825. return "俄罗斯普列谢茨克导弹和太空综合体";
  826. case "RLLB":
  827. return "火箭实验室发射基地";
  828. case "SEAL":
  829. return "海上发射平台(流动)";
  830. case "SEMLS":
  831. return "伊朗塞姆南卫星发射场";
  832. case "SMTS":
  833. return "伊朗沙赫鲁德导弹试验场";
  834. case "SNMLP":
  835. return "印度洋(肯尼亚)圣马可发射平台";
  836. case "SRILR":
  837. return "印度萨迪什·达万航天中心";
  838. case "SUBL":
  839. return "潜艇发射平台(移动式)";
  840. case "SVOBO":
  841. return "俄罗斯Svobodnyy发射中心";
  842. case "TAISC":
  843. return "中国太原航天中心";
  844. case "TANSC":
  845. return "日本种子岛宇宙中心";
  846. case "TYMSC":
  847. return "哈萨克斯坦秋拉坦导弹和航天中心";
  848. case "VOSTO":
  849. return "俄罗斯东方港航天器发射场";
  850. case "WLPIS":
  851. return "美国弗吉尼亚州瓦勒普斯岛";
  852. case "WOMRA":
  853. return "澳大利亚Woomera";
  854. case "WRAS":
  855. return "西方领空范围";
  856. case "WSC":
  857. return "中国文昌卫星发射场";
  858. case "XICLF":
  859. return "中国西昌发射场";
  860. case "YAVNE":
  861. return "以色列Yavne发射设施";
  862. case "YUN":
  863. return "朝鲜云松发射场";
  864. case "UNK":
  865. return "未知的";
  866. }
  867. return code;
  868. }
  869. function getCountryName(code) {
  870. switch (code) {
  871. case "AB":
  872. return "阿拉伯卫星通信组织";
  873. case "ABS":
  874. return "亚洲广播卫星";
  875. case "AC":
  876. return "亚洲卫星电讯公司";
  877. case "ALG":
  878. return "阿尔及利亚";
  879. case "ANG":
  880. return "安哥拉";
  881. case "ARGN":
  882. return "阿根廷";
  883. case "ASRA":
  884. return "奥地利";
  885. case "AUS":
  886. return "澳大利亚";
  887. case "AZER":
  888. return "阿塞拜疆";
  889. case "BEL":
  890. return "比利时";
  891. case "BELA":
  892. return "白俄罗斯";
  893. case "BERM":
  894. return "百慕大";
  895. case "BGD":
  896. return "孟加拉国";
  897. case "BHUT":
  898. return "不丹王国";
  899. case "BOL":
  900. return "玻利维亚";
  901. case "BRAZ":
  902. return "巴西";
  903. case "BUL":
  904. return "保加利亚";
  905. case "CA":
  906. return "加拿大";
  907. case "CHBZ":
  908. return "中国/巴西";
  909. case "CHLE":
  910. return "智利";
  911. case "CIS":
  912. return "前苏联";
  913. case "COL":
  914. return "哥伦比亚";
  915. case "CRI":
  916. return "哥斯达黎加共和国";
  917. case "CZCH":
  918. return "捷克";
  919. case "DEN":
  920. return "丹麦";
  921. case "ECU":
  922. return "厄瓜多尔";
  923. case "EGYP":
  924. return "埃及";
  925. case "ESA":
  926. return "欧洲太空总署";
  927. case "ESRO":
  928. return "欧洲空间研究组织";
  929. case "EST":
  930. return "爱沙尼亚";
  931. case "EUME":
  932. return "欧洲气象卫星开发组织";
  933. case "EUTE":
  934. return "欧洲电信卫星组织";
  935. case "FGER":
  936. return "法国/德国";
  937. case "FIN":
  938. return "芬兰";
  939. case "FR":
  940. return "法国";
  941. case "FRIT":
  942. return "法国/意大利";
  943. case "GER":
  944. return "德国";
  945. case "GHA":
  946. return "加纳共和国";
  947. case "GLOB":
  948. return "全球星";
  949. case "GREC":
  950. return "希腊";
  951. case "GRSA":
  952. return "希腊/沙特阿拉伯";
  953. case "GUAT":
  954. return "危地马拉";
  955. case "HUN":
  956. return "匈牙利";
  957. case "IM":
  958. return "国际移动卫星组织(INMARSAT)";
  959. case "IND":
  960. return "印度";
  961. case "INDO":
  962. return "印尼";
  963. case "IRAN":
  964. return "伊朗";
  965. case "IRAQ":
  966. return "伊拉克";
  967. case "IRID":
  968. return "IRID";
  969. case "ISRA":
  970. return "以色列";
  971. case "ISRO":
  972. return "印度空间研究组织";
  973. case "ISS":
  974. return "国际空间站";
  975. case "IT":
  976. return "意大利";
  977. case "ITSO":
  978. return "国际电信卫星组织";
  979. case "JPN":
  980. return "日本";
  981. case "KAZ":
  982. return "哈萨克斯坦";
  983. case "KEN":
  984. return "肯尼亚";
  985. case "LAOS":
  986. return "老挝";
  987. case "LKA":
  988. return "斯里兰卡";
  989. case "LTU":
  990. return "立陶宛";
  991. case "LUXE":
  992. return "卢森堡";
  993. case "MA":
  994. return "摩洛哥";
  995. case "MALA":
  996. return "马来西亚";
  997. case "MEX":
  998. return "墨西哥";
  999. case "MMR":
  1000. return "缅甸";
  1001. case "MNG":
  1002. return "蒙古";
  1003. case "MUS":
  1004. return "毛里求斯";
  1005. case "NATO":
  1006. return "北大西洋公约组织";
  1007. case "NETH":
  1008. return "荷兰";
  1009. case "NICO":
  1010. return "新图标";
  1011. case "NIG":
  1012. return "尼日利亚";
  1013. case "NKOR":
  1014. return "朝鲜";
  1015. case "NOR":
  1016. return "挪威";
  1017. case "NPL":
  1018. return "尼泊尔";
  1019. case "NZ":
  1020. return "新西兰";
  1021. case "O3B":
  1022. return "O3b Networks公司";
  1023. case "ORB":
  1024. return "ORBCOMM卫星公司";
  1025. case "PAKI":
  1026. return "巴基斯坦";
  1027. case "PERU":
  1028. return "秘鲁";
  1029. case "POL":
  1030. return "波兰";
  1031. case "POR":
  1032. return "葡萄牙";
  1033. case "PRC":
  1034. return "中国";
  1035. case "PRY":
  1036. return "巴拉圭";
  1037. case "PRES":
  1038. return "中国/欧洲航天局";
  1039. case "QAT":
  1040. return "卡塔尔的状态";
  1041. case "RASC":
  1042. return "非洲区域卫星通信组织";
  1043. case "ROC":
  1044. return "台湾";
  1045. case "ROM":
  1046. return "罗马尼亚";
  1047. case "RP":
  1048. return "菲律宾";
  1049. case "RWA":
  1050. return "卢旺达";
  1051. case "SAFR":
  1052. return "南非";
  1053. case "SAUD":
  1054. return "沙特阿拉伯";
  1055. case "SDN":
  1056. return "苏丹";
  1057. case "SEAL":
  1058. return "Sea Launch公司";
  1059. case "SES":
  1060. return "SES电信公司";
  1061. case "SGJP":
  1062. return "新加坡/日本";
  1063. case "SING":
  1064. return "新加坡";
  1065. case "SKOR":
  1066. return "韩国";
  1067. case "SPN":
  1068. return "西班牙";
  1069. case "STCT":
  1070. return "新加坡/台湾";
  1071. case "SVN":
  1072. return "斯洛文尼亚";
  1073. case "SWED":
  1074. return "瑞典";
  1075. case "SWTZ":
  1076. return "瑞士";
  1077. case "TBD":
  1078. return "待定";
  1079. case "THAI":
  1080. return "泰国";
  1081. case "TMMC":
  1082. return "土库曼斯坦/摩纳哥";
  1083. case "TUN":
  1084. return "突尼斯共和国";
  1085. case "TURK":
  1086. return "土耳其";
  1087. case "UAE":
  1088. return "阿拉伯联合酋长国";
  1089. case "UK":
  1090. return "英国";
  1091. case "UKR":
  1092. return "乌克兰";
  1093. case "URY":
  1094. return "乌拉圭";
  1095. case "US":
  1096. return "美国";
  1097. case "USBZ":
  1098. return "美国/巴西";
  1099. case "VENZ":
  1100. return "委内瑞拉";
  1101. case "VTNM":
  1102. return "越南";
  1103. case "UNK":
  1104. return "未知";
  1105. }
  1106. return code;
  1107. }
  1108. </script>
  1109. </body>
  1110. </html>