|
@@ -39,12 +39,30 @@ $(document).ready(function () {
|
|
|
init();
|
|
|
});
|
|
|
|
|
|
+let sigData =
|
|
|
+ {
|
|
|
+ service_id : 1,
|
|
|
+ seq_no : 1,
|
|
|
+ node_id : 1,
|
|
|
+ ring : 1,
|
|
|
+ head_lat : 126.5169020,
|
|
|
+ head_lng : 33.2475970,
|
|
|
+ mid_lat : 126.5170416,
|
|
|
+ mid_lng : 33.2475840,
|
|
|
+ end_lat : 126.5170395,
|
|
|
+ end_lng : 33.2474713
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
function init() {
|
|
|
//정보관리창 닫을때 regionCd intNo 가저와서 해당 위치로 이동..
|
|
|
var masterLng = sessionStorage.getItem('masterLng');
|
|
|
var masterLat = sessionStorage.getItem('masterLat');
|
|
|
- var lat = 35.871595504565676;
|
|
|
- var lng = 128.601612749012;
|
|
|
+ //var lat = 35.871595504565676;
|
|
|
+ //var lng = 128.601612749012;
|
|
|
+ var lat = '37.5630934';
|
|
|
+ var lng = '126.9752351';
|
|
|
|
|
|
if (masterLng != null && masterLat != null) {
|
|
|
lat = masterLat;
|
|
@@ -54,11 +72,12 @@ function init() {
|
|
|
mapContainer = document.getElementById('map') // 지도를 표시할 div
|
|
|
var mapOption = {
|
|
|
center: new kakao.maps.LatLng(lat, lng),
|
|
|
- level: _Level
|
|
|
+ level: _Level,
|
|
|
+ maxLevel : 11,
|
|
|
};
|
|
|
|
|
|
map = new kakao.maps.Map(mapContainer, mapOption); // 지도생성
|
|
|
- map.setMaxLevel(11);
|
|
|
+ // map.setMaxLevel(11);
|
|
|
// 지도와 스카이뷰 지도타입 컨트롤을 생성
|
|
|
var mapTypeControl = new kakao.maps.MapTypeControl();
|
|
|
// 지도에 컨트롤을 추가해야 지도위에 표시됩니다
|
|
@@ -71,6 +90,8 @@ function init() {
|
|
|
// 신호현시 줌,이동 이벤트 분리
|
|
|
kakao.maps.event.addListener(map, 'zoom_changed', mapZoomBound);
|
|
|
kakao.maps.event.addListener(map, 'dragend', mapMoveBound);//드래그 종료시 이벤트발생
|
|
|
+ kakao.maps.event.addListener(map, 'rightclick', mapRightClick);//드래그 종료시 이벤트발생
|
|
|
+ kakao.maps.event.addListener(map, 'click', mapClick);//드래그 종료시 이벤트발생
|
|
|
//kakao.maps.event.addListener(map, 'idle', mapIdle);
|
|
|
|
|
|
/* // 맵클릭했을때 위도경도 찾기
|
|
@@ -79,7 +100,313 @@ function init() {
|
|
|
console.log(nowlatLng);
|
|
|
});*/
|
|
|
|
|
|
- getSignalInfo();
|
|
|
+ //getSignalInfo();
|
|
|
+ // const worker = new Worker('/js/worker.js');
|
|
|
+ // worker.postMessage({message:"worker START"});
|
|
|
+ // worker.onmessage = (ev)=>{
|
|
|
+ // const data = JSON.parse(ev.data);
|
|
|
+ // console.log(data);
|
|
|
+ // }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+let coordMarker;
|
|
|
+function mapRightClick(e) {
|
|
|
+ if (!$('.road_on')[0]) {
|
|
|
+ if (coordMarker) {
|
|
|
+ coordMarker.close();
|
|
|
+ }
|
|
|
+ const textArea = $('<textarea>');
|
|
|
+ let xCoordinate = e.latLng.getLng().toString();
|
|
|
+ let yCoordinate = e.latLng.getLat().toString();
|
|
|
+
|
|
|
+ if (xCoordinate.length > 11) {
|
|
|
+ xCoordinate = xCoordinate.substring(0, 11);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (yCoordinate.length > 10) {
|
|
|
+ yCoordinate = yCoordinate.substring(0, 10);
|
|
|
+ }
|
|
|
+ const text = xCoordinate + "," + yCoordinate;
|
|
|
+ textArea.val(text);
|
|
|
+ $('body').append(textArea);
|
|
|
+ textArea[0].select();
|
|
|
+ document.execCommand("copy");
|
|
|
+ textArea.remove();
|
|
|
+ coordMarker = new kakao.maps.InfoWindow({
|
|
|
+ map: map,
|
|
|
+ position: e.latLng,
|
|
|
+ content: '<div style="width:150px; text-align: center;">' + text + '</div>',
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function mapClick(){
|
|
|
+ if (coordMarker) {
|
|
|
+ coordMarker.close();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function getKakaoPosition(y, x) {
|
|
|
+ return new kakao.maps.LatLng(y, x);
|
|
|
+}
|
|
|
+
|
|
|
+let testData = [
|
|
|
+ {
|
|
|
+ service_id : 1,
|
|
|
+ lat : 126.5240617,
|
|
|
+ lng : 33.2471400,
|
|
|
+ seq_no : 1,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ service_id : 1,
|
|
|
+ lat : 126.5229991,
|
|
|
+ lng : 33.2471900,
|
|
|
+ seq_no : 2,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ service_id : 1,
|
|
|
+ lat : 126.5210876,
|
|
|
+ lng : 33.2474622,
|
|
|
+ seq_no : 3,
|
|
|
+ },{
|
|
|
+ service_id : 1,
|
|
|
+ lat : 126.5191443,
|
|
|
+ lng : 33.2476711,
|
|
|
+ seq_no : 4,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ service_id : 1,
|
|
|
+ lat : 126.5167390,
|
|
|
+ lng : 33.2479593,
|
|
|
+ seq_no : 5,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ service_id : 1,
|
|
|
+ lat : 126.5141087,
|
|
|
+ lng : 33.2482105,
|
|
|
+ seq_no : 7,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ service_id : 2,
|
|
|
+ lat : 126.5141180,
|
|
|
+ lng : 33.2479716,
|
|
|
+ seq_no : 1,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ service_id : 2,
|
|
|
+ lat : 126.5141180,
|
|
|
+ lng : 33.2479716,
|
|
|
+ seq_no : 2,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ service_id : 2,
|
|
|
+ lat : 126.5154815,
|
|
|
+ lng : 33.2478417,
|
|
|
+ seq_no : 3,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ service_id : 2,
|
|
|
+ lat : 126.5169955,
|
|
|
+ lng : 33.2476673,
|
|
|
+ seq_no : 4,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ service_id : 2,
|
|
|
+ lat : 126.5187242,
|
|
|
+ lng : 33.2474756,
|
|
|
+ seq_no : 5,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ service_id : 2,
|
|
|
+ lat : 126.5204636,
|
|
|
+ lng : 33.2472750,
|
|
|
+ seq_no : 6,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ service_id : 2,
|
|
|
+ lat : 126.5223642,
|
|
|
+ lng : 33.2470298,
|
|
|
+ seq_no : 7,
|
|
|
+ },{
|
|
|
+ service_id : 2,
|
|
|
+ lat : 126.5240712,
|
|
|
+ lng : 33.2468741,
|
|
|
+ seq_no : 8,
|
|
|
+ },
|
|
|
+]
|
|
|
+
|
|
|
+function emergencyEvent() {
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+function test() {
|
|
|
+ if (testData && testData.length) {
|
|
|
+ testData.sort((a,b)=>{
|
|
|
+ return a.service_id > b.service_id ? 1 : a.service_id < b.service_id ? -1 : a.seq_no > b.seq_no ? 1 : a.seq_no === b.seq_no ? 0 : -1
|
|
|
+ });
|
|
|
+ const objMap = new Map();
|
|
|
+ for (let data of testData) {
|
|
|
+ if (!objMap.get(data.service_id)) {
|
|
|
+ objMap.set(data.service_id, {service_id : data.service_id, coordinateArr : []});
|
|
|
+ }
|
|
|
+ objMap.get(data.service_id).coordinateArr.push({
|
|
|
+ lng : data.lng,
|
|
|
+ lat : data.lat,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ objMap.forEach((obj)=>{
|
|
|
+ const road = new emergencyRoad(obj);
|
|
|
+ road.init();
|
|
|
+ road.drawPolyLine();
|
|
|
+ road.setBound();
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function emergencySignal(data){
|
|
|
+ if ( data && data.length > 0 ) {
|
|
|
+ data.sort((a,b)=>{
|
|
|
+ return a.service_id > b.service_id ? 1 : a.service_id < b.service_id ? -1 : a.seq_no > b.seq_no ? 1 : a.seq_no === b.seq_no ? 0 : -1
|
|
|
+ });
|
|
|
+ let lineMap = new Map();
|
|
|
+ const bounds = new kakao.maps.LatLngBounds();
|
|
|
+ bounds.extend(getKakaoPosition(33.2471400, 126.5240617));
|
|
|
+ bounds.extend(getKakaoPosition(33.2482105,126.5141087));
|
|
|
+ map.setBounds(bounds);
|
|
|
+ const markerMap = new Map();
|
|
|
+ for (let obj of data) {
|
|
|
+ const position = getKakaoPosition(obj.lng, obj.lat);
|
|
|
+ if (!lineMap.get(obj.service_id)) {
|
|
|
+ lineMap.set(obj.service_id, []);
|
|
|
+ let markImage = new kakao.maps.MarkerImage(
|
|
|
+ '/images/car.svg',
|
|
|
+ new kakao.maps.Size(32, 39), {
|
|
|
+ offset: new kakao.maps.Point(16, 39)
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ const marker = new kakao.maps.Marker({
|
|
|
+ image: markImage,
|
|
|
+ position: position,
|
|
|
+ });
|
|
|
+ markerMap.set(obj.service_id, marker);
|
|
|
+ }
|
|
|
+
|
|
|
+ lineMap.get(obj.service_id).push(position);
|
|
|
+ }
|
|
|
+ let polyMap = new Map();
|
|
|
+ lineMap.forEach((position, key)=>{
|
|
|
+ let backLine = new kakao.maps.Polyline({
|
|
|
+ path: position, // 선을 구성하는 좌표 배열입니다 클릭한 위치를 넣어줍니다
|
|
|
+ strokeWeight: 10, // 선의 두께입니다
|
|
|
+ strokeColor: '#ffffff', // 선의 색깔입니다
|
|
|
+ strokeOpacity: 1, // 선의 불투명도입니다 0에서 1 사이값이며 0에 가까울수록 투명합니다
|
|
|
+ strokeStyle: 'solid', // 선의 스타일입니다
|
|
|
+ zIndex: 1,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 선이 그려지고 있을 때 마우스 움직임에 따라 선이 그려질 위치를 표시할 선을 생성합니다
|
|
|
+ let polyline = new kakao.maps.Polyline({
|
|
|
+ strokeWeight: 8, // 선의 두께입니다
|
|
|
+ path: position,
|
|
|
+ strokeColor: '#3386ff', // 선의 색깔입니다
|
|
|
+ strokeOpacity: 1, // 선의 불투명도입니다 0에서 1 사이값이며 0에 가까울수록 투명합니다
|
|
|
+ strokeStyle: 'solid', // 선의 스타일입니다
|
|
|
+ zIndex: 2,
|
|
|
+ });
|
|
|
+ backLine.setMap(map);
|
|
|
+ polyline.setMap(map);
|
|
|
+ polyMap.set(key, [backLine, polyline]);
|
|
|
+ });
|
|
|
+
|
|
|
+ markerMap.forEach((marker, key)=>{
|
|
|
+ marker.setMap(map);
|
|
|
+ if (lineMap.get(key)) {
|
|
|
+ const arr = lineMap.get(key);
|
|
|
+ let cnt = 0;
|
|
|
+ const timer = setInterval(()=>{
|
|
|
+ if (arr[cnt]) {
|
|
|
+ marker.setPosition(arr[cnt++])
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ marker.setMap(null);
|
|
|
+ const polyArr = polyMap.get(key);
|
|
|
+ if (polyArr && polyArr.length === 2) {
|
|
|
+ polyArr[0].setMap(null);
|
|
|
+ polyArr[1].setMap(null);
|
|
|
+ }
|
|
|
+ clearInterval(timer);
|
|
|
+ }
|
|
|
+ }, 1000)
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function drawEmergencyRoad(serviceId) {
|
|
|
+ requestService('/getEvpList.do', {serviceId : serviceId}, (data)=>{
|
|
|
+ data.sort((a,b)=>{
|
|
|
+ return a.service_id > b.service_id ? 1 : a.service_id < b.service_id ? -1 : a.seq_no > b.seq_no ? 1 : a.seq_no === b.seq_no ? 0 : -1
|
|
|
+ });
|
|
|
+ let lineMap = new Map();
|
|
|
+ const bounds = new kakao.maps.LatLngBounds();
|
|
|
+ bounds.extend(getKakaoPosition(33.2471400, 126.5240617));
|
|
|
+ bounds.extend(getKakaoPosition(33.2482105,126.5141087));
|
|
|
+ map.setBounds(bounds);
|
|
|
+ const markerMap = new Map();
|
|
|
+ for (let obj of data) {
|
|
|
+ const position = getKakaoPosition(obj.lng, obj.lat);
|
|
|
+ if (!lineMap.get(obj.service_id)) {
|
|
|
+ lineMap.set(obj.service_id, []);
|
|
|
+ let markImage = new kakao.maps.MarkerImage(
|
|
|
+ '/images/car.svg',
|
|
|
+ new kakao.maps.Size(32, 39), {
|
|
|
+ //마커의 좌표에 해당하는 이미지의 위치를 설정합니다.
|
|
|
+ //이미지의 모양에 따라 값은 다를 수 있으나, 보통 width/2, height를 주면 좌표에 이미지의 하단 중앙이 올라가게 됩니다.
|
|
|
+ offset: new kakao.maps.Point(16, 39)
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ const marker = new kakao.maps.Marker({
|
|
|
+ image: markImage,
|
|
|
+ position: position,
|
|
|
+ });
|
|
|
+ markerMap.set(obj.service_id, marker);
|
|
|
+ }
|
|
|
+
|
|
|
+ lineMap.get(obj.service_id).push(position);
|
|
|
+ }
|
|
|
+ let polyMap = new Map();
|
|
|
+ lineMap.forEach((position, key)=>{
|
|
|
+ let backLine = new kakao.maps.Polyline({
|
|
|
+ path: position, // 선을 구성하는 좌표 배열입니다 클릭한 위치를 넣어줍니다
|
|
|
+ strokeWeight: 10, // 선의 두께입니다
|
|
|
+ strokeColor: '#ffffff', // 선의 색깔입니다
|
|
|
+ strokeOpacity: 1, // 선의 불투명도입니다 0에서 1 사이값이며 0에 가까울수록 투명합니다
|
|
|
+ strokeStyle: 'solid', // 선의 스타일입니다
|
|
|
+ zIndex: 1,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 선이 그려지고 있을 때 마우스 움직임에 따라 선이 그려질 위치를 표시할 선을 생성합니다
|
|
|
+ let polyline = new kakao.maps.Polyline({
|
|
|
+ strokeWeight: 8, // 선의 두께입니다
|
|
|
+ path: position,
|
|
|
+ strokeColor: '#3386ff', // 선의 색깔입니다
|
|
|
+ strokeOpacity: 1, // 선의 불투명도입니다 0에서 1 사이값이며 0에 가까울수록 투명합니다
|
|
|
+ strokeStyle: 'solid', // 선의 스타일입니다
|
|
|
+ zIndex: 2,
|
|
|
+ });
|
|
|
+ backLine.setMap(map);
|
|
|
+ polyline.setMap(map);
|
|
|
+ polyMap.set(key, [backLine, polyline]);
|
|
|
+ });
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+function moveMarker(position, marker) {
|
|
|
+ marker.setCenter(position);
|
|
|
}
|
|
|
|
|
|
function customOverlayFnc(intNm, xCoord, yCoord) {
|
|
@@ -303,13 +630,13 @@ function getRoadView() {
|
|
|
|
|
|
//로드뷰에서 X버튼을 눌렀을 때 로드뷰를 지도 뒤로 숨기는 함수입니다
|
|
|
function closeRoadview() {
|
|
|
- //$('#mapWrapper').css('width','100%');
|
|
|
- var width = wideFlag ? 'calc(100% - 10px)':'calc(100% - 338px)';
|
|
|
+ const width = wideFlag ? 'calc(100% - 10px)':'calc(100% - 338px)';
|
|
|
$('#mapWrapper').css('width', width);
|
|
|
- //$('#rvWrapper').css('width','0px');
|
|
|
$('#rvWrapper').css('display','none');
|
|
|
+
|
|
|
// 지도의 크기가 변경되었기 때문에 relayout 함수를 호출합니다
|
|
|
map.relayout();
|
|
|
+
|
|
|
// 현재 마커가 놓인 자리의 좌표입니다
|
|
|
if(roadviewMarker != null)
|
|
|
{
|
|
@@ -1200,4 +1527,242 @@ function toggleSiginfo() {
|
|
|
if (customOverlay != null) customOverlay.setMap(null);
|
|
|
} else _ToggleSiginfo = false;
|
|
|
getSignalInfo();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/****************************************************************************
|
|
|
+ * 좌표검색
|
|
|
+ ****************************************************************************/
|
|
|
+function moveToPosition() {
|
|
|
+ const $lctnX = $('#lctn_x_coord');
|
|
|
+ const $lctnY = $('#lctn_y_coord');
|
|
|
+ var xCrdn = $lctnX.val();
|
|
|
+ var yCrdn = $lctnY.val();
|
|
|
+ if (!xCrdn) {
|
|
|
+ alert("X 좌표 값을 입력해주세요.");
|
|
|
+ return $lctnX.focus();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!yCrdn) {
|
|
|
+ alert("Y 좌표 값을 입력해주세요.");
|
|
|
+ return $lctnY.focus();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isNaN(Number(xCrdn)) || xCrdn.length < 3) {
|
|
|
+ alert("X 좌표 : "+xCrdn+"\n부적절한 좌표값입니다. 다시 입력해주세요.");
|
|
|
+ return $lctnX.focus();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isNaN(Number(yCrdn)) || yCrdn.lenth < 2) {
|
|
|
+ alert("Y 좌표 : "+yCrdn+"\n부적절한 좌표값입니다. 다시 입력해주세요.");
|
|
|
+ return $lctnY.focus();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!xCrdn.includes('.')) {
|
|
|
+ xCrdn = xCrdn.substring(0, 3) + '.' + xCrdn.substring(3, xCrdn.length);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!yCrdn.includes('.')) {
|
|
|
+ yCrdn = yCrdn.substring(0, 2) + '.' + yCrdn.substring(2, yCrdn.length);
|
|
|
+ }
|
|
|
+ const position = new kakao.maps.LatLng(yCrdn, xCrdn);
|
|
|
+ map.setCenter(position);
|
|
|
+ map.setLevel(3);
|
|
|
+ mapZoomBound();
|
|
|
+}
|
|
|
+
|
|
|
+class emergencyRoad{
|
|
|
+ constructor({service_id, coordinateArr}) {
|
|
|
+ this.service_id = service_id;
|
|
|
+ this.coordinateArr = coordinateArr;
|
|
|
+ this.backPoly = null;
|
|
|
+ this.polyLine = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ init() {
|
|
|
+ if (this.coordinateArr && this.coordinateArr.length > 0) {
|
|
|
+ let lineArr = [];
|
|
|
+ for (let coordinate of this.coordinateArr) {
|
|
|
+ lineArr.push(getKakaoPosition(coordinate.lng, coordinate.lat));
|
|
|
+ }
|
|
|
+ this.backPoly = new kakao.maps.Polyline({
|
|
|
+ path: lineArr, // 선을 구성하는 좌표 배열입니다 클릭한 위치를 넣어줍니다
|
|
|
+ strokeWeight: 10, // 선의 두께입니다
|
|
|
+ strokeColor: '#ffffff', // 선의 색깔입니다
|
|
|
+ strokeOpacity: 1, // 선의 불투명도입니다 0에서 1 사이값이며 0에 가까울수록 투명합니다
|
|
|
+ strokeStyle: 'solid', // 선의 스타일입니다
|
|
|
+ zIndex: 1,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 선이 그려지고 있을 때 마우스 움직임에 따라 선이 그려질 위치를 표시할 선을 생성합니다
|
|
|
+ this.polyLine = new kakao.maps.Polyline({
|
|
|
+ strokeWeight: 8, // 선의 두께입니다
|
|
|
+ path: lineArr,
|
|
|
+ strokeColor: '#3386ff', // 선의 색깔입니다
|
|
|
+ strokeOpacity: 1, // 선의 불투명도입니다 0에서 1 사이값이며 0에 가까울수록 투명합니다
|
|
|
+ strokeStyle: 'solid', // 선의 스타일입니다
|
|
|
+ zIndex: 2,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ drawPolyLine() {
|
|
|
+ if (this.polyLine && this.backPoly) {
|
|
|
+ this.polyLine.setMap(map);
|
|
|
+ this.backPoly.setMap(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ hidePolyLine() {
|
|
|
+ if (this.polyLine && this.backPoly) {
|
|
|
+ this.polyLine.setMap(null);
|
|
|
+ this.backPoly.setMap(null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ setBound() {
|
|
|
+ const bounds = new kakao.maps.LatLngBounds();
|
|
|
+ const lastIdx = this.coordinateArr.length - 1;
|
|
|
+ bounds.extend(getKakaoPosition( this.coordinateArr[0].lng, this.coordinateArr[0].lat));
|
|
|
+ bounds.extend(getKakaoPosition(this.coordinateArr[lastIdx].lng, this.coordinateArr[lastIdx].lat));
|
|
|
+ map.setBounds(bounds);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const stateMap = new Map();
|
|
|
+stateMap.set(0, '#FF0000');
|
|
|
+stateMap.set(1, '#00FF00');
|
|
|
+stateMap.set(2, '#FFFF00');
|
|
|
+stateMap.set(3, '#808080');
|
|
|
+stateMap.set(4, '#CC6600');
|
|
|
+stateMap.set(5, '#9933FF');
|
|
|
+
|
|
|
+// 1~5 레발 까지만 보임
|
|
|
+// 통신 이상 : 0 (#FF0000, 빨강), 정상 : 1 (#00FF00, 초록), 점멸 : 2 (#FFFF00, 노랑), 소등 : 3 (#808080, 회색), 수동진행 : 4 (#CC6600, 갈색), 현시 유지 : 5 (#9933FF, 보라)
|
|
|
+class Ring{
|
|
|
+ constructor({service_id, seq_no, node_id, ring, phase_no, plan_class, flow_no, head_lat, head_lng, mid_lat, mid_lng, end_lat, end_lng, head_angle, end_angle, state}) {
|
|
|
+ this.service_id = service_id;
|
|
|
+ this.seq_no = seq_no;
|
|
|
+ this.node_id = node_id;
|
|
|
+ this.ring = ring;
|
|
|
+ this.phase_no = phase_no;
|
|
|
+ this.plan_class = plan_class;
|
|
|
+ this.flow_no = flow_no;
|
|
|
+ this.head_lat = head_lat;
|
|
|
+ this.head_lng = head_lng;
|
|
|
+ this.mid_lat = mid_lat;
|
|
|
+ this.mid_lng = mid_lng;
|
|
|
+ this.end_lat = end_lat;
|
|
|
+ this.end_lng = end_lng;
|
|
|
+ this.head_angle = head_angle;
|
|
|
+ this.end_angle = end_angle;
|
|
|
+ this.state = state;
|
|
|
+ }
|
|
|
+
|
|
|
+ init() {
|
|
|
+ const headPosition = getKakaoPosition(this.head_lng, this.head_lat);
|
|
|
+ const midPosition = getKakaoPosition(this.mid_lng, this.mid_lat);
|
|
|
+ const endPosition = getKakaoPosition(this.end_lng, this.end_lat);
|
|
|
+ let stateColor = '#FF0000';
|
|
|
+ if (!isNaN(Number(this.state))) {
|
|
|
+ stateColor = stateMap.get(Number(this.state));
|
|
|
+ }
|
|
|
+ // 선이 그려지고 있을 때 마우스 움직임에 따라 선이 그려질 위치를 표시할 선을 생성합니다
|
|
|
+ this.polyLine = new kakao.maps.Polyline({
|
|
|
+ strokeWeight: 5, // 선의 두께입니다
|
|
|
+ path: [headPosition, midPosition, endPosition],
|
|
|
+ strokeColor: stateColor, // 선의 색깔입니다
|
|
|
+ strokeOpacity: 1, // 선의 불투명도입니다 0에서 1 사이값이며 0에 가까울수록 투명합니다
|
|
|
+ strokeStyle: 'solid', // 선의 스타일입니다
|
|
|
+ endArrow : true,
|
|
|
+ zIndex: 2,
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ drawLine() {
|
|
|
+ if (this.polyLine) {
|
|
|
+ this.polyLine.setMap(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ hideLine() {
|
|
|
+ if (this.polyLine) {
|
|
|
+ this.polyLine.setMap(null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ setPath(pathArr) {
|
|
|
+ if (this.polyLine) {
|
|
|
+ this.polyLine.setPath(pathArr);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ setOptions(option) {
|
|
|
+ if (this.polyLine) {
|
|
|
+ this.polyLine.setOptions(option);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+class Sig{
|
|
|
+ constructor({clct_dt, service_id, node_id, node_nm, lat, lng, seq_no, rem_dist, state, plan_class, a_ring_phase, b_ring_phase, hold_phase}) {
|
|
|
+ this.clct_dt = clct_dt;
|
|
|
+ this.service_id = service_id;
|
|
|
+ this.node_id = node_id;
|
|
|
+ this.node_nm = node_nm;
|
|
|
+ this.lat = lat;
|
|
|
+ this.lng = lng;
|
|
|
+ this.seq_no = seq_no;
|
|
|
+ this.rem_dist = rem_dist;
|
|
|
+ this.state = state;
|
|
|
+ this.plan_class = plan_class;
|
|
|
+ this.a_ring_phase = a_ring_phase;
|
|
|
+ this.b_ring_phase = b_ring_phase;
|
|
|
+ this.hold_phase = hold_phase;
|
|
|
+ this.a_ring = null;
|
|
|
+ this.b_ring = null;
|
|
|
+ this.marker = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ init() {
|
|
|
+ let stateColor = '#FF0000';
|
|
|
+ if (!isNaN(Number(this.state))) {
|
|
|
+ stateColor = stateMap.get(Number(this.state));
|
|
|
+ }
|
|
|
+ this.marker = new kakao.maps.Circle({
|
|
|
+ center : getKakaoPosition(this.lng, this.lat), // 원의 중심좌표 입니다
|
|
|
+ radius: 50, // 미터 단위의 원의 반지름입니다
|
|
|
+ strokeWeight: 5, // 선의 두께입니다
|
|
|
+ strokeColor: stateColor, // 선의 색깔입니다
|
|
|
+ strokeOpacity: 1, // 선의 불투명도 입니다 1에서 0 사이의 값이며 0에 가까울수록 투명합니다
|
|
|
+ strokeStyle: 'solid', // 선의 스타일 입니다
|
|
|
+ fillColor: stateColor, // 채우기 색깔입니다
|
|
|
+ fillOpacity: 0.7, // 채우기 불투명도 입니다
|
|
|
+ zIndex: 1
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ drawMarker() {
|
|
|
+ this.marker.setMap(map);
|
|
|
+ if (this.a_ring) {
|
|
|
+ this.a_ring.setMap(map);
|
|
|
+ }
|
|
|
+ if (this.b_ring) {
|
|
|
+ this.b_ring.setMap(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ hideMarker() {
|
|
|
+ this.marker.setMap(null);
|
|
|
+ if (this.a_ring) {
|
|
|
+ this.a_ring.setMap(null);
|
|
|
+ }
|
|
|
+ if (this.b_ring) {
|
|
|
+ this.b_ring.setMap(null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ setCenter() {
|
|
|
+ map.setCenter(getKakaoPosition(this.lng, this.lat));
|
|
|
+ }
|
|
|
}
|