signal.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. /*
  2. * 전체 신호제어기를 메모리에 저장해서 등록함(Bean 으로 등록하면 됨)
  3. */
  4. var _mapSignal = new HashMap();
  5. var sigInfowindow = null;
  6. var cvibMarkerArr = [];
  7. var signalArr = [];
  8. var _Flag = null;
  9. var siginfoPhaseDetailWin = null;
  10. var _CvibObjArr = [];
  11. var _CvibCircleImgArr = [];
  12. var _CvibOutCircleImgArr = [];
  13. var _CvibInfoImgArr = [];
  14. var _CvibInfoCWImgArr = [];
  15. var _CvibInfoULImgArr = [];
  16. var _CvibInfoUtunImgArr = [];
  17. var _CvibTimeId = null;
  18. var overLayData;
  19. function mapZoomBound() {
  20. _Level = map.getLevel();
  21. getSignalInfo();
  22. if (_Level === 0 || _Level === 1) {
  23. // _CvibNodeArr.forEach(function (el) {
  24. // el.allDrawCircle();
  25. // el.allDrawCvib();
  26. // });
  27. signalArr.forEach(function (el) {
  28. if (el.mapCircle) {
  29. el.mapCircle.setMap(null);
  30. }
  31. });
  32. if (customOverlay) {
  33. customOverlay.setMap(null);
  34. }
  35. } else {
  36. _CvibNodeArr.forEach(function (el) {
  37. el.emptyCvibCircleImg();
  38. el.emptyCvibInfoImg();
  39. });
  40. if (customOverlay != null) {
  41. customOverlayFnc(overLayData.name, overLayData.lng, overLayData.lat);
  42. }
  43. //_CvibNodeArr = []
  44. }
  45. }
  46. function mapMoveBound() {
  47. // _CvibNodeArr = [];
  48. getSignalInfo();
  49. // _CvibNodeArr.forEach(function (el) {
  50. // el.emptyCvibCircleImg();
  51. // el.emptyCvibInfoImg();
  52. // });
  53. if(_Level == 0 || _Level == 1){
  54. _CvibNodeArr.forEach(function (el) {
  55. for (var ii = 0; ii < signalArr.length; ii++) {
  56. if(el.nodeId == signalArr[ii].nodeId){
  57. el.emptyCvibCircleImg();
  58. el.emptyCvibInfoImg();
  59. }
  60. }
  61. });
  62. _CvibNodeArr.forEach(function (el) {
  63. for (var ii = 0; ii < signalArr.length; ii++) {
  64. if(el.nodeId == signalArr[ii].nodeId){
  65. el.setCircle();
  66. el.setCvibInfo();
  67. }
  68. }
  69. });
  70. } else {
  71. _CvibNodeArr.forEach(function (el) {
  72. for (var ii = 0; ii < signalArr.length; ii++) {
  73. if(el.nodeId == signalArr[ii].nodeId){
  74. el.emptyCvibCircleImg();
  75. el.emptyCvibInfoImg();
  76. }
  77. }
  78. });
  79. if (customOverlay != null) {
  80. customOverlayFnc(overLayData.name, overLayData.lng, overLayData.lat);
  81. }
  82. //_CvibNodeArr = []
  83. }
  84. }
  85. function emptySignalArr(arr) {
  86. if (arr != null) {
  87. arr.forEach(function (el) {
  88. el.setMap(null);
  89. });
  90. arr = 0;
  91. }
  92. }
  93. function getSignalInfo() {
  94. var url = 'getSignalInfo.do';
  95. var param =
  96. '&minX=' + map.getBounds().getSouthWest().getLng() +
  97. '&minY=' + map.getBounds().getSouthWest().getLat() +
  98. '&maxX=' + map.getBounds().getNorthEast().getLng() +
  99. '&maxY=' + map.getBounds().getNorthEast().getLat();
  100. requestService(url, param, getSignalInfoCallback);
  101. }
  102. function getSignalInfoCallback(json) {
  103. signalArr = [];
  104. var data = json;
  105. cvibMarkerArr.forEach(function (el) {
  106. if (el.getMap() != null) {
  107. el.setMap(null);
  108. }
  109. });
  110. var bottomCvibInfoList = "";
  111. cvibMarkerArr = [];
  112. //cvibMarkerArr =[];
  113. for (var ii = 0; ii < data.length; ii++) {
  114. //if(data[ii].addr1 == null||data[ii].addr1=='-')continue;
  115. var nodeId = data[ii].nodeid;
  116. var addr1 = data[ii].addr1;
  117. var addr2 = data[ii].addr2;
  118. var addr3 = data[ii].addr3;
  119. var lat = data[ii].lat;
  120. var lng = data[ii].lng;
  121. var name = data[ii].name;
  122. var tmpHtml="";
  123. _CvibNodeArr.forEach(function(el) {
  124. if(el.nodeId == nodeId){
  125. tmpHtml = '<tr id="'+nodeId+'">' +
  126. '<td style="width:5%">' + addr1 + '</td>' +
  127. '<td style="width:15%"><a style="margin: auto;" href="javascript:goPanToInt(\'' + nodeId + '\',' + lng + ',' + lat + ')">' + nodeId + '</a></td>' +
  128. '<td style="width:15%"><a href="javascript:goPanToInt(\'' + name + '\',' + lng + ',' + lat + ')">' + name + '</a></td>' +
  129. /*'<td style="width:10%">'+el.date+'</td>'+*/
  130. '<td style="width:3%" id="oprTrans">'+el.oprTrans+'</td>' +
  131. '<td style="width:3%" id="oprInd">'+el.oprInd+'</td>' +
  132. '<td style="width:3%" id="oprTurnoff">'+el.oprTurnoff+'</td>' +
  133. '<td style="width:3%" id="oprBlink">'+el.oprBlink+'</td>' +
  134. '<td style="width:3%" id="oprManual">'+el.oprManual+'</td>' +
  135. '<td style="width:7%" id="errScu">'+el.errScu+'</td>' +
  136. '<td style="width:7%" id="errCenter">'+el.errCenter+'</td>' +
  137. '<td style="width:7%" id="errCont">'+el.errCont+'</td>' +
  138. '<td style="width:7%" id="counter">'+el.counter+'</td>'+
  139. '<td style="width:10%" id="date">'+el.date+'</td>' +
  140. '</tr>';
  141. }
  142. });
  143. if (tmpHtml == "") {
  144. tmpHtml = '<tr id="'+nodeId+'">' +
  145. '<td style="width:5%">' + addr1 + '</td>' +
  146. '<td style="width:15%"><a style="margin: auto;" href="javascript:goPanToInt(\'' + nodeId + '\',' + lng + ',' + lat + ')">' + nodeId + '</a></td>' +
  147. '<td style="width:15%"><a href="javascript:goPanToInt(\'' + name + '\',' + lng + ',' + lat + ')">' + name + '</a></td>' +
  148. /*'<td style="width:10%">'+el.date+'</td>'+*/
  149. '<td style="width:3%" id="oprTrans">-</td>' +
  150. '<td style="width:3%" id="oprInd">-</td>' +
  151. '<td style="width:3%" id="oprTurnoff">-</td>' +
  152. '<td style="width:3%" id="oprBlink">-</td>' +
  153. '<td style="width:3%" id="oprManual">-</td>' +
  154. '<td style="width:7%" id="errScu">-</td>' +
  155. '<td style="width:7%" id="errCenter">-</td>' +
  156. '<td style="width:7%" id="errCont">-</td>' +
  157. '<td style="width:7%" id="counter">-</td>'+
  158. '<td style="width:10%" id="date">-</td>' +
  159. '</tr>';
  160. }
  161. var signal = new Signal(nodeId, name, lat, lng, addr1, addr2, addr3);
  162. signalArr.push(signal);
  163. bottomCvibInfoList += tmpHtml;
  164. }
  165. signalArr.forEach(function (el) {
  166. if (el.mapCircle.getMap() == null) {
  167. el.mapCircle.setMap(map);
  168. }
  169. //if (_Level < 2) el.mapCircle.setMap(null);
  170. })
  171. // 하단 리스트 클리어
  172. // 하단 리스트 초기작업
  173. $('#iframeBottomList').contents().find('#cvibBottomInfo').html(bottomCvibInfoList);
  174. }
  175. /*function drawSignal(signal) {
  176. if(sigInfowindow != null) sigInfowindow.close();
  177. }*/
  178. function findSignal(Id) {
  179. return _mapSignal.get(Id);
  180. };
  181. function addSignal(Id, Obj) {
  182. _mapSignal.put(Id, Obj);
  183. return _mapSignal.size();
  184. };
  185. //#define RadToDeg(x) (57.29577951 * x)
  186. //#define DegToRad(x) (0.017453293 * x)
  187. Number.prototype.toRadians = function () {
  188. return this * 0.017453293;
  189. //return this * Math.PI / 180;
  190. };
  191. Number.prototype.toDegrees = function () {
  192. return this * 57.29577951;
  193. //return this * 180 / Math.PI;
  194. };
  195. /*
  196. * 좌표를 저장하는 Class
  197. * Lat(Y) = 37.564974, Lng(X) = 126.978517;
  198. * kakao.maps.LatLng(Lat, Lng)
  199. */
  200. function SCoord(Lat, Lng) {
  201. this.Lat = parseFloat(Lat);
  202. this.Lng = parseFloat(Lng);
  203. };
  204. function SignalLinkDraw(ALink, BLink) {
  205. this.initialize(ALink, BLink);
  206. }
  207. /*
  208. * 신호제어기 정보
  209. */
  210. function Signal(nodeId, name, lat, lng, addr1, addr2, addr3) {
  211. this.initialize(nodeId, name, lat, lng, addr1, addr2, addr3);
  212. };
  213. Signal.prototype = {
  214. Lat: 0,
  215. Lng: 0,
  216. drawSignal: null, /* 현재 표출될 SignalDraw class */
  217. listDrawSignal: null, /* 표출현시 목록을 저장할 list array: 최초 한번만 좌표를 계산하도록 하기 위함, 성능에 따라 map 사용 가능 */
  218. mapCircle: null,
  219. initialize: function (nodeId, name, lat, lng, addr1, addr2, addr3) {
  220. this.nodeId = nodeId;
  221. this.name = name;
  222. this.addr1 = addr1;
  223. this.addr2 = addr2;
  224. this.addr3 = addr3;
  225. this.Lat = lat;
  226. this.Lng = lng;
  227. this.listDrawSignal = [];
  228. var markerSize = 0;
  229. if (_Level >= 5) {
  230. markerSize = 10;
  231. } else if (_Level >= 3) {
  232. markerSize = 20;
  233. } else {
  234. markerSize = 20;
  235. }
  236. let offset = markerSize / 2;
  237. var icon = new kakao.maps.MarkerImage(
  238. // 'images/TrafficLight25.png',
  239. 'images/sig5.png',
  240. new kakao.maps.Size(markerSize * 3, markerSize),
  241. {
  242. alt: "신호현시",
  243. offset: new kakao.maps.Point(offset * 3, offset)
  244. },
  245. );
  246. this.mapCircle = new kakao.maps.Marker({
  247. position: new kakao.maps.LatLng(lat, lng),
  248. image: icon,
  249. zIndex: 10
  250. });
  251. this.mapCircle
  252. if (_Level < 7) {
  253. this.mapCircle.setMap(map);
  254. }
  255. cvibMarkerArr.push(this.mapCircle);
  256. kakao.maps.event.addListener(this.mapCircle, 'mouseover', function () {
  257. //신호 이미지 마우스올렷을때 [이름 생성]
  258. customOverlayFnc(name, lng, lat);
  259. });
  260. kakao.maps.event.addListener(this.mapCircle, 'mouseout', function () {
  261. // 신호 이미지 마우스아웃시 [이름 사라짐]
  262. if (customOverlay) customOverlay.setMap(null);
  263. });
  264. kakao.maps.event.addListener(this.mapCircle, 'click', function () {
  265. var url = 'cvibInfoDetail.do?nodeId=' + nodeId;
  266. var options = 'scrollbars=no,toolbar=no,location=no,resizable=no,status=no,menubar=no,width=1300px,height=590px,left=0,top=0';
  267. _CvibInfoDetailPop = window.open(url, 'cvibChild', options);
  268. });
  269. },
  270. empty: function (map) {
  271. if (this.drawSignal.mapCircle != null) this.drawSignal.mapCircle.setMap(null);
  272. }
  273. };