|
@@ -42,7 +42,8 @@ stateMap.set(2, '#FFFF00');
|
|
|
stateMap.set(3, '#808080');
|
|
|
stateMap.set(4, '#CC6600');
|
|
|
stateMap.set(5, '#9933FF');
|
|
|
-
|
|
|
+var _isClick = null;
|
|
|
+let _evpData = [];
|
|
|
|
|
|
$(document).ready(function () {
|
|
|
init();
|
|
@@ -99,11 +100,69 @@ function init() {
|
|
|
//getSignalInfo();
|
|
|
const worker = new Worker('/js/worker.js');
|
|
|
worker.postMessage({message:"worker START"});
|
|
|
+
|
|
|
worker.onmessage = (ev)=>{
|
|
|
const data = JSON.parse(ev.data);
|
|
|
- drawEmergencyRoad(data);
|
|
|
+ const iframe = $('#iframeTreeList').contents();
|
|
|
+ const table = iframe.find('.evp-table');
|
|
|
+ const img = iframe.find('#tab2 img');
|
|
|
+ const imgName = '/images/evp_icon';
|
|
|
+ let exp = '.png';
|
|
|
+ let str = '<tr><td colspan="3" class="empty-evp">조회된 내용이 없습니다.</td></tr>';
|
|
|
+ _evpData = data;
|
|
|
+ if (data && data.length > 0) {
|
|
|
+ table.empty();
|
|
|
+ exp = '.gif';
|
|
|
+ str = '';
|
|
|
+ for (let obj of data) {
|
|
|
+ let className = '';
|
|
|
+ if (_isClick && obj.service_id === _isClick) {
|
|
|
+ className = 'on';
|
|
|
+ }
|
|
|
+ str += `<tr class="tr_${obj.service_id} ${className}"><td>${obj.clct_dt}</td><td>${obj.service_id}</td><td>${obj.service_nm}</td></tr>`;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_isClick) {
|
|
|
+ drawEvp(_isClick);
|
|
|
+ }
|
|
|
+
|
|
|
+ table.html(str);
|
|
|
+ data.forEach((obj)=>{
|
|
|
+ iframe.find('.tr_' + obj.service_id).off('click');
|
|
|
+ iframe.find('.tr_' + obj.service_id).on('click',()=> drawEvp(obj.service_id));
|
|
|
+ })
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (iframe.find('.empty-evp').length === 0) {
|
|
|
+ table.html(str);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_EmergencyMap.size){
|
|
|
+ _EmergencyMap.forEach((obj)=>{
|
|
|
+ obj.clear();
|
|
|
+ });
|
|
|
+
|
|
|
+ _EmergencyMap.clear();
|
|
|
+ _isClick = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (img.attr('src') !== imgName + exp) {
|
|
|
+ img.attr('src',imgName + exp);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
+ function drawEvp(serviceId) {
|
|
|
+ if (serviceId) {
|
|
|
+ const iframe = $('#iframeTreeList').contents();
|
|
|
+ if (!iframe.find('.tr_'+ serviceId + '.on').length) {
|
|
|
+ iframe.find('tr.on').removeClass('on');
|
|
|
+ iframe.find('.tr_'+ serviceId).addClass('on');
|
|
|
+ }
|
|
|
+ let idx = _evpData.findIndex((obj)=> obj.service_id === serviceId);
|
|
|
+ drawEmergencyRoad(_evpData[idx]);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
let coordMarker;
|
|
@@ -303,73 +362,61 @@ function setEmergencyCurr(car, sigMap, road, arrive, dataMap) {
|
|
|
}
|
|
|
|
|
|
function drawEmergencyRoad(data) {
|
|
|
- if (data && data.length) {
|
|
|
- data.forEach((obj)=>{
|
|
|
- const beforeObj = _EmergencyMap.get(obj.service_id);
|
|
|
- if (!beforeObj) {
|
|
|
- const emgObj = new EmergencyObj(obj);
|
|
|
- if (_EmergencyMap.size === 0) {
|
|
|
- emgObj.setBound();
|
|
|
- }
|
|
|
-
|
|
|
- _EmergencyMap.set(obj.service_id, emgObj);
|
|
|
- }
|
|
|
- else {
|
|
|
- beforeObj.car.moveMarker(getKakaoPosition(obj.event_list[0].cur_lat, obj.event_list[0].cur_lng));
|
|
|
- obj.phase_list.forEach((sigObj)=>{
|
|
|
- const beforeSig = beforeObj.sig.get(sigObj.service_id + '_' + sigObj.seq_no);
|
|
|
- if (beforeSig) {
|
|
|
- const {a_head_lat, a_head_lng, a_mid_lat, a_mid_lng, a_end_lat, a_end_lng,
|
|
|
- b_head_lat, b_head_lng, b_mid_lat, b_mid_lng, b_end_lat, b_end_lng, state} = sigObj
|
|
|
- beforeSig.setState(state);
|
|
|
- if (beforeSig.a_ring) {
|
|
|
+ if (data) {
|
|
|
+ if (_EmergencyMap.size > 0) {
|
|
|
+ const evpObj = _EmergencyMap.get(data.service_id);
|
|
|
+ if (evpObj) {
|
|
|
+ evpObj.car.moveMarker(getKakaoPosition(data.event_list[0].cur_lat, data.event_list[0].cur_lng));
|
|
|
+ data.phase_list.forEach((obj)=>{
|
|
|
+ const {a_head_lat, a_head_lng, a_mid_lat, a_mid_lng, a_end_lat, a_end_lng,
|
|
|
+ b_head_lat, b_head_lng, b_mid_lat, b_mid_lng, b_end_lat, b_end_lng, state} = obj;
|
|
|
+ const sig = evpObj.sig.get(obj.service_id + '_' + obj.seq_no);
|
|
|
+ if (sig) {
|
|
|
+ sig.setState(state);
|
|
|
+ if (sig.a_ring) {
|
|
|
const a_head = getKakaoPosition(a_head_lat, a_head_lng);
|
|
|
const a_mid = getKakaoPosition(a_mid_lat, a_mid_lng);
|
|
|
const a_end = getKakaoPosition(a_end_lat, a_end_lng);
|
|
|
- beforeSig.a_ring.setPath([a_head, a_mid, a_end]);
|
|
|
+ sig.a_ring.setPath([a_head, a_mid, a_end]);
|
|
|
}
|
|
|
|
|
|
- if (beforeSig.b_ring) {
|
|
|
+ if (sig.b_ring) {
|
|
|
const b_head = getKakaoPosition(b_head_lat, b_head_lng);
|
|
|
const b_mid = getKakaoPosition(b_mid_lat, b_mid_lng);
|
|
|
const b_end = getKakaoPosition(b_end_lat, b_end_lng);
|
|
|
- beforeSig.b_ring.setPath([b_head, b_mid, b_end]);
|
|
|
+ sig.b_ring.setPath([b_head, b_mid, b_end]);
|
|
|
}
|
|
|
-
|
|
|
- if (beforeSig.a_ring === null && beforeSig.b_ring === null) {
|
|
|
- beforeSig.createRing(sigObj);
|
|
|
+ if (sig.a_ring === null && sig.b_ring === null) {
|
|
|
+ sig.createRing(data);
|
|
|
}
|
|
|
}
|
|
|
+ else {
|
|
|
+ evpObj.sig.set(obj.service_id + '_' + obj.seq_no, new EmergencySig(obj));
|
|
|
+ }
|
|
|
});
|
|
|
}
|
|
|
- });
|
|
|
-
|
|
|
- if (_EmergencyMap.size !== data.length) {
|
|
|
- const keyArr = Array.from(_EmergencyMap.keys());
|
|
|
- for (let key of keyArr) {
|
|
|
- let cnt = 0;
|
|
|
- data.forEach((obj) => {
|
|
|
- if (obj.service_id === key) {
|
|
|
- cnt++;
|
|
|
- }
|
|
|
- })
|
|
|
- if (cnt === 0) {
|
|
|
- const sigObj = _EmergencyMap.get(key).sig;
|
|
|
- sigMap.delete(sigObj.lat + '_' + sigObj.lng);
|
|
|
- _EmergencyMap.get(key).clear();
|
|
|
- _EmergencyMap.delete(key);
|
|
|
- }
|
|
|
+ else {
|
|
|
+ _EmergencyMap.forEach((obj)=>{
|
|
|
+ obj.clear();
|
|
|
+ });
|
|
|
+ _EmergencyMap.clear();
|
|
|
+ const emgObj = new EmergencyObj(data);
|
|
|
+ _EmergencyMap.set(data.service_id, emgObj);
|
|
|
+ _isClick = data.service_id;
|
|
|
}
|
|
|
}
|
|
|
+ else {
|
|
|
+ const emgObj = new EmergencyObj(data);
|
|
|
+ _EmergencyMap.set(data.service_id, emgObj);
|
|
|
+ _isClick = data.service_id;
|
|
|
+ }
|
|
|
}
|
|
|
else {
|
|
|
- if (_EmergencyMap.size > 0) {
|
|
|
- _EmergencyMap.forEach((obj)=>{
|
|
|
- obj.clear();
|
|
|
- });
|
|
|
- _EmergencyMap.clear();
|
|
|
- }
|
|
|
- // clearEmgMarker();
|
|
|
+ _EmergencyMap.forEach((obj)=>{
|
|
|
+ obj.clear();
|
|
|
+ });
|
|
|
+ _EmergencyMap.clear();
|
|
|
+ _isClick = null;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1589,6 +1636,7 @@ class EmergencyObj{
|
|
|
|
|
|
init() {
|
|
|
this.road = new EmergencyRoadObj(this.route_list);
|
|
|
+ this.road.setBound();
|
|
|
if (this.phase_list && this.phase_list.length) {
|
|
|
this.phase_list.forEach((obj)=>{
|
|
|
const sig = new EmergencySig(obj);
|
|
@@ -1604,10 +1652,11 @@ class EmergencyObj{
|
|
|
this.road.hide();
|
|
|
}
|
|
|
|
|
|
- if (this.sig && this.sig.length) {
|
|
|
+ if (this.sig && this.sig.size) {
|
|
|
this.sig.forEach((obj)=>{
|
|
|
obj.hide();
|
|
|
- })
|
|
|
+ });
|
|
|
+ this.sig.clear();
|
|
|
}
|
|
|
|
|
|
if (this.car) {
|
|
@@ -1751,7 +1800,7 @@ class EmergencySig{
|
|
|
stateColor = stateMap.get(Number(this.state));
|
|
|
}
|
|
|
const position = getKakaoPosition(this.lat, this.lng);
|
|
|
- if (!sigMap.get(this.lat + '_' + this.lng)) {
|
|
|
+ if (!sigMap.get(this.service_id + '_' + this.sep_no)) {
|
|
|
this.circle = new kakao.maps.Circle({
|
|
|
center : position, // 원의 중심좌표 입니다
|
|
|
radius: 60, // 미터 단위의 원의 반지름입니다
|
|
@@ -1869,6 +1918,10 @@ class EmergencySig{
|
|
|
if (this.b_ring) {
|
|
|
this.b_ring.hide();
|
|
|
}
|
|
|
+
|
|
|
+ if (sigMap && sigMap.size) {
|
|
|
+ sigMap.clear();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
setCenter() {
|