map.html 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="/static/js/echarts.min.js"></script>
  7. <script src="/static/js/jquery.min.js"></script>
  8. <script src="/static/js/moveitem.js"></script>
  9. <script src="/static/js/bootstrap.min.js"></script>
  10. <link rel="stylesheet" href="/static/css/bootstrap.min.css">
  11. <link rel="stylesheet" href="/static/css/moveitem.css">
  12. <style>
  13. .one {
  14. width: 400px;
  15. height: 400px;
  16. border: 1px solid #000;
  17. }
  18. .two {
  19. border: 1px solid #000;
  20. position: absolute;
  21. }
  22. </style>
  23. </head>
  24. <body>
  25. <!-- <nav class="navbar navbar-expand-lg bg-header">-->
  26. <!-- <div class="container-fluid justify-content-start">-->
  27. <!-- <a href="/categories" class="btn">-->
  28. <!-- <i class="material-icons">arrow_back</i>-->
  29. <!-- </a>-->
  30. <!-- <div class="navbar-heading m-l-10">-->
  31. <!-- <h4>天府机坪图</h4>-->
  32. <!-- </div>-->
  33. <!-- </div>-->
  34. <!--&lt;!&ndash; <button onclick="getDigital()" class="navbar-right">详细</button>&ndash;&gt;-->
  35. <!-- </nav>-->
  36. <div class="two">
  37. <div id="main" style="width:100vw;height:100vh;"></div>
  38. </div>
  39. <script>
  40. </script>
  41. <div id="moveitem" class="myMoveItem" style="top:50px;left:10px;width: 384px; height: 612px; z-index: 23;display: none;">
  42. <div class="moveItem_header">
  43. <p id="moveitemtittle" class="moveItem_title" ></p>
  44. <div class="moveItem_oper">
  45. <!-- <button type="button" onclick="sendMsg()">发送通知</button>-->
  46. <button type="button" class="moveItem_fullScreen"><></button>
  47. <button type="button" class="moveItem_normalScreen">><</button>
  48. <button type="button" class="moveItem_close">X</button>
  49. </div>
  50. </div>
  51. <div id="moveItem_body" class="moveItem_body" style="background-color: #FFF;height: calc(100% - 5px);">
  52. <p>测试1</p>
  53. </div>
  54. <span class="moveItem_resize"></span>
  55. </div>
  56. <!-- <div id="dragtest" class="myMoveItem" style="top:50px;left:10px;width: 384px; height: 612px; z-index: 23;display: block;">-->
  57. <!-- <div class="moveItem_header">-->
  58. <!-- <p id="dragtittle" class="moveItem_title" ></p>-->
  59. <!-- <div class="moveItem_oper">-->
  60. <!-- <button type="button" onclick="sendMsg()">发送通知</button>-->
  61. <!-- <button type="button" class="moveItem_fullScreen"><></button>-->
  62. <!-- <button type="button" class="moveItem_normalScreen">><</button>-->
  63. <!-- <button type="button" class="moveItem_close">X</button>-->
  64. <!-- </div>-->
  65. <!-- </div>-->
  66. <!-- <div id="drag_body" class="moveItem_body" style="background-color: #FFF;height: calc(100% - 5px);">-->
  67. <!-- -->
  68. <!-- <ul id="sortable">-->
  69. <!-- <li class="ui-state-default">Item 1</li>-->
  70. <!-- <li class="ui-state-default">Item 2</li>-->
  71. <!-- <li class="ui-state-default">Item 3</li>-->
  72. <!-- <li class="ui-state-default">Item 4</li>-->
  73. <!-- <li class="ui-state-default">Item 5</li>-->
  74. <!-- </ul>-->
  75. <!-- </div>-->
  76. <!-- <span class="moveItem_resize"></span>-->
  77. <!-- </div>-->
  78. <!-- <div id="moveitemDigital" class="myMoveItem" style="top: 800px; left: 10px; width: 1500px; height: 480px; z-index: 33;display: none;">-->
  79. <!-- <div class="moveItem_header">-->
  80. <!-- <p id="moveitemDigitaltittle" class="moveItem_title" ></p>-->
  81. <!-- <div class="moveItem_oper">-->
  82. <!-- <button type="button" class="moveItem_fullScreen"><></button>-->
  83. <!-- <button type="button" class="moveItem_normalScreen">><</button>-->
  84. <!-- <button type="button" class="moveItem_close">X</button>-->
  85. <!-- </div>-->
  86. <!-- </div>-->
  87. <!-- <div id="moveItemDigital_body" class="moveItem_body" style="background-color: #FFF;height: calc(100% - 5px);">-->
  88. <!-- <p>测试1</p>-->
  89. <!-- </div>-->
  90. <!-- <span class="moveItem_resize"></span>-->
  91. <!-- </div>-->
  92. <script type="text/javascript">
  93. // import * as echarts from 'echarts';
  94. var chartDom = document.getElementById('main')
  95. var myChart = echarts.init(chartDom)
  96. var option
  97. $(document).ready(function() {
  98. startRequest();
  99. setInterval("RefreshRequest()",60000);
  100. });
  101. function startRequest(){
  102. $.get('/static/mapDispaly/{{selectedtime}}', function (data, status) {
  103. // console.log('data:', data, 'status:', status)
  104. $.get('/static/svg/maptest.svg', function (svg){
  105. echarts.registerMap('map-tf', { svg:svg});
  106. option = {
  107. tooltip:{
  108. backgroundColor: 'white',
  109. padding: 10,
  110. extraCssText:
  111. 'box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);border-radius: 24px;opacity: 0.8;border: 2px solid white;width: 274px;height: 270px;',
  112. textStyle: {
  113. color: 'balck',
  114. },
  115. formatter: function (params) {
  116. if(data[params.name].机号 !=""){
  117. return `
  118. <ul class="map-tooltip">
  119. <li class="title">
  120. <p class="circle"></p>
  121. <p class="province">机位:${params.name}
  122. ${
  123. (data[params.name] && data[params.name].航班类型)||""
  124. }
  125. </p>
  126. </li>
  127. <li>
  128. <p class="name">机号:${
  129. (data[params.name] && data[params.name].机号)||"无"
  130. }
  131. </p>
  132. </li>
  133. <li>
  134. <p class="name"> 机型:${
  135. (data[params.name] && data[params.name].机型)||"无"
  136. }
  137. ${
  138. (data[params.name] && data[params.name].发动机)||"无"
  139. }
  140. </p>
  141. </li>
  142. <li>
  143. <p class="name"> 航班号:${
  144. (data[params.name] && data[params.name].航班号)||""
  145. }
  146. <br>
  147. ${
  148. (data[params.name] && data[params.name].进港机场)||""
  149. }-天府-
  150. ${
  151. (data[params.name] && data[params.name].出港机场)||""
  152. }
  153. </p>
  154. </li>
  155. <li>
  156. <p class="name">放行人员:${
  157. (data[params.name] && data[params.name].放行)||"无"
  158. }</p>
  159. </li>
  160. <li>
  161. <p class="name">维修人员:${
  162. (data[params.name] && data[params.name].维修人员)||"无"
  163. }</p>
  164. </li>
  165. <li>
  166. <p class="name">二送人员:${
  167. (data[params.name] && data[params.name].二送人员)||"无"
  168. }</p>
  169. </li>
  170. </ul>
  171. `;
  172. }
  173. }
  174. },
  175. geo:{
  176. map:'map-tf',
  177. roam:true,
  178. selectedMode:'multiple',
  179. itemStyle:{
  180. color: 'rgba(0,0,0,0)',
  181. borderColor:'rgba(0,0,0,0)'
  182. },
  183. emphasis: {
  184. itemStyle: {
  185. color: 'rgba(0,0,0,0)',
  186. borderColor: 'rgba(0,0,0,0)'
  187. },
  188. label: {
  189. show: false
  190. }
  191. },
  192. select:{
  193. itemStyle: {
  194. color: 'rgba(0,0,0,0)',
  195. borderColor:'rgba(0,0,0,0)'
  196. },
  197. label: {
  198. show: false
  199. }
  200. },
  201. regions:makeregions(data),
  202. },
  203. series:[
  204. {
  205. type: 'map',
  206. maptype:'map-tf',
  207. geoIndex: 0,
  208. }
  209. ]
  210. };
  211. function makeregions(data) {
  212. var region = [];
  213. for(var key in data){
  214. if(data[key].南航=='1'){
  215. region.push(
  216. {
  217. name:key,
  218. silent: true,
  219. tooltip: {
  220. show: true
  221. },
  222. itemStyle:{
  223. color:data[key].color,
  224. borderColor: "red",
  225. borderWidth: 1,
  226. },
  227. emphasis: {
  228. tooltip: {
  229. show: true
  230. },
  231. itemStyle: {
  232. color: data[key].color,
  233. borderColor: "red",
  234. borderWidth: 1
  235. },
  236. label: {
  237. show: false
  238. }
  239. },
  240. select: {
  241. itemStyle: {
  242. color: data[key].color,
  243. borderColor: "red",
  244. borderWidth: 1
  245. },
  246. }
  247. }
  248. )
  249. }
  250. else{
  251. region.push(
  252. {
  253. name:key,
  254. silent: true,
  255. itemStyle:{
  256. color:data[key].color
  257. },
  258. emphasis: {
  259. itemStyle: {
  260. color: data[key].color,
  261. borderColor: data[key].color
  262. },
  263. label: {
  264. show: false
  265. }
  266. },
  267. select: {
  268. itemStyle: {
  269. color: data[key].color,
  270. borderColor: data[key].color
  271. },
  272. }
  273. }
  274. )
  275. }
  276. }
  277. // console.log("region:", region);
  278. return region;
  279. }
  280. function getFontSize(){
  281. try{
  282. var _option = myChart.getOption();
  283. var _zoom = _option.geo[0].zoom;
  284. var size = 15*(1.0 / ( 1 + Math.exp(-_zoom+2)))
  285. }
  286. catch (err){
  287. size = 10
  288. }
  289. return size
  290. }
  291. function sendSelect(params){
  292. $.post('/map/getSelectInf/{{selectedtime}}',{'bay':params}, function (data, status){
  293. // var text = '';
  294. // for (var key in data){
  295. //
  296. // text = text + "<p>"+key+":"+data[key]+"</p>"
  297. //
  298. // }
  299. // console.log("Text:"+text)
  300. $("#moveitemtittle").text(params)
  301. $("#moveItem_body").html(data)
  302. $("#moveitem").show()
  303. })
  304. }
  305. myChart.setOption(option)
  306. myChart.on('click', function (params){
  307. console.log("click"+params.name)
  308. sendSelect(params.name)
  309. })
  310. myChart.on('geoselectchanged', function (params) {
  311. console.log("selected")
  312. // const selectedName = params.name;
  313. // console.log('selected', selectedName)
  314. //sendSelect(selectedName)
  315. })
  316. myChart.on('mousemove', function (params){
  317. console.log("mouse over:"+params.name)
  318. })
  319. myChart.on('mouseup', function (params){
  320. console.log("mouse up:"+params.name)
  321. })
  322. myChart.on('georoam', function (params){
  323. if(params.dy || params.dx) return
  324. var _option = myChart.getOption();
  325. var _zoom = _option.geo[0].zoom;
  326. // console.log("缩放:",_zoom);
  327. _option.geo[0].label.textStyle.fontSize=15*(1.0 / ( 1 + Math.exp(-_zoom+2)))
  328. myChart.setOption(_option)
  329. })
  330. })
  331. })}
  332. function RefreshRequest() {
  333. $.get('/static/mapDispaly/{{selectedtime}}', function (data, status){
  334. console.log('data:', data, 'status:', status)
  335. var _option = myChart.getOption();
  336. // var _tooltip = _option.tooltip.formatter
  337. _option = {
  338. tooltip: {
  339. backgroundColor: 'white',
  340. padding: 10,
  341. extraCssText:
  342. 'box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);border-radius: 24px;opacity: 0.8;border: 2px solid white;width: 270px;height: 270px;',
  343. textStyle: {
  344. color: 'black',
  345. },
  346. formatter: function (params) {
  347. console.log('机位:', params)
  348. if(data[params.name].机号 !="") {
  349. return `
  350. <ul class="map-tooltip">
  351. <li class="title">
  352. <p class="circle"></p>
  353. <p class="province">机位:${params.name}
  354. ${
  355. (data[params.name] && data[params.name].航班类型)||""
  356. }
  357. </p>
  358. </li>
  359. <li>
  360. <p class="name">机号:${
  361. (data[params.name] && data[params.name].机号)||"无"
  362. }
  363. </p>
  364. </li>
  365. <li>
  366. <p class="name"> 机型:${
  367. (data[params.name] && data[params.name].机型)||"无"
  368. }
  369. ${
  370. (data[params.name] && data[params.name].发动机)||"无"
  371. }
  372. </p>
  373. </li>
  374. <li>
  375. <p class="name"> 航班号:${
  376. (data[params.name] && data[params.name].航班号)||""
  377. }
  378. <br>
  379. ${
  380. (data[params.name] && data[params.name].进港机场)||""
  381. }-天府-
  382. ${
  383. (data[params.name] && data[params.name].出港机场)||""
  384. }
  385. </p>
  386. </li>
  387. <li>
  388. <p class="name">放行人员:${
  389. (data[params.name] && data[params.name].放行)||"无"
  390. }</p>
  391. </li>
  392. <li>
  393. <p class="name">维修人员:${
  394. (data[params.name] && data[params.name].维修人员)||"无"
  395. }</p>
  396. </li>
  397. <li>
  398. <p class="name">二送人员:${
  399. (data[params.name] && data[params.name].二送人员)||"无"
  400. }</p>
  401. </li>
  402. </ul>
  403. `;
  404. }
  405. }
  406. },
  407. geo:{
  408. map:'map-tf',
  409. roam:true,
  410. selectedMode:'multiple',
  411. itemStyle:{
  412. color: 'rgba(0,0,0,0)',
  413. borderColor:'rgba(0,0,0,0.0)'
  414. },
  415. emphasis: {
  416. itemStyle: {
  417. color: 'rgba(0,0,0,0)',
  418. borderColor: 'rgba(0,0,0,0)'
  419. },
  420. label: {
  421. show: false
  422. }
  423. },
  424. select:{
  425. itemStyle: {
  426. color: 'rgba(0,0,0,0)',
  427. borderColor:'rgba(0,0,0,0)'
  428. },
  429. label: {
  430. show: false
  431. }
  432. },
  433. regions:makeregions(data),
  434. },
  435. }
  436. myChart.setOption(_option)
  437. })
  438. // $.get('/getDigital', function (data, status){
  439. // $("#moveItemDigital_body").html(data)
  440. // })
  441. function getFontSize(){
  442. try{
  443. var _option = myChart.getOption();
  444. var _zoom = _option.geo[0].zoom;
  445. var size = 15*(1.0 / ( 1 + Math.exp(-_zoom+2)))
  446. }
  447. catch (err){
  448. size = 10
  449. }
  450. return size
  451. }
  452. function makeregions(data) {
  453. var region = [];
  454. for(var key in data){
  455. if(( data[key].南航=="1")){
  456. region.push(
  457. {
  458. name:key,
  459. silent: true,
  460. itemStyle:{
  461. color:data[key].color,
  462. borderColor: "red",
  463. borderWidth: 1,
  464. tooltip: {
  465. show: true
  466. }
  467. },
  468. emphasis: {
  469. itemStyle: {
  470. color: data[key].color,
  471. borderColor: "red",
  472. borderWidth: 1
  473. },
  474. label: {
  475. show: false
  476. }
  477. },
  478. select: {
  479. itemStyle: {
  480. color: data[key].color,
  481. borderColor: "red",
  482. borderWidth: 1
  483. },
  484. }
  485. }
  486. )
  487. }
  488. else{
  489. region.push(
  490. {
  491. name:key,
  492. silent: true,
  493. itemStyle:{
  494. color:data[key].color
  495. },
  496. emphasis: {
  497. itemStyle: {
  498. color:data[key].color,
  499. borderColor: data[key].color
  500. },
  501. label: {
  502. show: false
  503. }
  504. },
  505. select: {
  506. itemStyle: {
  507. color: data[key].color,
  508. borderColor: data[key].color
  509. },
  510. }
  511. }
  512. )
  513. }
  514. }
  515. // console.log("region:", region);
  516. return region;
  517. }
  518. }
  519. function getDigital() {
  520. $.get('/getDigital', function (data, status){
  521. $("#moveitemDigitaltittle").text('详细')
  522. $("#moveItemDigital_body").html(data)
  523. $("#moveitemDigital").show()
  524. })
  525. }
  526. function sendMsg(){
  527. var bay = $("#moveitemtittle").text()
  528. $.post("/sendMsgBay",{'bay':bay}, function (data, status){
  529. console.log("sendMsg:"+data+status)
  530. })
  531. }
  532. </script>
  533. </body>
  534. </html>