최현영
...@@ -68,6 +68,16 @@ app.get('/construction', function(req, res){ ...@@ -68,6 +68,16 @@ app.get('/construction', function(req, res){
68 }) 68 })
69 }) 69 })
70 70
71 +app.get('/accident', function(req, res){
72 + jsonAccident(function(object){
73 + var obj = object;
74 + console.log(obj);
75 + res.render('mapaccident.ejs', {
76 + accidentjson:obj
77 + })
78 + })
79 +} )
80 +
71 function jsonforecast(callback){ //교통예보 81 function jsonforecast(callback){ //교통예보
72 var url2 = 'http://data.ex.co.kr/openapi/safeDriving/forecast'; 82 var url2 = 'http://data.ex.co.kr/openapi/safeDriving/forecast';
73 var queryParams2 = '?' + encodeURIComponent('key') + '=4365330273'; /* Service Key*/ 83 var queryParams2 = '?' + encodeURIComponent('key') + '=4365330273'; /* Service Key*/
...@@ -143,6 +153,22 @@ function jsonConstrunction(callback){ ...@@ -143,6 +153,22 @@ function jsonConstrunction(callback){
143 }); 153 });
144 } 154 }
145 155
156 +function jsonAccident(callback){
157 + var url5 = 'http://openapi.its.go.kr:8082/api/NIncidentIdentity?key=1590913608992&ReqType=2&MinX=127.100000&MaxX=128.890000&MinY=34.100000 &MaxY=39.100000&type=ex';
158 +
159 + request({
160 + url: url5,
161 + method:'GET'
162 + }, function (error, response, body){
163 + var result = body;
164 + var xmlToJson = convert.xml2json(result, {compact: true, spaces:4});
165 + xmlToJson = JSON.parse(xmlToJson);
166 + console.log(xmlToJson);
167 + console.log(typeof(xmlToJson));
168 + callback(xmlToJson);
169 + });
170 +}
171 +
146 app.use('/', router); 172 app.use('/', router);
147 173
148 function ishello(istext){ 174 function ishello(istext){
...@@ -173,6 +199,9 @@ function firstforecast(isforecast){ ...@@ -173,6 +199,9 @@ function firstforecast(isforecast){
173 else if (isforecast == '6'){ 199 else if (isforecast == '6'){
174 return true; 200 return true;
175 } 201 }
202 + else if (isforecast == '7'){
203 + return true;
204 + }
176 else { 205 else {
177 return false; 206 return false;
178 } 207 }
...@@ -409,8 +438,11 @@ app.post('/hook', function (req, res) { ...@@ -409,8 +438,11 @@ app.post('/hook', function (req, res) {
409 leadtime(eventObj); 438 leadtime(eventObj);
410 } 439 }
411 else if (message.text == '6'){ 440 else if (message.text == '6'){
412 - console.log('[request Order', message); 441 + console.log('[request Order]', message);
413 viewconstruction(eventObj); 442 viewconstruction(eventObj);
443 + }else if (message.text = '7'){
444 + console.log('[request Order]', message);
445 + viewaccident(eventObj);
414 } 446 }
415 } 447 }
416 448
...@@ -499,7 +531,7 @@ function helloworld(eventObj){ ...@@ -499,7 +531,7 @@ function helloworld(eventObj){
499 }, 531 },
500 { 532 {
501 "type":"text", 533 "type":"text",
502 - "text":"현재 교통 예보가 궁금하시다면 '1'을, 실시간 교통혼잡 상황을 보실려면 '2'을, 실시간 정체상황을 알고 싶다면 '3'을, 교통요금이 궁금하시다면 '4'을, 나들목간 통행평균시간이 궁금하시다면 '5'을, 실시간 공사 정보를 확인하고 싶으시면 '6'을 눌러주세요." 534 + "text":"현재 교통 예보가 궁금하시다면 '1'을, 실시간 교통혼잡 상황을 보실려면 '2'을, 실시간 정체상황을 알고 싶다면 '3'을, 교통요금이 궁금하시다면 '4'을, 나들목간 통행 평균시간이 궁금하시다면 '5'을, 실시간 공사 정보를 확인하고 싶으시면 '6'을, 실시간 사고 정보를 확인하고 싶으시다면 '7'을 입력해주세요."
503 }, 535 },
504 { 536 {
505 "type":"text", 537 "type":"text",
...@@ -554,6 +586,47 @@ function viewconstruction(eventObj){ ...@@ -554,6 +586,47 @@ function viewconstruction(eventObj){
554 { 586 {
555 "type":"text", 587 "type":"text",
556 "text":"https://www.chyoss.tk:23023/construction" 588 "text":"https://www.chyoss.tk:23023/construction"
589 + },
590 + {
591 + "type":"text",
592 + "text":"파란색 마커을 클릭하여 정보를 확인해 보세요!"
593 + },
594 + {
595 + "type":"text",
596 + "text":"파란색 마커가 표시되지 않는다면, 현재 공사중인 곳이 없다는 뜻입니다."
597 + }
598 + ]
599 + }
600 + },(error, response, body) => {
601 + console.log(body)
602 + });
603 +}
604 +
605 +function viewaccident(eventObj){
606 + request.post(
607 + {
608 + url: TARGET_URL,
609 + headers: {
610 + 'Authorization': `Bearer ${TOKEN}`
611 + },
612 + json: {
613 + "replyToken":eventObj.replyToken,
614 + "messages":[
615 + {
616 + "type":"text",
617 + "text":"실시간 고속국도 공사 상황 웹페이지로 안내합니다."
618 + },
619 + {
620 + "type":"text",
621 + "text":"https://www.chyoss.tk:23023/accident"
622 + },
623 + {
624 + "type":"text",
625 + "text":"파란색 마커를 클릭하여 정보를 확인해 보세요!"
626 + },
627 + {
628 + "type":"text",
629 + "text":"파란색 마커가 표시되지 않는다면, 현재 발생한 사고는 없다는 뜻입니다."
557 } 630 }
558 ] 631 ]
559 } 632 }
......
1 +<!DOCTYPE html>
2 +<html>
3 +<head>
4 + <meta charset="utf-8">
5 + <title>사고정보</title>
6 +
7 +</head>
8 +<body>
9 +<div id="map" style="width:100%; height:100%"></div>
10 +<style type="text/css"> html, body { height:100%; overflow:hidden } .h-div {height:96%; border:3px #f99 solid} </style>
11 +<div class="h-div"></div>
12 +<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=3ebfae70e971821ab8f14e074d068bdc"></script>
13 +<script>
14 + var mapContainer = document.getElementById('map'), // 지도를 표시할 div
15 + mapOption = {
16 + center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
17 + level: 12// 지도의 확대 레벨
18 + };
19 +
20 +var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다
21 +map.relayout();
22 +var json = <%- JSON.stringify(accidentjson) %>;
23 +console.log(json);
24 +
25 +var positions = new Array();
26 +for(var i = 0; i < json.response.data.length; i++){
27 + var x = parseFloat(json.response.data[i].coordx._text);
28 + var y = parseFloat(json.response.data[i].coordy._text);
29 + console.log(x);
30 + console.log(y);
31 + positions[i] = {
32 + content: json.response.data[i].incidentmsg._text,
33 + latlng: new kakao.maps.LatLng(y,x)
34 + }
35 +}
36 +
37 +// 마커를 표시할 위치와 내용을 가지고 있는 객체 배열입니다
38 +
39 +for (var i = 0; i < positions.length; i ++) {
40 + // 마커를 생성합니다
41 + var marker = new kakao.maps.Marker({
42 + map: map, // 마커를 표시할 지도
43 + position: positions[i].latlng, // 마커의 위치
44 + clickable: true
45 + });
46 +
47 + // 마커에 표시할 인포윈도우를 생성합니다
48 + var infowindow = new kakao.maps.InfoWindow({
49 + content: '<div>'+ positions[i].content + '</div>',
50 + removable: true // 인포윈도우에 표시할 내용
51 + });
52 +
53 + // 마커에 mouseover 이벤트와 mouseout 이벤트를 등록합니다
54 + // 이벤트 리스너로는 클로저를 만들어 등록합니다
55 + // for문에서 클로저를 만들어 주지 않으면 마지막 마커에만 이벤트가 등록됩니다
56 + kakao.maps.event.addListener(marker, 'click', makeClickListener(map, marker, infowindow));
57 + function makeClickListener(map, marker, infowindow) {
58 + return function() {
59 + infowindow.open(map, marker);
60 + };
61 + }
62 +
63 +}
64 +
65 +
66 +
67 +var imageSrc = 'https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png', // 마커이미지의 주소입니다
68 + imageSize = new kakao.maps.Size(40, 40), // 마커이미지의 크기입니다
69 + imageOption = {offset: new kakao.maps.Point(27, 69)};
70 +
71 + var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize, imageOption);
72 +
73 +// HTML5의 geolocation으로 사용할 수 있는지 확인합니다
74 +if (navigator.geolocation) {
75 +
76 + // GeoLocation을 이용해서 접속 위치를 얻어옵니다
77 + navigator.geolocation.getCurrentPosition(function(position) {
78 +
79 + var lat = position.coords.latitude, // 위도
80 + lon = position.coords.longitude; // 경도
81 +
82 + var locPosition = new kakao.maps.LatLng(lat, lon), // 마커가 표시될 위치를 geolocation으로 얻어온 좌표로 생성합니다
83 + message = '<div style="padding:5px;">여기에 계신가요?!</div>'; // 인포윈도우에 표시될 내용입니다
84 +
85 + // 마커와 인포윈도우를 표시합니다
86 + displayMarker(locPosition, message, markerImage);
87 +
88 + });
89 +
90 +} else { // HTML5의 GeoLocation을 사용할 수 없을때 마커 표시 위치와 인포윈도우 내용을 설정합니다
91 +
92 + var locPosition = new kakao.maps.LatLng(33.450701, 126.570667),
93 + message = 'geolocation을 사용할수 없어요..'
94 +
95 + displayMarker(locPosition, message);
96 +}
97 +
98 +// 지도에 마커와 인포윈도우를 표시하는 함수입니다
99 +function displayMarker(locPosition, message, image) {
100 +
101 + // 마커를 생성합니다
102 + var marker = new kakao.maps.Marker({
103 + map: map,
104 + position: locPosition,
105 + image: image
106 + });
107 +
108 + var iwContent = message, // 인포윈도우에 표시할 내용
109 + iwRemoveable = true;
110 +
111 + // 인포윈도우를 생성합니다
112 + var infowindow = new kakao.maps.InfoWindow({
113 + content : iwContent,
114 + removable : iwRemoveable
115 + });
116 +
117 + // 인포윈도우를 마커위에 표시합니다
118 + infowindow.open(map, marker);
119 +
120 + // 지도 중심좌표를 접속위치로 변경합니다
121 + map.setCenter(locPosition);
122 +}
123 +
124 +
125 +
126 +</script>
127 +</body>
128 +</html>
...\ No newline at end of file ...\ No newline at end of file
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
9 <div id="map" style="width:100%; height:100%"></div> 9 <div id="map" style="width:100%; height:100%"></div>
10 <style type="text/css"> html, body { height:100%; overflow:hidden } .h-div {height:96%; border:3px #f99 solid} </style> 10 <style type="text/css"> html, body { height:100%; overflow:hidden } .h-div {height:96%; border:3px #f99 solid} </style>
11 <div class="h-div"></div> 11 <div class="h-div"></div>
12 -<form method="get" action="/process/mapconstruction"></form> 12 +
13 <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=3ebfae70e971821ab8f14e074d068bdc"></script> 13 <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=3ebfae70e971821ab8f14e074d068bdc"></script>
14 <script> 14 <script>
15 var mapContainer = document.getElementById('map'), // 지도를 표시할 div 15 var mapContainer = document.getElementById('map'), // 지도를 표시할 div
......