ais_20160408.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609
  1. /**
  2. * 声明变量map、layer、url
  3. */
  4. var map;
  5. var baseLayerOne, baseLayerTwo;
  6. var alarmAnimatorVector, trackAnimatorVector, locationAnimatorVector;
  7. var aisMarkers, mwMarkers, selectMarkers, selectMarker = null;
  8. var gqVectorLayer, mtVectorLayer, bwVectorLayer, shipTrackLayer, mdVectorLayer, selectVectorLayer;
  9. var gqFeatures = [], mtFeatures = [], bwFeatures = [];
  10. var gqSelectFeature, bwSelectFeature, mdSelectFeature;
  11. var CommDataVal = {};
  12. var checkParam;
  13. /**
  14. * 港口信息中心点 信息缓存
  15. */
  16. var harbour_code_serial = [ 321001, 321002, 321003, 321004, 321005, 321006,321007, 321009, 320001, 320002 ];
  17. var harbour_code_lon_position = [ 121.23853, 120.23, 121.23, 122.23, 123.23,124.23, 125.23, 121.23853, 127.23, 128.23 ];
  18. var harbour_code_lat_position = [ 31.57921, 30.57, 31.57, 32.57, 33.57, 34.57,35.57, 31.57921, 37.57, 38.57 ];
  19. dojo.require("esri.map");
  20. /**
  21. * 创建地图控件-地图初始化
  22. */
  23. function initMap() {
  24. /**
  25. * 初始化地图
  26. * @type {SuperMap.Map}
  27. */
  28. map = new esri.Map("map", { center: [120,32],zoom: 12 });
  29. // map = new SuperMap.Map("map", {
  30. // controls : [ new SuperMap.Control.Navigation(),
  31. // new SuperMap.Control.MousePosition() ]
  32. var layer1 = new esri.layers.ArcGISTiledMapServiceLayer("http://www.arcgisonline.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer");
  33. //var layer2 = new esri.layers.ArcGISTiledMapServiceLayer("");
  34. map.addLayers([layer1]);
  35. // });
  36. // /**
  37. // * 初始化图层
  38. // */
  39. // baseLayerOne = new SuperMap.Layer.TiledDynamicRESTLayer("底图1",
  40. // base_one_url, {
  41. // transparent : true,
  42. // cacheEnabled : true
  43. // }, {
  44. // maxResolution : "auto"
  45. // });
  46. // //监听图层信息加载完成事件
  47. // baseLayerOne.events.on({
  48. // "layerInitialized" : addBaseLayerTwo
  49. // });
  50. //
  51. // map.events.on({
  52. // "moveend" : mapMoveChange
  53. // });
  54. }
  55. /**
  56. * 初始化第二个底图
  57. */
  58. function addBaseLayerTwo() {
  59. //初始化图层
  60. baseLayerTwo = new SuperMap.Layer.TiledDynamicRESTLayer("底图2",
  61. base_two_url, {
  62. transparent : true,
  63. cacheEnabled : true
  64. });
  65. baseLayerTwo.events.on({
  66. "layerInitialized" : addLayers
  67. });
  68. }
  69. /**
  70. * 添加地图并且设置地图显示范围
  71. */
  72. function addLayers() {
  73. baseLayerOne.isBaseLayer = true;
  74. baseLayerTwo.isBaseLayer = true;
  75. /**
  76. * 图层添加到Map
  77. */
  78. map.addLayers([ baseLayerOne, baseLayerTwo ]);
  79. //设置初始化地图显示范围
  80. if( $('#control-harbour-info').size() == 0){ // 如果不是省厅
  81. for(var i =0;i<harbour_code_serial.length;i++){
  82. if(harbour_code_serial[i] == self_harbour_id ){
  83. map.setCenter(new SuperMap.LonLat(harbour_code_lon_position[i], harbour_code_lat_position[i]), 4);
  84. break ;
  85. }
  86. }
  87. }else{ // 如果是省厅
  88. //显示地图范围
  89. map.setCenter(new SuperMap.LonLat(119.7401215, 32.985849), 0);
  90. }
  91. initBusinessLayer();
  92. }
  93. function selectFeatureFun(feature) {
  94. selectVectorLayer.removeAllFeatures();
  95. selectVectorLayer.addFeatures([ feature ]);
  96. }
  97. function selectMarkerFun(latlon, icon_path, size) {
  98. var icon = new SuperMap.Icon(icon_path, size, getMarkerOffset(size));
  99. var marker = new SuperMap.Marker(latlon, icon);
  100. selectMarkers.clearMarkers();
  101. selectMarkers.addMarker(marker);
  102. }
  103. function clearSelectFun() {
  104. selectVectorLayer.removeAllFeatures();
  105. selectMarkers.clearMarkers();
  106. }
  107. function getMarkerOffset(size) {
  108. return new SuperMap.Pixel(-(size.w / 2), -size.h);
  109. }
  110. /**
  111. * 泊位要素被选中时调用此函数
  112. * @param feature
  113. */
  114. function onBWFeatureSelect(feature) {
  115. selectFeatureFun(feature);
  116. console.log("泊位名称:" + feature.attributes.MC);
  117. }
  118. /**
  119. * 港区要素被选中时调用此函数
  120. * @param feature
  121. */
  122. function onGQFeatureSelect(feature) {
  123. selectFeatureFun(feature);
  124. console.log("港区代码:" + feature.attributes.GQDM);
  125. }
  126. /**
  127. * 清除要素时调用此函数
  128. * @param feature
  129. */
  130. function onFeatureUnselect(feature) {
  131. }
  132. /**
  133. * 当前地图extend发生变化时触发该函数
  134. */
  135. function mapMoveChange() {
  136. // alert(1);
  137. // var zoom = map.getZoom();
  138. // if (zoom >= 1) {
  139. // baseLayerOne.setVisibility(false);
  140. // baseLayerTwo.setVisibility(true);
  141. // map.setBaseLayer(baseLayerTwo);
  142. // } else {
  143. // baseLayerOne.setVisibility(true);
  144. // baseLayerTwo.setVisibility(false);
  145. // map.setBaseLayer(baseLayerOne);
  146. // }
  147. // addAISShip();
  148. }
  149. function addAISShip() {
  150. var data = {
  151. "leftLon" : map.getExtent().left,
  152. "bottomLat" : map.getExtent().bottom,
  153. "rightLon" : map.getExtent().right,
  154. "topLat" : map.getExtent().top,
  155. "alarm" : true
  156. };
  157. if (map.getZoom() >= 6) { //地图zoom大于等于6级后渲染船舶
  158. data.alarm = false;
  159. }else{
  160. if(aisMarkers){
  161. aisMarkers.clearMarkers();
  162. }
  163. }
  164. doajax("POST", localUrl + "/ship/realtime.json", data, function(data) {
  165. if (data.status == "10001") {
  166. var ais_datas = data.data;
  167. var aisLen = ais_datas.length;
  168. alarmAnimatorVector.removeAllFeatures();
  169. aisMarkers.clearMarkers();
  170. for (var i = 0; i < aisLen; i++) {
  171. if (map.getZoom() >= 6) { //地图zoom大于等于6级后渲染船舶
  172. addShipMarker(ais_datas[i]);
  173. }
  174. if (ais_datas[i].alarm_status == 1) { //需要预警
  175. showAlarmMarker(ais_datas[i]);
  176. }
  177. }
  178. }
  179. }, function() {}, true);
  180. }
  181. function addAISShips() {
  182. if (map.getZoom() >= 6) { //地图zoom大于等于6级后渲染船舶
  183. var data = {
  184. "leftLon" : map.getExtent().left,
  185. "bottomLat" : map.getExtent().bottom,
  186. "rightLon" : map.getExtent().right,
  187. "topLat" : map.getExtent().top,
  188. "alarm" : false
  189. };
  190. doajax("POST", localUrl + "/ship/realtime.json", data, function(data) {
  191. if (data.status == "10001") {
  192. var ais_datas = data.data;
  193. var aisLen = ais_datas.length;
  194. alarmAnimatorVector.removeAllFeatures();
  195. alarmAnimatorVector.animator.stop();
  196. aisMarkers.clearMarkers();
  197. for (var i = 0; i < aisLen; i++) {
  198. addShipMarker(ais_datas[i],aisMarkers);
  199. if (ais_datas[i].alarm_status == 1) { //需要预警
  200. showAlarmMarker(ais_datas[i]);
  201. }
  202. }
  203. alarmAnimatorVector.animator.start();
  204. }
  205. }, function() {
  206. }, true);
  207. } else {
  208. aisMarkers.clearMarkers();
  209. }
  210. }
  211. /**
  212. * 要素图层查询失败调用该Function
  213. * @param e
  214. */
  215. function processFailed(e) {
  216. alert(e.error.errorMsg);
  217. }
  218. /**
  219. * 添加资源
  220. */
  221. function initResource() {
  222. var url = '';
  223. if( $('#control-harbour-info').size() == 0){ // 如果不是省厅
  224. url = url_get_harbour_map_info +"1/achorage/position" ;
  225. }
  226. else{ // 如果是省厅
  227. if($('#control-harbour-info').val() != '')
  228. url = url_get_harbour_map_info + $('#control-harbour-info').val() +"/achorage/position";
  229. else
  230. return ;
  231. }
  232. console.log(url);
  233. doRequest("GET", url, "", function(data) {
  234. if (data.status == '10001') {
  235. if (data.data == null)
  236. return;
  237. CommDataVal = data.data;
  238. addResouseLayer();
  239. }
  240. }, function() {
  241. }, true);
  242. }
  243. /**
  244. * 添加图层
  245. */
  246. function addResouseLayer() {
  247. addGQResourceLayer();
  248. addMTResouseLayer();
  249. addBWResouseLayer();
  250. addMDResouseLayer();
  251. addMWResouseLayer();
  252. aisInterval = setInterval("addAISShip()", 10000);
  253. addAISShip();
  254. //在锚地信息框中点击锚位数量时触发
  255. $("#anchorposition-num").click(function(){
  256. var anchorage_id = $("#anchorage-id").text();
  257. var search_ship_url = localUrl + "/achorPosition/achorageId?achorage_id=" + anchorage_id;
  258. openCenterWin('锚位信息', 2, 900, 400, search_ship_url);
  259. });
  260. //在锚锚位信息框中点击锚位状态时触发
  261. $("#anchor-status").click(function(){
  262. var status_id = $("#status-id").text();
  263. if(status_id == '1'){ //当前锚位为空闲
  264. layer.msg('当前锚位为空闲锚位,无船舶停泊。');
  265. return;
  266. }
  267. //如果已预留或已占用则查询相关船舶信息
  268. });
  269. }
  270. /**
  271. * 初始化业务图层
  272. */
  273. function initBusinessLayer() {
  274. alarmAnimatorVector = new SuperMap.Layer.AnimatorVector("预警图层", {
  275. rendererType : "TadpolePoint"
  276. }, {
  277. speed : 0.02,//设置速度为每帧播放0.02小时的数据
  278. startTime : 0,//开始时间为0晨
  279. endTime : 1000,//结束时间设置为最后运行结束的火车结束时间
  280. frameRate : 5
  281. //每秒渲染12帧
  282. });
  283. alarmAnimatorVector.renderer.tail = false;
  284. trackAnimatorVector = new SuperMap.Layer.AnimatorVector("轨迹动态渲染图层", {
  285. rendererType : "TadpolePoint"
  286. }, {
  287. speed : 0.2,//设置速度为每帧播放0.02小时的数据
  288. startTime : 0,//开始时间为0晨
  289. endTime : 1000,//结束时间设置为最后运行结束的火车结束时间
  290. frameRate : 6
  291. //每秒渲染12帧
  292. });
  293. trackAnimatorVector.renderer.tail = true;
  294. locationAnimatorVector = new SuperMap.Layer.AnimatorVector("船舶定位渲染图层", {
  295. rendererType : "TadpolePoint"
  296. }, {
  297. speed : 0.02,//设置速度为每帧播放0.02小时的数据
  298. startTime : 0,//开始时间为0晨
  299. endTime : 1000,//结束时间设置为最后运行结束的火车结束时间
  300. frameRate : 12
  301. //每秒渲染12帧
  302. });
  303. locationAnimatorVector.renderer.tail = false;
  304. aisMarkers = new SuperMap.Layer.Markers("船舶图层");
  305. mwMarkers = new SuperMap.Layer.Markers("锚位图层", {
  306. visibility : false
  307. });
  308. selectMarkers = new SuperMap.Layer.Markers("选中锚位图层");
  309. bwVectorLayer = new SuperMap.Layer.Vector("泊位图层", {
  310. renderers : [ "Canvas2" ]
  311. });
  312. mtVectorLayer = new SuperMap.Layer.Vector("码头图层", {
  313. renderers : [ "Canvas2" ]
  314. });
  315. gqVectorLayer = new SuperMap.Layer.Vector("港区图层", {
  316. renderers : [ "Canvas2" ]
  317. });
  318. shipTrackLayer = new SuperMap.Layer.Vector("船舶轨迹图层", {
  319. renderers : [ "Canvas2" ]
  320. });
  321. mdVectorLayer = new SuperMap.Layer.Vector("锚地图层", {
  322. renderers : [ "Canvas2" ]
  323. });
  324. selectVectorLayer = new SuperMap.Layer.Vector("选中图层", {
  325. renderers : [ "Canvas2" ]
  326. });
  327. map.addLayers([ gqVectorLayer, mtVectorLayer, bwVectorLayer, mdVectorLayer,
  328. selectVectorLayer, shipTrackLayer, mwMarkers, aisMarkers,
  329. selectMarkers, trackAnimatorVector, alarmAnimatorVector,
  330. locationAnimatorVector ]);
  331. alarmAnimatorVector.animator.start();
  332. locationAnimatorVector.animator.start();
  333. trackAnimatorVector.animator.start();
  334. checkParam = {
  335. "shipCheck" : aisMarkers,
  336. "mwCheck" : mwMarkers,
  337. "mdCheck" : mdVectorLayer,
  338. "gqCheck" : gqVectorLayer,
  339. "mtCheck" : mtVectorLayer,
  340. "bwCheck" : bwVectorLayer,
  341. "alarmCheck" : alarmAnimatorVector
  342. };
  343. var checkbox = $("#layer-content table :checkbox");
  344. var len = checkbox.length;
  345. for (var i = 0; i < len; i++) {
  346. $(checkbox[i]).change(function() {
  347. var key = $(this).attr('id');
  348. checkParam[key].setVisibility($(this).is(':checked'));
  349. });
  350. checkParam[$(checkbox[i]).attr('id')].setVisibility($(checkbox[i]).is(
  351. ':checked'));
  352. }
  353. initLayerListener();
  354. }
  355. /**
  356. * 初始化图层Select事件
  357. */
  358. function initLayerListener() {
  359. var gqCallbacks = {
  360. over : function MouseOver(feature) {
  361. feature.style = {
  362. strokeColor : "#99ccff",
  363. strokeWidth : 1,
  364. fillColor : "#0000FF",
  365. label : feature.attributes.GQMC,
  366. fontFamily : "华文新魏",
  367. fontSize : "18px",
  368. fontWeight : "bold",
  369. fillOpacity : "0.2"
  370. };
  371. gqVectorLayer.redraw();
  372. },
  373. out : function MouseOut(feature) {
  374. feature.style = {
  375. strokeColor : "#99ccff",
  376. strokeWidth : 1,
  377. fillColor : "#0000FF",
  378. fillOpacity : "0.1"
  379. };
  380. gqVectorLayer.redraw();
  381. },
  382. click : function MouseClick(feature) {
  383. var geometry = feature.geometry.clone();
  384. var selectFeature = new SuperMap.Feature.Vector(geometry);
  385. selectFeature.attributes = feature.attributes;
  386. selectFeature.style = {
  387. strokeColor : "#99ccff",
  388. strokeWidth : 1,
  389. fillColor : "#0000FF",
  390. fillOpacity : "0.2"
  391. };
  392. selectFeatureFun(selectFeature);
  393. }
  394. }
  395. gqSelectFeature = new SuperMap.Control.SelectFeature(gqVectorLayer, {
  396. callbacks : gqCallbacks,
  397. repeat : true,
  398. hover : false,
  399. selectStyle : {
  400. strokeColor : "#050B41",
  401. strokeWidth : 2,
  402. fill : false
  403. }
  404. });
  405. map.addControl(gqSelectFeature);
  406. bwSelectFeature = new SuperMap.Control.SelectFeature(bwVectorLayer, {
  407. onSelect : onBWFeatureSelect,
  408. onUnselect : onFeatureUnselect,
  409. repeat : true,
  410. selectStyle : {
  411. strokeColor : "#000000",
  412. strokeWidth : 1,
  413. fill : false
  414. }
  415. });
  416. map.addControl(bwSelectFeature);
  417. var mdCallbacks = {
  418. over : function MouseOver(feature) {
  419. feature.style = {
  420. strokeColor : "#CAFF70",
  421. fillColor : "#f7c373",
  422. strokeWidth : 2,
  423. fillOpacity : 0.8,
  424. label : feature.attributes.name,
  425. fontWeight : "bold",
  426. fontFamily : "华文新魏",
  427. fontColor : "#2c3e50"
  428. };
  429. mdVectorLayer.redraw();
  430. },
  431. out : function MouseOut(feature) {
  432. feature.style = {
  433. fillColor : "#B0E2FF",
  434. strokeColor : "#C1FFC1",
  435. label : feature.attributes.name,
  436. fillOpacity : 0.8,
  437. fontFamily : "华文新魏",
  438. fontColor : "#2c3e50"
  439. };
  440. mdVectorLayer.redraw();
  441. },
  442. click : function MouseClick(feature) {
  443. var geometry = feature.geometry.clone();
  444. var selectFeature = new SuperMap.Feature.Vector(geometry);
  445. selectFeature.attributes = feature.attributes;
  446. selectFeature.style = {
  447. strokeColor : "#CAFF70",
  448. fillColor : "#f7c373",
  449. strokeWidth : 2,
  450. fillOpacity : 0.8,
  451. label : feature.attributes.name,
  452. fontWeight : "bold",
  453. fontFamily : "华文新魏",
  454. fontColor : "#2c3e50"
  455. };
  456. selectFeatureFun(selectFeature);
  457. doRequest("GET",url_get_ais_anchorage_info + feature.attributes.id,
  458. "",function(data) {
  459. if (data.status == 10001) {
  460. if (data.data == null)
  461. return;
  462. var dataVal = data.data;
  463. writeHtmlDate("anchorage-id", feature.attributes.id);
  464. writeHtmlDate("anchorage-name", dataVal.name);
  465. writeHtmlDate("harbour-name", dataVal.harbour_name);
  466. writeHtmlDate("anchorage-length", dataVal.length)
  467. writeHtmlDate("anchorage-width", dataVal.width)
  468. writeHtmlDate("anchorage-square", dataVal.square)
  469. writeHtmlDate("geology", dataVal.geology)
  470. writeHtmlDate("anchorage-position",
  471. dataVal.position)
  472. writeHtmlDate("anchorage-purpose", dataVal.purpose)
  473. writeHtmlDate("annchorage-capacity",
  474. dataVal.capacity)
  475. writeHtmlDate("anchorposition-num",
  476. dataVal.anchorpostion_num);
  477. openWinLayer('锚地信息', 500, 250, $('#anchorage-info'));
  478. } else {
  479. alert(data.statusMsg);
  480. }
  481. }, function() {}, true)
  482. }
  483. }
  484. mdSelectFeature = new SuperMap.Control.SelectFeature(mdVectorLayer, {
  485. callbacks : mdCallbacks,
  486. repeat : true,
  487. hover : false,
  488. selectStyle : {
  489. strokeColor : "#C1FFC1",
  490. strokeWidth : 2,
  491. fill : false
  492. }
  493. });
  494. map.addControl(mdSelectFeature);
  495. initResource();
  496. }
  497. /**
  498. * 点击搜索按钮
  499. */
  500. function searchShip() {
  501. setSearchStyle();
  502. var content = $('#srchContent').val();
  503. if ("" != $.trim(content)) {
  504. var search_ship_url = localUrl + "/shipSearch/keyWords?keyWords="
  505. + content;
  506. openCenterWin('船舶信息', 2, 700, 500, search_ship_url);
  507. }
  508. }
  509. /**
  510. * 设置搜索框样式
  511. */
  512. function setSearchStyle() {
  513. var sid = "#srchContent";
  514. var iconId = "#srchIcon";
  515. if ($(sid).css("display") == "none") {
  516. $(sid).css("display", "inline-block");
  517. $(sid).css("border", "1px solid #b7b7b7");
  518. $(sid).focus();
  519. $(iconId).css("margin-left", "0px");
  520. return;
  521. }
  522. var content = $(sid).val();
  523. if ("" == $.trim(content)) {
  524. $(sid).css("display", "none");
  525. $(iconId).css("margin-left", "195px");
  526. $(sid).css("border", "0px solid #b7b7b7");
  527. }
  528. }
  529. /**
  530. * 设置搜索框样式
  531. */
  532. function setLayersStyle() {
  533. var sid = "#layer-content";
  534. var iconId = "#layer-icon";
  535. if ($(sid).css("display") == "none") {
  536. $(sid).css("display", "inline-block");
  537. $("#btn-float").css("color","#0091ff");
  538. $("#spanarrow").removeClass("downward");
  539. $("#spanarrow").addClass("upward");
  540. } else {
  541. $(sid).css("display", "none");
  542. $("#btn-float").css("color","#565656");
  543. $("#spanarrow").removeClass("upward");
  544. $("#spanarrow").addClass("downward");
  545. }
  546. }
  547. /**
  548. * 初始化调用
  549. */
  550. $(document).ready(function() {
  551. //initMap();
  552. dojo.addOnLoad(initMap);
  553. });