123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257 |
- import { currDt } from "/js/utils/common.js";
- import { requestGet, apiGet } from "/js/utils/restApi.js";
- import { TMapMngr } from "/js/vworld/map-mngr.js";
- import { LayerType, LayerIndex } from "/js/vworld/map-const.js";
- import { TWebSocket } from "/js/websocket/websocket.js";
- import * as MAIN from "./main.js";
- export let _mapManager = null;
- let _webSocket = null;
- export let _cctvMap = new Map();
- export let _vmsMap = new Map();
- let _trafficMap = new Map();
- const _crdnMap = new Map();
- window.$trafficMap = _trafficMap;
- let _timerFetchFcltStts = null; // 시설물 상태정보 요청 타이머
- let _timerFetchTraffic = null; // 교통정보 요청 타이머
- let _timerFetchIncdData = null; // 돌발정보 요청 타이머
- let _timerWebsocket = null;
- export let _iceServerMap = new Map();
- export const drctMap = new Map();
- drctMap.set(1, 0);
- drctMap.set(2, 90);
- drctMap.set(3, 180);
- drctMap.set(4, 270);
- drctMap.set(5, 45);
- drctMap.set(6, 135);
- drctMap.set(7, 225);
- drctMap.set(8, 315);
- const requestFetchFcltStts = () => {
- //console.log(`${nowTime()} requestFetchFcltStts`);
- if (_timerFetchFcltStts) window.clearTimeout(_timerFetchFcltStts);
- _timerFetchFcltStts = window.setTimeout(() => fetchFcltStts(), 2 * 60 * 1000);
- };
- const requestFetchTraffic = () => {
- //console.log(`${nowTime()} requestFetchTraffic`);
- if (_timerFetchTraffic) window.clearTimeout(_timerFetchTraffic);
- _timerFetchTraffic = window.setTimeout(() => fetchTraffic(), 5 * 60 * 1000);
- };
- const requestFetchIncdData = () => {
- //console.log(`${nowTime()} requestFetchIncdData`);
- if (_timerFetchIncdData) window.clearTimeout(_timerFetchIncdData);
- _timerFetchIncdData = window.setTimeout(() => fetchIncdData(), 2 * 60 * 1000);
- };
- let _timerFetchUnitStts = null; // 프로세스 상태정보 요청 타이머
- const requestFetchUnitStts = () => {
- //console.log(`${nowTime()} requestFetchUnitStts`);
- if (_timerFetchUnitStts) window.clearTimeout(_timerFetchUnitStts);
- _timerFetchUnitStts = window.setTimeout(() => fetchUnitStts(), 2 * 60 * 1000);
- };
- // 웹소켓 초기화
- function websocketConnect(clientType) {
- _webSocket = new TWebSocket(clientType, onSocketReceived, onSocketDisconnected, onSocketError, onSocketConnected);
- _webSocket.connect();
- }
- function onSocketConnected(AClientType, AMessage) {
- if (_timerWebsocket != null) {
- clearTimeout(_timerWebsocket);
- _timerWebsocket = null;
- }
- console.log(`${nowTime()} onSocketConnected, ${AClientType}, `, AMessage);
- }
- function onSocketReceived(AClientType, AMessage) {
- // console.log(`${nowTime()} onSocketReceived, ${AClientType}, `, AMessage);
- const command = AMessage.command;
- const jsonData = AMessage.data;
- if (command === "itsFcltStts" || command === "bisFcltStts") {
- updateFcltStts(jsonData);
- //if (command === "bisFcltStts") {
- //const sttsArray = Array.from( _sttsMap.values() );
- MAIN.updateFcltStts(_sttsMap);
- //}
- requestFetchFcltStts();
- } else if (command === "itsUnitStts" || command === "bisUnitStts") {
- if (command === "itsUnitStts") {
- MAIN.updateUnitStts(jsonData); //ITS 프로세스
- }
- //if (command === "bisUnitStts") {
- requestFetchUnitStts();
- //}
- } else if (command === "traffic") {
- // 소통정보 가공완료
- fetchTraffic();
- } else if (command === "form-save") {
- // VMS 메시지 생성 저장
- } else if ( command === "fcltUserMsg" ) {
- getDataAsync('/api/facility/tb_user_msg/list/notify/' + encodeURIComponent(window.$userId), (jsonData)=>{
- if (jsonData && jsonData.length > 0){
- MAIN.drawMsgView(jsonData);
- }
- }, null, null, true);
- }
- }
- function connectToWebSocket() {
- if (_timerWebsocket != null) {
- clearTimeout(_timerWebsocket);
- _timerWebsocket = null;
- }
- websocketConnect('op')
- }
- //소켓이 끊어 졌을때 다시 실행
- function onSocketDisconnected(AClientType, AMessage) {
- console.log(`${nowTime()} onSocketDisconnected, ${AClientType}, `, AMessage);
- if (_timerWebsocket != null) {
- clearTimeout(_timerWebsocket);
- _timerWebsocket = null;
- }
- _timerWebsocket = setTimeout(connectToWebSocket, 5000);
- }
- function onSocketError(AClientType, AMessage) {
- console.log(`${nowTime()} onSocketError, ${AClientType}, `, AMessage);
- }
- function FcltStts(type) {
- this.type = type;
- this.total = 0;
- this.normal = 0;
- this.error = 0;
- this.collect = 0;
- this.objLists = new Array();
- }
- export const _sttsMap = new Map();
- _sttsMap.set("CCTV", new FcltStts("CCTV"));
- _sttsMap.set("VMS", new FcltStts("VMS"));
- _sttsMap.set("VDS", new FcltStts("VDS"));
- _sttsMap.set("DSRC", new FcltStts("DSRC"));
- _sttsMap.set("SIG", new FcltStts("신호제어기"));
- _sttsMap.set("CCAM", new FcltStts("교차로카메라"));
- _sttsMap.set("WCAM", new FcltStts("웹카메라"));
- //_sttsMap.set("BIT", new FcltStts("BIT"));
- export function doMap() {
- // 지도객체 먼저 생성 하여야 함
- _mapManager = new TMapMngr("map", "tooltip");
- connectToWebSocket();
- _mapManager.onMapMoveEndFunc = onMapMoveEndFunc; // 지도 이동/줌 변경 이벤트 반환
- _mapManager.onMouseClickFunc = onMouseClickFunc; // 객체 마우스 클릭 이벤트 반환
- _mapManager.onContextMenuFunc = onContextMenuFunc; // 객체 컨텍스트 이벤트 반환
- //_mapManager.onSelectObjFunc = onSelectObjFunc; // 객체 선택 이벤트 반환
- //_mapManager.onFcltDragEndFunc = onFcltDragEndFunc; // 객체(시설물) 편집시 객체 이동후 좌표 반환
- // 지도 초기화설정
- _mapManager.showTrafficTooltip(false);
- _mapManager.setSelectMode(true);
- _mapManager.toggleBaseMap(true);
- requestGet('/api/database/code/cmmn-cd/LTC', (jsonData) => {_mapManager.setTrafficGradDesc(jsonData);});
- }
- function onMapMoveEndFunc(AZoom, ACenterX, ACenterY, ALeft, ABottom, ARight, ATop) {
- //console.log(`${nowTime()} onMapMoveEndFunc, ${AZoom}, ${ACenterX}, ${ACenterY}, ${ALeft}, ${ABottom}, ${ARight}, ${ATop}`);
- $('.cctv-right-btn-click').remove();
- $('.vms-right-btn-click').remove();
- }
- function onMouseClickFunc(ALyrIdx, ALyrName, ANmbr, ACoordX, ACoordY, X, Y) {
- //console.log(`${nowTime()} onMouseClickFunc, ${ALyrIdx}, ${ALyrName}, ${ANmbr}, ${ACoordX}, ${ACoordY}, ${X}, ${Y}`);
- if (ALyrIdx === -1) {
- $('.cctv-right-btn-click').remove();
- $('.vms-right-btn-click').remove();
- }
- // const obj = _mapManager.findLayerObject(ALyrIdx, ANmbr);
- // if (!obj) {
- // return;
- // }
- if (ALyrName === "VMS") {
- } else if (ALyrName === "CCTV") {
- }
- // else if (ALyrName === "BIT") {
- // }
- let option = 'width = 580, height = 550, top = 200, left = 674, resizable=no, scrollbars=no';
- if (ALyrIdx >= LayerIndex.Link1 && ALyrIdx <= LayerIndex.Link5) {
- window.open('./detail-traffic-pop-up.html?id=' + encodeURIComponent(ANmbr) + '&type=link', '구간선택', option);
- }
- else if (ALyrIdx >= LayerIndex.Ifsc1 && ALyrIdx <= LayerIndex.Ifsc5) {
- window.open('./detail-traffic-pop-up.html?id=' + encodeURIComponent(ANmbr) + '&type=ifsc', '구간선택', option);
- }
- else if (ALyrIdx >= LayerIndex.Road1 && ALyrIdx <= LayerIndex.Road5) {
- window.open('./detail-traffic-pop-up.html?id=' + encodeURIComponent(ANmbr) + '&type=road', '구간선택', option);
- }
- }
- function onContextMenuFunc(ALyrIdx, ALyrName, ANmbr, ACoordX, ACoordY, X, Y) {
- //console.log(`${nowTime()} onContextMenuFunc, ${ALyrIdx}, ${ALyrName}, ${ANmbr}, ${ACoordX}, ${ACoordY}, ${X}, ${Y}`);
- $('.cctv-right-btn-click').remove();
- $('.vms-right-btn-click').remove();
- //cctv 우클릭 이벤트
- if (ALyrIdx === LayerIndex.Cctv || ALyrIdx === LayerIndex.WCam || ALyrIdx === LayerIndex.CCam) {
- const cctvObj = _mapManager.findLayerObject(ALyrIdx, ANmbr);
- let type;
- switch (ALyrIdx) {
- case LayerIndex.Cctv:
- type = 'CCTV';
- break;
- case LayerIndex.WCam:
- type = '웹카메라';
- break;
- case LayerIndex.CCam:
- type = '교차로카메라';
- break;
- }
-
- if (cctvObj) {
- let div = $(`<div class='cctv-right-btn-click'>
- <div>
- <div>[${type}] ${cctvObj.ID} - ${cctvObj.NAME}</div>
- <div>카메라 영상</div>
- </div>
- </div>`);
- $('body').append(div);
-
- if ($('#drawer')[0].offsetWidth - X < div[0].offsetWidth){
- div.css('left', $('#drawer')[0].offsetWidth - div[0].offsetWidth + 12);
- }
- else {
- div.css('left', X);
- }
- if ($('#drawer')[0].offsetHeight - Y < div[0].offsetHeight){
- div.css('top', $('#drawer')[0].offsetHeight - div[0].offsetHeight + 59);
- }
- else {
- div.css('top', Y);
- }
- $(div).children().eq(0).children().eq(1).on('click',function(e){
- $('.cctv-right-btn-click').remove();
- const cctvBox = $('#' + cctvObj.ID);
- if (cctvBox.length > 0) {
- return cctvBox.mousedown();
- }
- newCamCtrl(createVideoIframe, cctvObj, X, Y);
- })
- }
- }
- //vms 우클릭 이벤트
- else if (ALyrIdx === LayerIndex.Vms) {
- const vmsObj = _mapManager.findLayerObject(ALyrIdx, ANmbr);
- if (vmsObj) {
- let div = $(`<div class='vms-right-btn-click'>
- <div>
- <div>[VMS] ${vmsObj.ID} - ${vmsObj.NAME}</div>
- <div>카메라 영상</div>
- <div>표출메시지</div>
- </div>
- </div>`);
- $('body').append(div);
- if ($('#drawer')[0].offsetWidth - X < div[0].offsetWidth){
- div.css('left', $('#drawer')[0].offsetWidth - div[0].offsetWidth + 12);
- }
- else {
- div.css('left', X);
- }
- if ($('#drawer')[0].offsetHeight - Y < div[0].offsetHeight){
- div.css('top', $('#drawer')[0].offsetHeight - div[0].offsetHeight + 59);
- }
- else {
- div.css('top', Y);
- }
- if (!_cctvMap.get(vmsObj.ID)){
- _cctvMap.set(vmsObj.ID, new Map());
- }
- if (!_vmsMap.get(vmsObj.ID)){
- _vmsMap.set(vmsObj.ID, new Map());
- }
-
- // 카메라 영상 클릭 이벤트
- $(div).children().eq(0).children().eq(1).on('click',function(){
- $('.vms-right-btn-click').remove();
- let src = vmsObj.strmHttpAddr;
- camCtrl(_cctvMap, createVideoDiv, vmsObj, src, X, Y, true);
- });
- //표출메시지 클릭 이벤트
- $(div).children().eq(0).children().eq(2).on('click',function(){
- $('.vms-right-btn-click').remove();
- if(!_vmsMap.get(vmsObj.ID).get('div')){
- vmsMessageCtrl(vmsObj,X, Y);
- }
- })
- }
- }
- }
- /**
- * 표출메시지 이벤트
- * @param {*} obj vms 객체
- * @param {*} X 마우스 X 좌표
- * @param {*} Y 마우스 Y 좌표
- */
- export function vmsMessageCtrl(obj, X, Y){
- let vmsData = [];
- //vms 데이터 수신
- getData('/api/vms/common/vms-form/dspl-prst', vmsData, {id:obj.NMBR});
- if (vmsData[0] && vmsData[0].length > 0) {
-
- vmsData = vmsData[0];
- //vms 이미지 데이터
- let msgs = vmsData[0].msgs;
- //현재 시각
- let now = "제공시각 - " + nowTime();
- //이미지 높이에 따른 박스 높이
- let height = vmsData[0].vms_hght + 80;
- //이미지 높이
- let imgBoxHeight = vmsData[0].vms_hght;
- //이미지 넓이에 따른 박스 넓이
- let width = vmsData[0].vms_wdth + 20;
- //vms div 생성
- let vmsDiv = createMessageDiv(obj, now, vmsData[0].cmnc_stts_desc);
- let vmsLeft = X;
- let vmsTop = Y;
- $('body').append(vmsDiv);
- vmsDiv.children().eq(1).css('height', imgBoxHeight);
- vmsDiv.children().eq(1).children().eq(0).css({height: imgBoxHeight, width: width - 20});
- if ($('#drawer')[0].offsetWidth - X < width){
- vmsLeft = $('#drawer')[0].offsetWidth - width + 12;
- }
- if ($('#drawer')[0].offsetHeight - Y < height){
- vmsTop = $('#drawer')[0].offsetHeight - height + 59;
- }
- vmsDiv.css({left:vmsLeft, top:vmsTop, height: height});
- let imgPosition = vmsDiv.children().eq(1).children().eq(0);
- let phaseNumPosition = vmsDiv.children().eq(2).children().eq(0);
- let intervalNumPosition = vmsDiv.children().eq(2).children().eq(1);
- let closePosition = vmsDiv.children().eq(0).children().eq(0);
- let vmsInfo = _vmsMap.get(obj.ID);
- vmsInfo.set('div', vmsDiv);
- setVmsInterval(msgs, imgPosition, phaseNumPosition, intervalNumPosition, 0, obj.ID);
- //vmsInfo.set('intervalArr', intervalArr);
- $('.vms-box').draggable({ containment: "body" });
- //dragEvent(vmsDiv, 'vms-box');
-
- closePosition.on('click', function(){
- clearTimeout(vmsInfo.get('interval'));
- vmsInfo.get('div').remove();
- vmsInfo.delete('div');
- });
- }
- else {
- //현재 시각
- let now = '표출메시지가 없습니다.';
- //이미지 높이에 따른 박스 높이
- let height = 144;
- //이미지 높이
- let imgBoxHeight = 64;
- //이미지 넓이에 따른 박스 넓이
- let width = 404;
- //vms div 생성
- let vmsDiv = createMessageDiv(obj, now);
- let vmsLeft = X;
- let vmsTop = Y;
- $('body').append(vmsDiv);
- vmsDiv.children().eq(1).css('height', imgBoxHeight);
- vmsDiv.children().eq(1).children().eq(0).css({height: imgBoxHeight, width: width - 20});
- if ($('#drawer')[0].offsetWidth - X < width){
- vmsLeft = $('#drawer')[0].offsetWidth - width + 12;
- }
- if ($('#drawer')[0].offsetHeight - Y < height){
- vmsTop = $('#drawer')[0].offsetHeight - height + 59;
- }
- vmsDiv.css({left:vmsLeft, top:vmsTop, width:width, height: height});
- let imgPosition = vmsDiv.children().eq(1).children().eq(0);
- let closePosition = vmsDiv.children().eq(0).children().eq(0);
- imgPosition.css('background-color', 'black');
- let vmsInfo = _vmsMap.get(obj.ID);
- vmsInfo.set('div', vmsDiv);
- //dragEvent(vmsDiv, 'vms-box');
- $('.vms-box').draggable({ containment: "body" });
-
- closePosition.on('click', function(){
- vmsInfo.get('div').remove();
- vmsInfo.delete('div');
- });
- }
- }
- /**
- * vms 이미지 인터벌
- * @param {*} value vms 데이터
- * @param {*} position vms 이미지 위치
- * @param {*} phase phase 번호 텍스트 위치
- * @param {*} num 카운트 텍스트 위치
- */
- export function setVmsInterval(data, position, phase, num, idx, id){
- if (data[idx]) {
- $(position).prop('src', 'data:image/png;base64,'+ data[idx].vms_dspl_msg_imag);
- let time = data[idx].dspl_hh;
- let intervalNum = data[idx].dspl_hh;
- idx++;
- $(num).text(intervalNum--);
- $(phase).text(idx + '/' + data.length);
- let timeInterval = setInterval(()=>{
- $(num).text(intervalNum--);
- if(intervalNum === 0){
- clearInterval(timeInterval);
- }
- }, 1000);
- if(idx === data.length){
- idx = 0;
- }
- let interval = setTimeout(() => {
- window.clearTimeout(interval);
- setVmsInterval(data, position, phase, num, idx, id);
- }, time * 1000);
- _vmsMap.get(id).set('interval', interval);
- }
- }
- /**
- * 시설물 클릭 시 카메라 영상 생성 및 이동 이벤트
- * @param {*} map 해당 맵 객체
- * @param {*} obj 해당 시설물 객체
- * @param {*} src 영상 소스
- * @param {*} X X좌표
- * @param {*} Y Y좌표
- */
- export async function newCamCtrl(method, obj, X, Y){
- let cctvBox = method(obj);
- $("body").append(cctvBox);
- let cctvLeft = X;
- let cctvTop = Y;
- const drawer = $('#drawer');
- const dragBox = $('#' + obj.ID);
- if (drawer[0].offsetWidth - X < cctvBox[0].offsetWidth){
- cctvLeft = drawer[0].offsetWidth - cctvBox[0].offsetWidth + 12;
- }
- if (drawer[0].offsetHeight - Y < cctvBox[0].offsetHeight){
- cctvTop = drawer[0].offsetHeight - cctvBox[0].offsetHeight + 59;
- }
- dragBox.css({left:cctvLeft, top:cctvTop});
- dragBox.draggable({ containment: "body", handle: '.cctv-box-title' });
- dragBox.children().eq(0).children().eq(0).on('click',function(){
- cctvBox.remove();
- });
- dragBox.on('mousedown', ()=>{
- const cctvBoxArr = $('.cctv-box');
- if (cctvBoxArr.length > 1) {
- let maxZ = Math.max(...cctvBoxArr.map((_, el) => +$(el).css('z-index') || 0).get());
- if (maxZ === 100 || maxZ > Number(dragBox.css('z-index'))) {
- maxZ++;
- }
- dragBox.css('z-index', maxZ);
- }
- })
- }
- /**
- * 시설물 클릭 시 카메라 영상 생성 및 이동 이벤트
- * @param {*} map 해당 맵 객체
- * @param {*} obj 해당 시설물 객체
- * @param {*} src 영상 소스
- * @param {*} X X좌표
- * @param {*} Y Y좌표
- */
- export function camCtrl(map, method, obj, src, X, Y, vmsTrue){
- let cctvBox = method(obj);
- $("body").append(cctvBox);
- let cctvLeft = X;
- let cctvTop = Y;
- if ($('#drawer')[0].offsetWidth - X < cctvBox[0].offsetWidth){
- cctvLeft = $('#drawer')[0].offsetWidth - cctvBox[0].offsetWidth + 12;
- }
- if ($('#drawer')[0].offsetHeight - Y < cctvBox[0].offsetHeight){
- cctvTop = $('#drawer')[0].offsetHeight - cctvBox[0].offsetHeight + 59;
- }
- cctvBox.css({left:cctvLeft, top:cctvTop});
- let cctvInfo = map.get(obj.ID);
- cctvInfo.set('div', cctvBox);
- let player = webRtcConnector(obj, $('#' + obj.ID).children().eq(1).children().eq(0), 'video' + obj.ID, vmsTrue);
- if (player) {
- cctvInfo.set('video', player);
- $('#video' + obj.ID).on('dblclick', function (){
- if (cctvBox.css('width') === '350px') {
- cctvBox.css('width', 700);
- cctvBox.css('height', 600);
- }
- else {
- cctvBox.css('width', 350);
- cctvBox.css('height', 300);
- }
- })
- }
- cctvBox.children().eq(0).children().eq(0).on('click',function(){
- cctvBox.remove();
- if (cctvInfo.get('video')) {
- cctvInfo.get('video').Stop();
- }
- });
- cctvBox.draggable({ containment: "body", handle : ".cctv-box-title" });
- //dragEvent(cctvBox, 'cctv-box');
- }
- /**
- * 카메라 영상 div 생성
- * @param {*} obj 데이터 객체
- * @returns 생성 div
- */
- export function createVideoIframe(obj){
- const iceInfo = _iceServerMap.get(obj.rtc_svr_ip);
- if (iceInfo) {
- const {svr_ip, svr_prot, svr_port, svr_id, svr_pswd} = iceInfo
- obj.local_ice_svr = svr_prot + ":" + svr_ip + ":" + svr_port;
- obj.local_ice_id = svr_id;
- obj.local_ice_pswd = svr_pswd;
- }
- const {ID, NAME, local_ice_id, local_ice_svr, local_ice_pswd, rtc_id, rtc_svr_ip, rtc_svr_port} = obj;
- const objInfo = {ID, NAME, local_ice_id, local_ice_svr, local_ice_pswd, rtc_id, rtc_svr_ip, rtc_svr_port};
- const objStr = encodeURIComponent(JSON.stringify(objInfo));
- let title = ID + ' - ' + NAME;
- if (obj.lyrInfo.lyrName === '교차로카메라') {
- title = obj.NMBR + ' - ' + NAME;
- }
- let div = $(`<div class="cctv-box dx-nav-item" id=${obj.ID}>
- <div class="b2 dx-theme-border-color cctv-box-title">${title} <span class="b0 dx-theme-border-color" title="닫기">X</span></div>
- <div>
- <iframe src="/application/op/99.common/video.html?info=${objStr}" width="100%" height="100%"></iframe>
- </div>
- </div>`);
- return div;
- }
- /**
- * 카메라 영상 div 생성
- * @param {*} obj 데이터 객체
- * @returns 생성 div
- */
- export function createVideoDiv(obj){
- let div = $(`<div class="cctv-box dx-nav-item" id=${obj.ID}>
- <div class="b2 dx-theme-border-color cctv-box-title">${obj.ID} - ${obj.NAME} <span class="b0 dx-theme-border-color" title="닫기">X</span></div>
- <div>
- <div class="bg-black" id="cctv-box${obj.ID}"></div>
- </div>
- </div>`);
- return div;
- }
- function webRtcConnector(obj, videoBox, id, vmsTrue){
- //let { web_rtc_svr_ip, web_rtc_svr_port, web_rtc_id } = obj;
- let { rtc_svr_ip, rtc_svr_port, rtc_id } = obj;
- if (vmsTrue) {
- rtc_svr_ip = obj.web_rtc_svr_ip;
- rtc_svr_port = obj.web_rtc_svr_port;
- rtc_id = obj.web_rtc_id;
- }
- let isNull = nullArrChecker([rtc_svr_ip, rtc_svr_port, rtc_id]);
- if (!isNull) {
- videoBox.css('cursor', 'pointer');
- videoBox.append($(`<video id="${id}" title="확대/축소" class="cctv-body" style="width:100%; height:100%;" autoplay playsinline muted></video>`))
- let video;
- if (rtc_id.includes('vms-')) {
- video = new WebRtcPlayer(id, rtc_svr_ip, rtc_svr_port, rtc_id);
- }
- else {
- video = new HiVeWebRtcPlayer(id, rtc_svr_ip, rtc_svr_port, rtc_id);
- }
- video.Play();
- return video;
- } else {
- videoBox.css('background-color', '');
- videoBox.append($(`<div class="empty-body" id="${id}">
- <h5>영상 스트리밍 정보를 확인해주세요.</h5>
- <br>
- <div class="error-content">
- <div class="fr">
- <div class='error-label'>
- WEB RTC IP
- </div>
- <div class='ml-5'> : </div>
- <div class='ml-5'>
- ${rtc_svr_ip}
- </div>
- </div>
- <div class="fr">
- <div class='error-label'>
- WEB RTC PORT
- </div>
- <div class='ml-5'> : </div>
- <div class='ml-5'>
- ${rtc_svr_port}
- </div>
- </div>
- <div class="fr">
- <div class='error-label'>
- WEB RTC ID
- </div>
- <div class='ml-5'> : </div>
- <div class='ml-5'>
- ${rtc_id}
- </div>
- </div>
- </div>
- </div>`))
- }
- }
- /**
- * 메시지 표출 div 생성
- * @param {*} obj 데이터 객체
- * @param {*} now 현재 시각
- * @returns 생성 div
- */
- export function createMessageDiv(obj, now, cmncSttsDesc){
- const procClass = cmncSttsDesc === "통신두절" || !cmncSttsDesc ? 't-red' : '';
- let div = $(`<div draggable="true" class="vms-box dx-nav-item">
- <div class="b2 dx-theme-border-color">${obj.ID} - ${obj.NAME} <span class="b0 dx-theme-border-color" title="닫기">X</span></div>
- <div>
- <img class='vms-img'>
- </div>
- <div class="${procClass}">${now} <span class="phase-num"></span> <span class="interval-num"></span></div>
- </div>`);
- return div;
- }
- /**
- * 드래그 이벤트
- * @param {*} position 드래그 상자 위치
- */
- export function dragEvent(position, classNm){
- $(position).on('mousedown', function(){
- for (let ii = 0; ii < $('.' + classNm).length; ii++ ){
- $($('.' + classNm)[ii]).css('z-index', '100');
- };
- $(position).css('z-index', '101');
- })
-
- position.on("dragstart", function(ev){
- let offsetX = ev.offsetX;
- let offsetY = ev.offsetY;
- $('#drawer').off('drop');
- $('#drawer').off('dragover');
-
- $('#drawer').on('dragover', function(ev){
- ev.preventDefault();
- })
-
- $('#drawer').on('drop',function(ev){
- ev.preventDefault();
- $(position).css({left : ev.clientX - offsetX, top : ev.clientY - offsetY});
- })
- });
- }
- function setTranslate(xPos, yPos, el) {
- el.style.transform = "translate3d(" + xPos + "px, " + yPos + "px, 0)";
- }
- function onSelectObjFunc(ALyrIdx, ALyrName, ANmbr, ACoordX, ACoordY, X, Y) {
- //console.log(`${nowTime()} onSelectObjFunc, ${ALyrIdx}, ${ALyrName}, ${ANmbr}, ${ACoordX}, ${ACoordY}, ${X}, ${Y}`);
- }
- function onFcltDragEndFunc(ALyrIdx, ALyrName, ANmbr, ACoordX, ACoordY) {
- //console.log(`${nowTime()} onFcltDragEndFunc, ${ALyrIdx}, ${ALyrName}, ${ANmbr}, ${ACoordX}, ${ACoordY}`);
- }
- export function loadingData() {
- fetchBaseData();
- fetchFcltData();
- fetchUnitStts();
- fetchIncdData(); // 돌발정보 요청
- //fetchFcltStts();
- }
- /**
- * Promise.all 사용해서 하나라도 오류가 발생하면 다음 함수가 실행되지 않도록 한다.
- * 개별 오류 catch 하면 다음 작업에서 계속 오류가 발생(객체를 찾지 못함)하기 때문에
- * 아예 다음작업이 수행되지 않도록 catch 를 한번 만 잡는다.
- * 즉, 오류가 발생하면 그냥 오류 발생 후 다음 작업이 진행되지 않도록 한다.
- */
- async function fetchBaseData() {
- //console.time("***** fetchBaseData: ");
- const node = apiGet("/api/database/node/list"); // 노드정보 요청
- const link = apiGet("/api/database/link/list"); // 링크정보 요청
- const ifsc = apiGet("/api/database/ifsc/list"); // 링크정보 요청
- const road = apiGet("/api/database/road/list"); // 도로정보 요청
-
- Promise.all([node, link, ifsc, road])
- .then((results) => Promise.all(results.map((r) => r.json())))
- .then((values) => {
- //console.log(`${nowTime()} BaseData, NODE(${values[0].length}), LINK(${values[1].length}), IFSC(${values[2].length}), ROAD(${values[3].length})`);
- _mapManager.makeLayer(LayerIndex.Node, values[0]);
- _mapManager.makeTrafficObject(LayerType.LINK, values[1]);
- _mapManager.makeTrafficObject(LayerType.IFSC, values[2]);
- _mapManager.makeTrafficObject(LayerType.ROAD, values[3]);
- _trafficMap.set('node', values[0]);
- _trafficMap.set('link', values[1]);
- _trafficMap.set('ifsc', values[2]);
- _trafficMap.set('road', values[3]);
- fetchTraffic();
- fetchBaseVrtx();
- })
- .catch((err) => {
- console.error(`${nowTime()} Error in fetchBaseData ${err}`);
- setTimeout(()=>fetchBaseData(), 30000);
- })
- //.finally(() => console.timeEnd("***** fetchBaseData: "));
- }
- async function fetchTraffic() {
- //console.time("***** fetchTraffic: ");
- const link = apiGet("/api/manage/main/traffic/link"); // 링크소통정보 요청
- const ifsc = apiGet("/api/manage/main/traffic/ifsc"); // 정보제공구간정보 요청
- const road = apiGet("/api/manage/main/traffic/road"); // 도로소통정보 요청
-
- // 결측구간, 반복정체구간은 async 로 조회한다.
- requestGet("/api/manage/main/syst-opr/miss-link-traf", recvMissLinkTraf);
- requestGet("/api/manage/main/syst-opr/repeat-congest", recvRepeatCongest);
- Promise.all([link, ifsc, road])
- .then((results) => Promise.all(results.map((r) => r.json())))
- .then((values) => {
- //console.log(`${nowTime()} Traffic, LINK(${values[0].length}), IFSC(${values[1].length}), ROAD(${values[2].length})`);
- _mapManager.updateTrafficObject(LayerType.LINK, values[0]);
- _mapManager.updateTrafficObject(LayerType.IFSC, values[1]);
- _mapManager.updateTrafficObject(LayerType.ROAD, values[2]);
- })
- .catch((err) => {
- console.error(`Error in fetchTraffic ${err}`);
- setTimeout(()=>fetchTraffic(), 30000);
- })
- //.finally(() => );
- // 요청시간을 기준으로 교통정보 요청 타이머 리셋
- requestFetchTraffic();
- }
- function recvMissLinkTraf(jsonData) {
- MAIN.updateMissLinkTraf(jsonData);
- }
- function recvRepeatCongest(jsonData) {
- MAIN.updateRepeatCongest(jsonData);
- }
- async function fetchBaseVrtx() {
- //console.time("***** fetchBaseVrtx: ");
- // 버텍스를 표출할 레벨을 설정한다.
- _mapManager.setLayerVisible(LayerIndex.Link1, 16);
- _mapManager.setLayerVisible(LayerIndex.Link2, 17, 18, 19);
- _mapManager.setLayerVisible(LayerIndex.Ifsc1, 14);
- _mapManager.setLayerVisible(LayerIndex.Ifsc2, 15);
- _mapManager.setLayerVisible(LayerIndex.Road1, 10);
- _mapManager.setLayerVisible(LayerIndex.Road2, 11, 12, 13);
- //console.error("***** fetchBaseVrtx_1: ");
- //const link1 = apiGet("/api/manage/main/map/vrtx/link/1"); // 버텍스정보 요청(1 => 16)
- const link2 = apiGet("/api/manage/main/map/vrtx/link/2"); // 버텍스정보 요청(2 => 17,18,19)
- //const ifsc3 = apiGet("/api/manage/main/map/vrtx/ifsc/3"); // 버텍스정보 요청(3 => 15)
- const ifsc4 = apiGet("/api/manage/main/map/vrtx/ifsc/4"); // 버텍스정보 요청(4 => 14)
- //const road5 = apiGet("/api/manage/main/map/vrtx/road/5"); // 버텍스정보 요청(5 => 13)
- const road6 = apiGet("/api/manage/main/map/vrtx/road/6"); // 버텍스정보 요청(6 => 10, 11, 12)
- //Promise.all([link1, link2, ifsc3, ifsc4, road5, road6])
- //Promise.all([link2, ifsc4, road6])
- Promise.all([link2, ifsc4, road6])
- .then((results) => Promise.all(results.map((r) => r.json())))
- .then((values) => {
- _mapManager.makeLayer(LayerIndex.Link1, values[0]);
- _mapManager.makeLayer(LayerIndex.Link2, values[0]);
- _mapManager.makeLayer(LayerIndex.Ifsc1, values[1]);
- _mapManager.makeLayer(LayerIndex.Ifsc2, values[1]);
- _mapManager.makeLayer(LayerIndex.Road1, values[2]);
- _mapManager.makeLayer(LayerIndex.Road2, values[2]);
- _trafficMap.set('link1', values[0]);
- _trafficMap.set('link2', values[0]);
- _trafficMap.set('ifsc1', values[1]);
- _trafficMap.set('ifsc2', values[1]);
- _trafficMap.set('road1', values[2]);
- _trafficMap.set('road2', values[2]);
- })
- .catch((err) => {
- console.error(`Error in fetchBaseVrtx ${err}`);
- setTimeout(()=>fetchBaseVrtx(), 30000);
- })
- .finally(() => {
- });
- }
- async function fetchFcltData() {
- //console.time("***** fetchFcltData: ");
- const cctv = apiGet("/api/cctv/common/cctv-list"); // CCTV
- const vms = apiGet("/api/vms/common/vms-list"); // VMS
- const vds = apiGet("/api/vds/common/vds-list"); // VDS
- const dsrc = apiGet("/api/rse/tb_rse_ctlr"); // RSE
- const sig = apiGet("/api/scrs/tb_sc_sgnl_ctlr"); // 신호제어기(SIG)
- const ccam = apiGet("/api/scrs/tb_sc_ixr_cmra_mngm/list"); // 교차로 카메라
- const wcam = apiGet("/api/wcam/manager/info"); // 교차로 카메라
- const iceServer = apiGet("/api/database/strm_ice_svr"); // 교차로 카메라
- Promise.all([cctv, vms, vds, dsrc, sig, ccam, wcam, iceServer])
- .then((results) => Promise.all(results.map((r) => r.json())))
- .then((values) => {
- // console.log(
- // //`${nowTime()} FcltData, CCTV(${values[0].length}), VMS(${values[1].length}), VDS(${values[2].length}), PARK(${values[3].length}), BIT(${values[4].length})`
- // `${nowTime()} FcltData, CCTV(${values[0].length}), VMS(${values[1].length}), VDS(${values[2].length})`
- // );
- _mapManager.makeLayer(LayerIndex.Cctv, values[0]);
- _mapManager.makeLayer(LayerIndex.Vms, values[1]);
- _mapManager.makeLayer(LayerIndex.Vds, values[2]);
- _mapManager.makeLayer(LayerIndex.Dsrc, values[3]);
- _mapManager.makeLayer(LayerIndex.Sig, values[4]);
- _mapManager.makeLayer(LayerIndex.WCam, values[6]);
- values[7].map((obj)=>{
- _iceServerMap.set(obj.svr_ip, obj);
- })
- // values[5].map((obj)=>{
- // let deg = drctMap.get(obj.drct_dvsn_cd);
- // const crdn = getDestinationPoint(obj.cmra_y_crdn, obj.cmra_x_crdn, deg, 25);
- // obj.cmra_y_crdn = crdn[1];
- // obj.cmra_x_crdn = crdn[0];
- // _crdnMap.set(obj.cmra_id, [obj.cmra_x_crdn, obj.cmra_y_crdn]);
- // });
- _mapManager.makeLayer(LayerIndex.CCam, values[5]);
- fetchFcltStts();
- })
- .catch((err) => {
- console.error(`Error in fetchFcltData ${err}`);
- setTimeout(()=>fetchFcltData(), 30000);
- $('.loading-box').css('display','none');
- })
- //.finally(() => console.timeEnd("***** fetchFcltData: "));
-
- }
- // 시설물 상태정보 요청(타이머 또는 웹소켓에 의해 실행됨)
- async function fetchFcltStts() {
- // console.log("***** fetchFcltStts: ");
- const its = apiGet("/api/common/stts/total"); // ITS 상태정보 요청
- //const bit = apiGet("/api/bis/stts/bit/total"); // BIT 상태정보 요청
- //Promise.all([its, bit])
- Promise.all([its])
- .then((results) => Promise.all(results.map((r) => r.json())))
- .then((values) => {
- //console.log(`${nowTime()} FcltStts, ITS(${values[0].fclt_list.length}))`);
- //console.log(`${nowTime()} FcltStts, ITS(${values[0].fclt_list.length}), BIT(${values[1].fclt_list.length})`);
- updateFcltStts(values[0]);
- MAIN.updateFcltStts(_sttsMap);
- })
- .catch((err) => {
- console.error(`Error in fetchFcltStts ${err}`);
- setTimeout(()=>fetchFcltStts(), 30000);
- })
- .finally(() => $('.loading-box').css('display','none'));
- //.finally(() => console.timeEnd("***** fetchFcltStts: "));
- // 요청시간을 기준으로 상태정보 요청 타이머 리셋
- requestFetchFcltStts();
- }
- function updateFcltStts(jsonData) {
- jsonData.fclt_list.forEach((el) => {
- let lyrInfo = null;
- const stts = _sttsMap.get(el.fclt_type);
- // console.log("stts : ",stts);
- if (!stts) {
- return;
- }
- let toNumber = true;
- if (el.fclt_type === "CCTV") {
- lyrInfo = _mapManager.getLayer(LayerIndex.Cctv);
- // toNumber = true;
- } else if (el.fclt_type === "VMS") {
- lyrInfo = _mapManager.getLayer(LayerIndex.Vms);
- // toNumber = true;
- } else if (el.fclt_type === "VDS") {
- lyrInfo = _mapManager.getLayer(LayerIndex.Vds);
- // toNumber = true;
- } else if (el.fclt_type === "DSRC") {
- lyrInfo = _mapManager.getLayer(LayerIndex.Dsrc);
- // toNumber = true;
- }
- else if (el.fclt_type === "SIG") {
- lyrInfo = _mapManager.getLayer(LayerIndex.Sig);
- // toNumber = true;
- }
- else if (el.fclt_type === "CCAM") {
- lyrInfo = _mapManager.getLayer(LayerIndex.CCam);
- toNumber = false;
- }
- else if (el.fclt_type === "WCAM") {
- lyrInfo = _mapManager.getLayer(LayerIndex.WCam);
- // toNumber = true;
- }
- if (lyrInfo) {
- stts.total = el.total_cnt;
- stts.normal = el.normal_cnt;
- stts.error = el.error_cnt;
- stts.collect = el.col_err_cnt;
- stts.objLists = el.fclt_objs;
- // console.log(`${nowTime()} updateFcltStts: stts: `, stts);
- el.fclt_objs.forEach((obj) => {
- const fclt = lyrInfo.findObject(toNumber ? Number(obj.fclt_nmbr) : obj.fclt_nmbr);
- if (fclt) {
- fclt.updateStts(obj.stts_cd, obj.updt_dt, obj.fclt_info1, obj.fclt_info2);
- // if (el.fclt_type === "CCTV" && obj.stts_cd !== "CMS0") {
- // console.log(`${nowTime()} updateFcltStts: CCTV: `, obj.fclt_nmbr);
- // }
- } else {
- console.warn(`fetchFcltStts: Not Found Object, ${obj.fclt_type}, ${obj.fclt_nmbr}, ${obj.fclt_id}`);
- }
- });
- } else {
- console.error(nowTime(), " Unknown Fclt Type: ", el.fclt_type);
- setTimeout(()=>updateFcltStts(), 30000);
- }
- });
- }
- // 센터프로세스 상태정보 요청(타이머 또는 웹소켓에 의해 실행됨)
- export async function fetchUnitStts() {
- if (_timerFetchUnitStts) window.clearTimeout(_timerFetchUnitStts);
- //console.time("***** fetchUnitStts: ");
- const its = apiGet("/api/common/stts/process/its"); // 센터프로세스 ITS
- //const bis = apiGet("/api/bis/stts/process"); // 센터프로세스 BIT
- Promise.all([its])
- .then((results) => Promise.all(results.map((r) => r.json())))
- .then((values) => {
- //console.log(`${nowTime()} UnitStts, ITS(${values[0].length}), BIS(${values[1].length})`);
- //console.log(`${nowTime()} UnitStts, ITS(${values[0].length})`);
- MAIN.updateUnitStts(values[0]); //ITS 프로세스
- //updateUnitStts(values[1]); //BIS 프로세스
- })
- .catch((err) => {
- console.error(`Error in fetchUnitStts ${err}`);
- })
- //.finally(() => console.timeEnd("***** fetchUnitStts: "));
- // 요청시간을 기준으로 상태정보 요청 타이머 리셋
- requestFetchUnitStts();
- }
- // function updateUnitStts(jsonData) {
- // //console.log("updateUnitStts: ", jsonData);
- // jsonData.forEach((obj) => {
- // const runStts = obj.run_sts.slice(-1);
- // let comStts = obj.com_sts.slice(-1);
- // let dbStts = obj.db_sts.slice(-1);
- // if (runStts == "1") {
- // comStts = "1";
- // dbStts = "1";
- // }
- // // const comImg = "<img src='/images/application_wall/stts" + comStts + ".png'>";
- // // //const dbImg = "<img src='/images/application_wall/stts" + dbStts + ".png'>";
- // // setHtml(".A" + obj.syst_id + "_server", comImg);
- // // if (comStts == null || comStts == "0" || comStts == "2") {
- // // windowPop(obj.syst_id);
- // // }
- // });
- // //MAIN._dataUnitSttsList = jsonData;
- // MAIN._gridFcltSttsBoard.option("dataSource", jsonData);
- // }
- // 돌발정보 수신
- function recvIncdData(jsonData) {
- //console.log(`${nowTime()} recvIncdData: ${jsonData.length} EA.`);
- _mapManager.makeLayer(LayerIndex.Incd, jsonData); // 레이어 생성
- MAIN.updateIncdData(jsonData);
-
- //console.timeEnd("***** fetchIncdData: ");
- }
- // 돌발정보 수신
- function recvAutoIncd(jsonData) {
- //console.log( `${ nowTime() } recvAutoIncd: ${ jsonData.length } EA.` );
- //MAIN.updateAutoIncd(jsonData);
- }
- // 돌발정보요청
- function fetchIncdData() {
- //console.time("***** fetchIncdData: ");
- requestGet("/api/manage/main/syst-opr/incd-ocrr", recvIncdData); // 돌발정보
- //requestGet("/api/manage/main/syst-opr/auto-incd", recvAutoIncd); // 시스템 자동 돌발 정보
- // 요청시간을 기준으로 돌발정보 요청 타이머 리셋
- requestFetchIncdData();
- }
- // 시설물 개별적으로 상태정보 요청
- async function fetchFcltSttsIndividual() {
- const cctv = apiGet("/api/cctv/monitoring/stts"); // CCTV 상태정보 요청
- const vms = apiGet("/api/vms/monitoring/stts"); // VMS 상태정보 요청
- const vds = apiGet("/api/vds/monitoring/ctlr-stts"); // VDS 상태정보 요청
- //const bit = apiGet("/api/bis/stts/bit"); // BIT 상태정보 요청
- const rse = apiGet("/api/utis/stts/rse"); // RSE 상태정보 요청
- //Promise.all([cctv, vms, vds, rse, bit])
- Promise.all([cctv, vms, vds, rse])
- .then((results) => Promise.all(results.map((r) => r.json())))
- .then((values) => {
- //console.log(`${nowTime()} CCTV(${values[0].length}), VMS(${values[1].length}), VDS(${values[2].length}), BIT(${values[3].length})`);
- //console.log(`${nowTime()} CCTV(${values[0].length}), VMS(${values[1].length}), VDS(${values[2].length})`);
- const cctvStts = recvCctvSttsInfo(values[0]);
- const vmsStts = recvVmsSttsInfo(values[1]);
- const vdsStts = recvVdsSttsInfo(values[2]);
- //const bitStts = recvBitSttsInfo(values[3]);
- const rseStts = recvRseSttsInfo(values[3]);
- //console.log(nowTime(), "CCTV: ", cctvStts);
- //console.log(nowTime(), " VMS: ", vmsStts);
- //console.log(nowTime(), " VDS: ", vdsStts);
- //console.log(nowTime(), " BIT: ", bitStts);
- //console.log(nowTime(), " RSE: ", rseStts);
- })
- .catch((err) => {
- console.error(`Error in fetchFcltStts ${err}`);
- });
- // 요청시간을 기준으로 시설물 상태정보 요청 타이머 리셋
- requestFetchFcltStts();
- }
- function recvNodeInfo(AJsonData) {
- //console.log("recvNodeInfo: " + AJsonData.length + " EA.");
- _mapManager.makeLayer(LayerIndex.Node, AJsonData);
- }
- function recvLinkInfo(AJsonData) {
- //console.log("recvLinkInfo: " + AJsonData.length + " EA.");
- _mapManager.makeTrafficObject(LayerType.LINK, AJsonData);
- requestGet("/api/manage/main/traffic/link", recvLinkTrafInfo); // 소통정보 요청
- requestGet("/api/manage/main/map/vrtx/link/1", recvLinkVrtxInfo, LayerIndex.Link1); // 버텍스정보 요청(1 => 16)
- requestGet("/api/manage/main/map/vrtx/link/2", recvLinkVrtxInfo, LayerIndex.Link2); // 버텍스정보 요청(2 => 17,18,19)
- }
- function recvLinkTrafInfo(AJsonData) {
- //console.log("recvLinkTrafInfo: " + AJsonData.length + " EA.");
- _mapManager.updateTrafficObject(LayerType.LINK, AJsonData);
- }
- function recvIfscInfo(AJsonData) {
- //console.log("recvIfscInfo: " + AJsonData.length + " EA.");
- _mapManager.makeTrafficObject(LayerType.IFSC, AJsonData);
- requestGet("/api/manage/main/traffic/ifsc", recvIfscTrafInfo); // 소통정보 요청
- requestGet("/api/manage/main/map/vrtx/ifsc/3", recvIfscVrtxInfo, LayerIndex.Ifsc1); // 버텍스정보 요청(3 => 14)
- requestGet("/api/manage/main/map/vrtx/ifsc/4", recvIfscVrtxInfo, LayerIndex.Ifsc2); // 버텍스정보 요청(4 => 15)
- }
- function recvIfscTrafInfo(AJsonData) {
- //console.log("recvIfscTrafInfo: " + AJsonData.length + " EA.");
- _mapManager.updateTrafficObject(LayerType.IFSC, AJsonData);
- }
- function recvRoadInfo(AJsonData) {
- //console.log("recvRoadInfo: " + AJsonData.length + " EA.");
- _mapManager.makeTrafficObject(LayerType.ROAD, AJsonData);
- requestGet("/api/manage/main/traffic/road", recvRoadTrafInfo); // 소통정보 요청
- requestGet("/api/manage/main/map/vrtx/road/5", recvRoadVrtxInfo, LayerIndex.Road1); // 버텍스정보 요청(5 => 10, 11, 12)
- requestGet("/api/manage/main/map/vrtx/road/6", recvRoadVrtxInfo, LayerIndex.Road2); // 버텍스정보 요청(6 => 13)
- }
- function recvRoadTrafInfo(AJsonData) {
- //console.log("recvRoadTrafInfo: " + AJsonData.length + " EA.");
- _mapManager.updateTrafficObject(LayerType.ROAD, AJsonData);
- }
- function recvLinkVrtxInfo(AJsonData, ALyrIdx) {
- //console.log(`${nowTime()} recvLinkVrtxInfo: ${ALyrIdx}, ${AJsonData.length} EA.`);
- _mapManager.makeLayer(ALyrIdx, AJsonData);
- }
- function recvIfscVrtxInfo(AJsonData, ALyrIdx) {
- //console.log(`${nowTime()} recvIfscVrtxInfo: ${ALyrIdx}, ${AJsonData.length} EA.`);
- _mapManager.makeLayer(ALyrIdx, AJsonData);
- }
- function recvRoadVrtxInfo(AJsonData, ALyrIdx) {
- //console.log(`${nowTime()} recvRoadVrtxInfo: ${ALyrIdx}, ${AJsonData.length} EA.`);
- _mapManager.makeLayer(ALyrIdx, AJsonData);
- }
- // CCTV
- function recvCctvInfo(AJsonData) {
- //console.log("recvCctvInfo: " + AJsonData.length + " EA.");
- _mapManager.makeLayer(LayerIndex.Cctv, AJsonData);
- requestGet("/api/cctv/monitoring/stts", recvCctvSttsInfo); // 상태정보 요청
- }
- // CCTV 상태
- function recvCctvSttsInfo(AJsonData) {
- let stts = new FcltStts();
- const lyrInfo = _mapManager.getLayer(LayerIndex.Cctv);
- if (lyrInfo == null) {
- return stts;
- }
- AJsonData.forEach((el, idx) => {
- const obj = lyrInfo.findObject(el.nmbr);
- if (obj) {
- stts.total++;
- const sttsCd = el.cmnc_stts_cd.slice(-1);
- if (Number(sttsCd) == 0) {
- stts.normal++;
- }
- obj.updateStts(el.cmnc_stts_cd, el.updt_dt);
- }
- });
- stts.error = stts.total - stts.normal;
- //console.log(`${nowTime()} recvCctvSttsInfo: ${AJsonData.length} EA.`);
- return stts;
- }
- // VMS
- function recvVmsInfo(AJsonData) {
- //console.log("recvVmsInfo: " + AJsonData.length + " EA.");
- _mapManager.makeLayer(LayerIndex.Vms, AJsonData);
- requestGet("/api/vms/monitoring/stts", recvVmsSttsInfo); // 상태정보 요청
- }
- // VMS 상태
- function recvVmsSttsInfo(AJsonData) {
- let stts = new FcltStts();
- const lyrInfo = _mapManager.getLayer(LayerIndex.Vms);
- if (lyrInfo == null) {
- return stts;
- }
- AJsonData.forEach((el, idx) => {
- const obj = lyrInfo.findObject(el.nmbr);
- if (obj) {
- stts.total++;
- const sttsCd = el.cmnc_stts_cd.slice(-1);
- if (Number(sttsCd) == 0) {
- stts.normal++;
- }
- obj.updateStts(el.cmnc_stts_cd, el.updt_dt);
- }
- });
- stts.error = stts.total - stts.normal;
- //console.log(`${nowTime()} recvVmsSttsInfo: ${AJsonData.length} EA.`);
- return stts;
- }
- // VDS
- function recvVdsInfo(AJsonData) {
- //console.log("recvVdsInfo: " + AJsonData.length + " EA.");
- _mapManager.makeLayer(LayerIndex.Vds, AJsonData);
- requestGet("/api/vds/monitoring/ctlr-stts", recvVdsSttsInfo); // 상태정보 요청
- }
- // VDS 상태
- function recvVdsSttsInfo(AJsonData) {
- let stts = new FcltStts();
- const lyrInfo = _mapManager.getLayer(LayerIndex.Vds);
- if (lyrInfo == null) {
- return stts;
- }
- AJsonData.forEach((el, idx) => {
- const obj = lyrInfo.findObject(el.nmbr);
- if (obj) {
- stts.total++;
- const sttsCd = el.cmnc_stts_cd.slice(-1);
- if (Number(sttsCd) == 0) {
- stts.normal++;
- if (el.coll_cnt == 0) {
- stts.collect++;
- }
- }
- obj.updateStts(el.cmnc_stts_cd, el.updt_dt);
- }
- });
- stts.error = stts.total - stts.normal;
- //console.log(`${nowTime()} recvVdsSttsInfo: ${AJsonData.length} EA.`);
- return stts;
- }
- // RSE
- function recvRseInfo(AJsonData) {
- //console.log("recvRseInfo: " + AJsonData.length + " EA.");
- _mapManager.makeLayer(LayerIndex.Rse, AJsonData);
- //requestGet("/api/utis/stts/rse", recvRseSttsInfo); // 상태정보 요청
- }
- // RSE 상태
- function recvRseSttsInfo(AJsonData) {
- let stts = new FcltStts();
- const lyrInfo = _mapManager.getLayer(LayerIndex.Rse);
- if (lyrInfo == null) {
- return stts;
- }
- AJsonData.forEach((el, idx) => {
- const obj = lyrInfo.findObject(el.fclt_id);
- if (obj) {
- stts.total++;
- const sttsCd = el.stts_cd.slice(-1);
- if (Number(sttsCd) == 0) {
- stts.normal++;
- }
- obj.updateStts(el.stts_cd, el.updt_dt);
- }
- });
- stts.error = stts.total - stts.normal;
- //console.log(`${nowTime()} recvRseSttsInfo: ${AJsonData.length} EA.`);
- // 시설물 상태정보 요청 타이머 설정
- //_timerLoadingFcltStts = window.setTimeout(function() {
- // loadingFcltStts();
- //}, (60 * 1000));
- return stts;
- }
- // Park
- function recvParkInfo(AJsonData) {
- //console.log("recvParkInfo: " + AJsonData.length + " EA.");
- _mapManager.makeLayer(LayerIndex.Park, AJsonData);
- }
- // BIT
- // function recvBitInfo(AJsonData) {
- // console.log("recvBitInfo: " + AJsonData.length + " EA.");
- // _mapManager.makeLayer(LayerIndex.Bit, AJsonData);
- // }
- // function recvBitSttsInfo(AJsonData) {
- // let stts = new FcltStts();
- // const lyrInfo = _mapManager.getLayer(LayerIndex.Bit);
- // if (lyrInfo == null) {
- // return stts;
- // }
- // AJsonData.forEach((el, idx) => {
- // const obj = lyrInfo.findObject(el.fclt_id);
- // if (obj) {
- // stts.total++;
- // const sttsCd = el.stts_cd.slice(-1);
- // if (Number(sttsCd) == 0) {
- // stts.normal++;
- // }
- // obj.updateStts(el.stts_cd, el.updt_dt);
- // }
- // });
- // stts.error = stts.total - stts.normal;
- // console.log(`${nowTime()} recvBitSttsInfo: ${AJsonData.length} EA.`);
- // 시설물 상태정보 요청 타이머 설정
- //_timerLoadingFcltStts = window.setTimeout(function() {
- // loadingFcltStts();
- //}, (60 * 1000));
- // return stts;
- // }
- window.selectLink = function selectLink(linkId) {
- const map = _mapManager.getInfo();
- let lyrIdx = LayerIndex.Link2;
- let zoom = map.zoom;
- if (map.zoom == 16) {
- lyrIdx = LayerIndex.Link1;
- }
- else if (map.zoom >= 17) {
- lyrIdx = LayerIndex.Link2;
- }
- else {
- zoom = 17;
- lyrIdx = LayerIndex.Link2;
- }
- _mapManager.selectLayerObject(lyrIdx, linkId, zoom);
- }
|