김서연

지역 검색후 지도에 마커 띄우기

...@@ -3,10 +3,14 @@ var bodyParser = require('body-parser'); ...@@ -3,10 +3,14 @@ var bodyParser = require('body-parser');
3 var request = require('request'); 3 var request = require('request');
4 var cheerio = require('cheerio'); 4 var cheerio = require('cheerio');
5 var app =express(); 5 var app =express();
6 +app.set('view engine','ejs');
7 +app.set('views','./views')
6 app.use(express.urlencoded( {extended : false } )); 8 app.use(express.urlencoded( {extended : false } ));
9 +
7 app.locals.pretty=true; 10 app.locals.pretty=true;
8 -app.set('views','./views') 11 +
9 -app.set('view engine','pug'); 12 +// app.set('view engine','pug');
13 +
10 app.use(express.static('public')); 14 app.use(express.static('public'));
11 var http = require('http'); 15 var http = require('http');
12 var fs = require('fs'); 16 var fs = require('fs');
...@@ -26,7 +30,7 @@ app.post('/',function(req,res,next){ ...@@ -26,7 +30,7 @@ app.post('/',function(req,res,next){
26 30
27 request($api_url,function(err,response,body){ 31 request($api_url,function(err,response,body){
28 if(err) throw err; 32 if(err) throw err;
29 - 33 + // console.log(body);
30 //data부분만 추출 34 //data부분만 추출
31 var obj = JSON.parse(body).data; 35 var obj = JSON.parse(body).data;
32 // console.log(obj); 36 // console.log(obj);
...@@ -37,25 +41,27 @@ app.post('/',function(req,res,next){ ...@@ -37,25 +41,27 @@ app.post('/',function(req,res,next){
37 41
38 // console.log(searchList); 42 // console.log(searchList);
39 //result라는 변수에 담아 결과 보내기 43 //result라는 변수에 담아 결과 보내기
40 - res.render('main', {result:searchList }); 44 + var hey = searchList[0].orgZipaddr.split(',');
45 + res.render('index', {result:JSON.stringify(searchList) });
41 46
42 }) 47 })
43 48
44 }) 49 })
45 50
46 app.get('/',function(req,res){ 51 app.get('/',function(req,res){
47 - res.writeHead(200, {'Content-Type': 'text/html'}); 52 + res.render('index');
48 - fs.readFile('./map/kakaomap.html', null, function(err,data){ 53 + // res.writeHead(200, {'Content-Type': 'text/html'});
49 - if(err){ 54 + // fs.readFile('./map/kakaomap.html', null, function(err,data){
50 - res.writeHead(404); 55 + // if(err){
51 - res.write('error'); 56 + // res.writeHead(404);
52 - } 57 + // res.write('error');
53 - else{ 58 + // }
54 - console.log('complete!'); 59 + // else{
55 - res.write(data); 60 + // console.log('complete!');
56 - } 61 + // res.write(data);
57 - res.end(); 62 + // }
58 - }); 63 + // res.end();
64 + // });
59 }) 65 })
60 66
61 app.listen(3000,function(){ 67 app.listen(3000,function(){
......
...@@ -13,20 +13,106 @@ ...@@ -13,20 +13,106 @@
13 <input type="submit"/> 13 <input type="submit"/>
14 </p> 14 </p>
15 </form> 15 </form>
16 -<div id="map" style="width:700px;height:400px;"></div> 16 + <div id="map" style="width:700px;height:400px;"></div>
17 +
18 + <script type="text/javascript" src="https://dapi.kakao.com/v2/maps/sdk.js?appkey=35fccf4b4e2a3179187346f26ed3f988"></script>
19 +
17 20
18 -<script type="text/javascript" src="https://dapi.kakao.com/v2/maps/sdk.js?appkey=35fccf4b4e2a3179187346f26ed3f988"></script>
19 <script> 21 <script>
20 var mapContainer = document.getElementById('map'), // 지도를 표시할 div 22 var mapContainer = document.getElementById('map'), // 지도를 표시할 div
21 mapOption = { 23 mapOption = {
22 - center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표 24 + center: new kakao.maps.LatLng(37.596672, 127.051950), // 지도의 중심좌표
23 level: 3 // 지도의 확대 레벨 25 level: 3 // 지도의 확대 레벨
24 }; 26 };
25 27
26 var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다 28 var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다
27 29
28 -// 마커를 표시할 위치와 내용을 가지고 있는 객체 배열입니다 30 +
29 -var positions = [ 31 +
32 +// 지도 확대 축소를 제어할 수 있는 줌 컨트롤을 생성합니다
33 +var zoomControl = new kakao.maps.ZoomControl();
34 +map.addControl(zoomControl, kakao.maps.ControlPosition.RIGHT);
35 +
36 +var listData = "<%= result %>";
37 +console.log(listData[1]);
38 +//입력되는 배열명이 listData로 들어오면 됨.
39 +listData.forEach(function(addr, index) {
40 + var tmpaddr = addr[0].split(',');
41 + console.log(tmpaddr);
42 + geocoder.addressSearch(tmpaddr[0], function(result, status) {
43 + if (status === daum.maps.services.Status.OK) {
44 + var coords = new daum.maps.LatLng(result[0].y, result[0].x);
45 +
46 + var marker = new daum.maps.Marker({
47 + position: coords,
48 + clickable: true});
49 +
50 + // 마커를 지도에 표시합니다.
51 + marker.setMap(map);
52 +
53 + // 인포윈도우를 생성합니다
54 + var infowindow = new kakao.maps.InfoWindow({
55 + content: '<div style="width:150px;text-align:center;padding:6px 0;">' + addr[1] + '</div>',
56 + removable : true
57 + });
58 + // 마커에 클릭이벤트를 등록합니다
59 + kakao.maps.event.addListener(marker, 'click', function() {
60 + // 마커 위에 인포윈도우를 표시합니다
61 + infowindow.open(map, marker);
62 + });
63 + }
64 + });
65 +
66 +});
67 +
68 +
69 +
70 +
71 +// for (var i = 0; i < positions.length; i ++) {
72 +// // 마커를 생성합니다
73 +// var marker = new kakao.maps.Marker({
74 +// map: map, // 마커를 표시할 지도
75 +// position: positions[i].latlng // 마커의 위치
76 +// });
77 +
78 +// // 마커에 표시할 인포윈도우를 생성합니다
79 +// var infowindow = new kakao.maps.InfoWindow({
80 +// content: positions[i].content // 인포윈도우에 표시할 내용
81 +// });
82 +
83 +// // 마커에 mouseover 이벤트와 mouseout 이벤트를 등록합니다
84 +// // 이벤트 리스너로는 클로저를 만들어 등록합니다
85 +// // for문에서 클로저를 만들어 주지 않으면 마지막 마커에만 이벤트가 등록됩니다
86 +// kakao.maps.event.addListener(marker, 'mouseover', makeOverListener(map, marker, infowindow));
87 +// kakao.maps.event.addListener(marker, 'mouseout', makeOutListener(infowindow));
88 +// }
89 +
90 +// 인포윈도우를 표시하는 클로저를 만드는 함수입니다
91 +function makeOverListener(map, marker, infowindow) {
92 + return function() {
93 + infowindow.open(map, marker);
94 + };
95 +}
96 +
97 +// 인포윈도우를 닫는 클로저를 만드는 함수입니다
98 +function makeOutListener(infowindow) {
99 + return function() {
100 + infowindow.close();
101 + };
102 +}
103 +</script>
104 +
105 + <!-- <script>
106 + var mapContainer = document.getElementById('map'), // 지도를 표시할 div
107 + mapOption = {
108 + center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
109 + level: 3 // 지도의 확대 레벨
110 + };
111 +
112 + var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다
113 +
114 + // 마커를 표시할 위치와 내용을 가지고 있는 객체 배열입니다
115 + var positions = [
30 { 116 {
31 content: '<div>카카오</div>', 117 content: '<div>카카오</div>',
32 latlng: new kakao.maps.LatLng(33.450705, 126.570677) 118 latlng: new kakao.maps.LatLng(33.450705, 126.570677)
...@@ -43,9 +129,9 @@ var positions = [ ...@@ -43,9 +129,9 @@ var positions = [
43 content: '<div>근린공원</div>', 129 content: '<div>근린공원</div>',
44 latlng: new kakao.maps.LatLng(33.451393, 126.570738) 130 latlng: new kakao.maps.LatLng(33.451393, 126.570738)
45 } 131 }
46 -]; 132 + ];
47 133
48 -for (var i = 0; i < positions.length; i ++) { 134 + for (var i = 0; i < positions.length; i ++) {
49 // 마커를 생성합니다 135 // 마커를 생성합니다
50 var marker = new kakao.maps.Marker({ 136 var marker = new kakao.maps.Marker({
51 map: map, // 마커를 표시할 지도 137 map: map, // 마커를 표시할 지도
...@@ -62,21 +148,21 @@ for (var i = 0; i < positions.length; i ++) { ...@@ -62,21 +148,21 @@ for (var i = 0; i < positions.length; i ++) {
62 // for문에서 클로저를 만들어 주지 않으면 마지막 마커에만 이벤트가 등록됩니다 148 // for문에서 클로저를 만들어 주지 않으면 마지막 마커에만 이벤트가 등록됩니다
63 kakao.maps.event.addListener(marker, 'mouseover', makeOverListener(map, marker, infowindow)); 149 kakao.maps.event.addListener(marker, 'mouseover', makeOverListener(map, marker, infowindow));
64 kakao.maps.event.addListener(marker, 'mouseout', makeOutListener(infowindow)); 150 kakao.maps.event.addListener(marker, 'mouseout', makeOutListener(infowindow));
65 -} 151 + }
66 152
67 -// 인포윈도우를 표시하는 클로저를 만드는 함수입니다 153 + // 인포윈도우를 표시하는 클로저를 만드는 함수입니다
68 -function makeOverListener(map, marker, infowindow) { 154 + function makeOverListener(map, marker, infowindow) {
69 return function() { 155 return function() {
70 infowindow.open(map, marker); 156 infowindow.open(map, marker);
71 }; 157 };
72 -} 158 + }
73 159
74 -// 인포윈도우를 닫는 클로저를 만드는 함수입니다 160 + // 인포윈도우를 닫는 클로저를 만드는 함수입니다
75 -function makeOutListener(infowindow) { 161 + function makeOutListener(infowindow) {
76 return function() { 162 return function() {
77 infowindow.close(); 163 infowindow.close();
78 }; 164 };
79 -} 165 + }
80 -</script> 166 + </script> -->
81 </body> 167 </body>
82 </html> 168 </html>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
12 "@google/maps": "^1.1.3", 12 "@google/maps": "^1.1.3",
13 "body-parser": "^1.19.0", 13 "body-parser": "^1.19.0",
14 "cheerio": "^1.0.0-rc.9", 14 "cheerio": "^1.0.0-rc.9",
15 + "ejs": "^3.1.6",
15 "express": "^4.17.1", 16 "express": "^4.17.1",
16 "pug": "^3.0.2", 17 "pug": "^3.0.2",
17 "request": "^2.88.2", 18 "request": "^2.88.2",
......
1 +<!DOCTYPE html>
2 +<html>
3 +<head>
4 + <meta charset="utf-8">
5 + <title>여러개 마커에 이벤트 등록하기1</title>
6 +
7 +</head>
8 +<body>
9 +
10 + <h1>COVID-19 의료기관 검색하기</h1>
11 + <form action="/" method="post">
12 + <p>
13 + <input type="text" name="region" placeholder="서울시"/>
14 + <input type="submit"/>
15 + </p>
16 + </form>
17 +
18 + <div id="map" style="width:700px;height:400px;"></div>
19 + <script type="text/javascript" src="https://dapi.kakao.com/v2/maps/sdk.js?appkey=35fccf4b4e2a3179187346f26ed3f988&libraries=services"></script>
20 +
21 + <script>
22 + var mapContainer = document.getElementById('map'), // 지도를 표시할 div
23 + mapOption = {
24 + center: new kakao.maps.LatLng(37.596672, 127.051950), // 지도의 중심좌표
25 + level: 3 // 지도의 확대 레벨
26 + };
27 +
28 + var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다
29 + var geocoder = new kakao.maps.services.Geocoder();
30 + // 지도 확대 축소를 제어할 수 있는 줌 컨트롤을 생성합니다
31 + var zoomControl = new kakao.maps.ZoomControl();
32 + map.addControl(zoomControl, kakao.maps.ControlPosition.RIGHT);
33 +
34 + var listData = "<%= result %>";
35 + listData = listData.replaceAll('&#34;','\"');
36 + listData = JSON.parse(listData);
37 +
38 + console.log(listData);
39 + // console.log(listData[1]);
40 + //입력되는 배열명이 listData로 들어오면 됨.
41 + listData.forEach(function(addr, index) {
42 + var tmpaddr = ((addr.orgZipaddr).split(','))[0];
43 + console.log(tmpaddr);
44 + console.log("h");
45 + geocoder.addressSearch(tmpaddr, function(result, status) {
46 + if (status === kakao.maps.services.Status.OK) {
47 + var coords = new kakao.maps.LatLng(result[0].y, result[0].x);
48 +
49 + var marker = new kakao.maps.Marker({
50 + position: coords,
51 + clickable: true});
52 +
53 + // 마커를 지도에 표시합니다.
54 + marker.setMap(map);
55 +
56 + // 인포윈도우를 생성합니다
57 + var infowindow = new kakao.maps.InfoWindow({
58 + content: '<div style="width:150px;text-align:center;padding:6px 0;">' + addr[1] + '</div>',
59 + removable : true
60 + });
61 + // 마커에 클릭이벤트를 등록합니다
62 + kakao.maps.event.addListener(marker, 'click', function() {
63 + // 마커 위에 인포윈도우를 표시합니다
64 + infowindow.open(map, marker);
65 + });
66 + }
67 + });
68 +
69 + });
70 +
71 + // 인포윈도우를 표시하는 클로저를 만드는 함수입니다
72 + function makeOverListener(map, marker, infowindow) {
73 + return function() {
74 + infowindow.open(map, marker);
75 + };
76 + }
77 +
78 + // 인포윈도우를 닫는 클로저를 만드는 함수입니다
79 + function makeOutListener(infowindow) {
80 + return function() {
81 + infowindow.close();
82 + };
83 + }
84 + </script>
85 +
86 +</body>
87 +</html>
...\ No newline at end of file ...\ No newline at end of file
1 -html 1 +//- html
2 - head 2 +//- head
3 - meta(charset='utf-8') 3 +//- meta(charset='utf-8')
4 - body 4 +//- body
5 - h1 COVID-19 의료기관 검색하기 5 +//- h1 COVID-19 의료기관 검색하기
6 6
7 - form(action='/' method="post") 7 +//- form(action='/' method="post")
8 - p 8 +//- p
9 - input(type='text' name='region' placeholder='서울시') 9 +//- input(type='text' name='region' placeholder='서울시')
10 - input(type='submit') 10 +//- input(type='submit')
11 11
12 - //result값 있을때만 12 +//- //result값 있을때만
13 - if result!=NULL 13 +//- if result!=NULL
14 - table 14 +//- table
15 - tr 15 +//- tr
16 - th 기관명 16 +//- th 기관명
17 - th 기관 전화번호 17 +//- th 기관 전화번호
18 - th 기관 주소 18 +//- th 기관 주소
19 - th 휴무일 여부 19 +//- th 휴무일 여부
20 - th 점심 시작시간 20 +//- th 점심 시작시간
21 - th 점심 종료시간 21 +//- th 점심 종료시간
22 - th 진료 시작기간 22 +//- th 진료 시작기간
23 - th 진료 종료시간 23 +//- th 진료 종료시간
24 - -for(i=1; i<result.length; i++) 24 +//- -for(i=1; i<result.length; i++)
25 - tr 25 +//- tr
26 - td= result[i].orgnm 26 +//- td= result[i].orgnm
27 - td= result[i].orgTlno 27 +//- td= result[i].orgTlno
28 - td= result[i].orgZipaddr 28 +//- td= result[i].orgZipaddr
29 - td= result[i].hldyYn 29 +//- td= result[i].hldyYn
30 - td= result[i].lunchSttTm 30 +//- td= result[i].lunchSttTm
31 - td= result[i].lunchEndTm 31 +//- td= result[i].lunchEndTm
32 - td= result[i].sttTm 32 +//- td= result[i].sttTm
33 - td= result[i].endTm 33 +//- td= result[i].endTm
34 34
35 35
36 36
......