Showing
3 changed files
with
71 additions
and
22 deletions
1 | -## Topic | 1 | +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) |
2 | -> 코로나 19 예방접종 의료기관 조회 웹서비스를 제공하는 프로젝트입니다. | 2 | + |
3 | +## 🔍 About the Project | ||
4 | +> 현재 코로나19로 인해 얼마전부터 위탁의료기관을 통한 신종 코로나바이러스 감염증(코로나19) 접종이 본격 시작되었습니다. | ||
5 | +이에 따라, 원하는 지역의 예방접종 위탁의료기관을 간편하게 조회할 수 있는 서비스를 개발하였습니다. | ||
6 | +이 프로젝트는 매 정각 1번씩 갱신되고 있는 위탁의료기관의 정보 데이터를 기반으로 제공합니다. | ||
7 | + | ||
8 | +## 💻 User Interface | ||
9 | +<img src="/uploads/c003a2a8d20b368d3c0fb07c49007251/UI예시.png" width="800" height="400"> | ||
10 | + | ||
11 | + | ||
12 | +## 📋 기술 스택 | ||
13 | +- Nodejs | ||
14 | +- Html | ||
15 | +- Css | ||
16 | +- JavaScript | ||
17 | +- Express | ||
18 | +- AWS EC2 | ||
3 | 19 | ||
4 | -## Member | 20 | + |
21 | +## ✏️ 프로젝트 사용 방법 | ||
22 | +1. cloning | ||
23 | +``` | ||
24 | +http://khuhub.khu.ac.kr/2018103585/Corona_Vaccination_Medical_Institution.git | ||
25 | +``` | ||
26 | + | ||
27 | +2. install npm packages | ||
28 | +``` | ||
29 | +npm install | ||
30 | +``` | ||
31 | +3. add API key | ||
32 | +> Fill {} with API Key | ||
33 | +``` | ||
34 | +const $key = '{Corona Vaccination Medical Institution API key}' (app.js) | ||
35 | +``` | ||
36 | +``` | ||
37 | +<script type="text/javascript" src="https://dapi.kakao.com/v2/maps/sdk.js?appkey={Kakao map API Key}&libraries=services"></script> (index.ejs) | ||
38 | +``` | ||
39 | +4. Execute | ||
40 | +``` | ||
41 | +node app.js | ||
42 | +``` | ||
43 | + | ||
44 | +## 💻 Project Architecture | ||
45 | +<img src="/uploads/abc7fb1cd4ee2ab997956e529c24670e/프로젝트아키텍쳐.png" width="800" height="400"> | ||
46 | + | ||
47 | + | ||
48 | + | ||
49 | +## ✨ Contributors | ||
50 | + | ||
5 | | 김서연 | 허재경 | | 51 | | 김서연 | 허재경 | |
6 | | :----: | :----: | | 52 | | :----: | :----: | |
7 | | [@ksy991018](https://github.com/ksy991018) | [@JaeKyungHeo](https://github.com/JaeKyungHeo) | | 53 | | [@ksy991018](https://github.com/ksy991018) | [@JaeKyungHeo](https://github.com/JaeKyungHeo) | | ... | ... |
... | @@ -24,18 +24,14 @@ app.post('/',function(req,res,next){ | ... | @@ -24,18 +24,14 @@ app.post('/',function(req,res,next){ |
24 | 24 | ||
25 | request($api_url,function(err,response,body){ | 25 | request($api_url,function(err,response,body){ |
26 | if(err) throw err; | 26 | if(err) throw err; |
27 | - // console.log(body); | ||
28 | //data부분만 추출 | 27 | //data부분만 추출 |
29 | var obj = JSON.parse(body).data; | 28 | var obj = JSON.parse(body).data; |
30 | - // console.log(obj); | ||
31 | //검색한 지역 포함한 모든 data 담기 | 29 | //검색한 지역 포함한 모든 data 담기 |
32 | let searchList = obj.filter(searchList => { | 30 | let searchList = obj.filter(searchList => { |
33 | return searchList.orgZipaddr.includes(searchWord); | 31 | return searchList.orgZipaddr.includes(searchWord); |
34 | }); | 32 | }); |
35 | 33 | ||
36 | - // console.log(searchList); | ||
37 | //result라는 변수에 담아 결과 보내기 | 34 | //result라는 변수에 담아 결과 보내기 |
38 | - // var hey = searchList[0].orgZipaddr.split(','); | ||
39 | var timeList=[]; | 35 | var timeList=[]; |
40 | for(var i=0; i<searchList.length; i++){ //시간정보 파싱 | 36 | for(var i=0; i<searchList.length; i++){ //시간정보 파싱 |
41 | var eachtime=[]; | 37 | var eachtime=[]; |
... | @@ -77,9 +73,7 @@ app.post('/',function(req,res,next){ | ... | @@ -77,9 +73,7 @@ app.post('/',function(req,res,next){ |
77 | 73 | ||
78 | } | 74 | } |
79 | res.render('index', {result:JSON.stringify(searchList),info:searchList ,timeList:timeList}); | 75 | res.render('index', {result:JSON.stringify(searchList),info:searchList ,timeList:timeList}); |
80 | - | ||
81 | }) | 76 | }) |
82 | - | ||
83 | }) | 77 | }) |
84 | 78 | ||
85 | app.get('/',function(req,res){ | 79 | app.get('/',function(req,res){ |
... | @@ -90,3 +84,5 @@ app.listen(3000,function(){ | ... | @@ -90,3 +84,5 @@ app.listen(3000,function(){ |
90 | console.log('Connected 3000 port!'); | 84 | console.log('Connected 3000 port!'); |
91 | }); | 85 | }); |
92 | 86 | ||
87 | + | ||
88 | + | ... | ... |
... | @@ -3,7 +3,6 @@ | ... | @@ -3,7 +3,6 @@ |
3 | <head> | 3 | <head> |
4 | <meta charset="utf-8"> | 4 | <meta charset="utf-8"> |
5 | <title>코로나 백신 의료기관 조회</title> | 5 | <title>코로나 백신 의료기관 조회</title> |
6 | - | ||
7 | <%if(typeof(info)!="undefined"){%> | 6 | <%if(typeof(info)!="undefined"){%> |
8 | <script> | 7 | <script> |
9 | try { | 8 | try { |
... | @@ -18,7 +17,8 @@ | ... | @@ -18,7 +17,8 @@ |
18 | </head> | 17 | </head> |
19 | <body> | 18 | <body> |
20 | <center> | 19 | <center> |
21 | - <h1 style="font-family:verdana;font-weight:bold; ">COVID-19 예방접종 위탁 의료기관 조회</h1> <hr> | 20 | + <h1 style="font-family:verdana;">COVID-19 예방접종 위탁 의료기관 조회</h1> <hr> |
21 | + | ||
22 | <form action="/" method="post"> | 22 | <form action="/" method="post"> |
23 | <p> | 23 | <p> |
24 | <div style="float:right; width:40%; margin-bottom:10px; margin-right: 5px;"> | 24 | <div style="float:right; width:40%; margin-bottom:10px; margin-right: 5px;"> |
... | @@ -28,11 +28,10 @@ | ... | @@ -28,11 +28,10 @@ |
28 | </p> | 28 | </p> |
29 | </form> | 29 | </form> |
30 | </center> | 30 | </center> |
31 | - | ||
32 | - <script type="text/javascript" src="https://dapi.kakao.com/v2/maps/sdk.js?appkey=35fccf4b4e2a3179187346f26ed3f988&libraries=services"></script> | ||
33 | 31 | ||
34 | - <% if(typeof(info) != "undefined"){ %> | 32 | + <script type="text/javascript" src="https://dapi.kakao.com/v2/maps/sdk.js?appkey=35fccf4b4e2a3179187346f26ed3f988&libraries=services"></script> |
35 | - <div id="map" style="width:65%;height:550px;float:left; margin-left: 2%; border-radius: 2%; border:1px solid black" ></div> | 33 | + <% if(typeof(info) != "undefined"){ %> |
34 | + <div id="map" style="width:65%;height:550px;float:left; margin-left: 2%; border-radius: 2%; border:1px solid black" ></div> | ||
36 | <div style="overflow:scroll; width:25%; height:550px;float:left; margin-left:2%; border:1px solid black;"> | 35 | <div style="overflow:scroll; width:25%; height:550px;float:left; margin-left:2%; border:1px solid black;"> |
37 | <ol id="placelist"> | 36 | <ol id="placelist"> |
38 | <% for(i=0; i<info.length; i++){%> | 37 | <% for(i=0; i<info.length; i++){%> |
... | @@ -44,7 +43,6 @@ | ... | @@ -44,7 +43,6 @@ |
44 | <%}else { %> | 43 | <%}else { %> |
45 | <span style="color:green"> (정상운영) </span> | 44 | <span style="color:green"> (정상운영) </span> |
46 | <%}%> | 45 | <%}%> |
47 | - | ||
48 | <br> | 46 | <br> |
49 | <% if(timeList[i][0]!="" && timeList[i][1]!="" && timeList[i][2]!="" && timeList[i][3]!=""){%> | 47 | <% if(timeList[i][0]!="" && timeList[i][1]!="" && timeList[i][2]!="" && timeList[i][3]!=""){%> |
50 | <span>점심시간 : <%=timeList[i][0]%>:<%=timeList[i][1]%>~<%=timeList[i][2]%>:<%=timeList[i][3] %></span><br> | 48 | <span>점심시간 : <%=timeList[i][0]%>:<%=timeList[i][1]%>~<%=timeList[i][2]%>:<%=timeList[i][3] %></span><br> |
... | @@ -60,14 +58,14 @@ | ... | @@ -60,14 +58,14 @@ |
60 | <%} %> | 58 | <%} %> |
61 | </ol> | 59 | </ol> |
62 | </div> | 60 | </div> |
63 | - <%} %> | 61 | + <%}%> |
64 | 62 | ||
65 | <% if(typeof(result) != "undefined"){ %> | 63 | <% if(typeof(result) != "undefined"){ %> |
66 | <script> | 64 | <script> |
67 | var mapContainer = document.getElementById('map'), // 지도를 표시할 div | 65 | var mapContainer = document.getElementById('map'), // 지도를 표시할 div |
68 | mapOption = { | 66 | mapOption = { |
69 | center: new kakao.maps.LatLng(37.596672, 127.051950), // 지도의 중심좌표 | 67 | center: new kakao.maps.LatLng(37.596672, 127.051950), // 지도의 중심좌표 |
70 | - level: 2 // 지도의 확대 레벨 | 68 | + level: 3 // 지도의 확대 레벨 |
71 | }; | 69 | }; |
72 | 70 | ||
73 | var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다 | 71 | var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다 |
... | @@ -81,7 +79,6 @@ | ... | @@ -81,7 +79,6 @@ |
81 | listData = JSON.parse(listData); | 79 | listData = JSON.parse(listData); |
82 | 80 | ||
83 | var count = 0; | 81 | var count = 0; |
84 | - | ||
85 | //입력되는 배열명이 listData로 들어오면 됨. | 82 | //입력되는 배열명이 listData로 들어오면 됨. |
86 | listData.forEach(function(addr, index) { | 83 | listData.forEach(function(addr, index) { |
87 | var tmpaddr = ((addr.orgZipaddr).split(','))[0]; | 84 | var tmpaddr = ((addr.orgZipaddr).split(','))[0]; |
... | @@ -91,7 +88,6 @@ | ... | @@ -91,7 +88,6 @@ |
91 | var coords = new kakao.maps.LatLng(result[0].y, result[0].x); | 88 | var coords = new kakao.maps.LatLng(result[0].y, result[0].x); |
92 | 89 | ||
93 | count += 1; | 90 | count += 1; |
94 | - | ||
95 | var marker = new kakao.maps.Marker({ | 91 | var marker = new kakao.maps.Marker({ |
96 | position: coords, | 92 | position: coords, |
97 | clickable: true | 93 | clickable: true |
... | @@ -128,7 +124,6 @@ | ... | @@ -128,7 +124,6 @@ |
128 | infowindow.close(); | 124 | infowindow.close(); |
129 | }; | 125 | }; |
130 | } | 126 | } |
131 | - | ||
132 | var infowindows = []; | 127 | var infowindows = []; |
133 | function displayinfowindow(address,name,flag){ | 128 | function displayinfowindow(address,name,flag){ |
134 | if(flag){ | 129 | if(flag){ |
... | @@ -136,7 +131,7 @@ | ... | @@ -136,7 +131,7 @@ |
136 | geocoder.addressSearch(tmpaddr, function(result, status) { | 131 | geocoder.addressSearch(tmpaddr, function(result, status) { |
137 | if (status === kakao.maps.services.Status.OK) { | 132 | if (status === kakao.maps.services.Status.OK) { |
138 | var coords = new kakao.maps.LatLng(result[0].y, result[0].x); | 133 | var coords = new kakao.maps.LatLng(result[0].y, result[0].x); |
139 | - map.setCenter(coords); | 134 | + map.setCenter(coords);//인포윈도우 생성 마커로 이동 |
140 | var marker = new kakao.maps.Marker({ | 135 | var marker = new kakao.maps.Marker({ |
141 | position: coords, | 136 | position: coords, |
142 | clickable: true | 137 | clickable: true |
... | @@ -156,6 +151,18 @@ | ... | @@ -156,6 +151,18 @@ |
156 | } | 151 | } |
157 | } | 152 | } |
158 | </script> | 153 | </script> |
154 | +<% }else{ %> | ||
155 | + <div id="map" style="width:90%;height:550px;float:left; margin-left: 2%; border-radius: 2%; border:1px solid black" ></div> | ||
156 | + <script>//입력 값이 없을 때 기본 지도 띄움 | ||
157 | + var mapContainer = document.getElementById('map'), // 지도를 표시할 div | ||
158 | + mapOption = { | ||
159 | + center: new kakao.maps.LatLng(37.596672, 127.051950), // 지도의 중심좌표 | ||
160 | + level: 3 // 지도의 확대 레벨 | ||
161 | + }; | ||
162 | + | ||
163 | + var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다 | ||
164 | + </script> | ||
165 | + | ||
159 | <% } %> | 166 | <% } %> |
160 | </body> | 167 | </body> |
161 | </html> | 168 | </html> |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment