์ด ๋ธ๋ก๊ทธ๋ ๋ด ๋ง์กฑ์ฉ ๋ธ๋ก๊ธฐ์ด๊ธด ํ์ง๋ง ๊ฐ๋ ์ธ๊ธฐ๊ธ ์์๋ฅผ ๋ณธ๋ค.
๊ณต๋ถํ ๋ ๊ธฐ๋ก์ฉ์ผ๋ก ์์ฑํ์๋ ๊ณต๊ณตapi๋ฅผ ์ฌ์ฉํ ์นํ์ด์ง๋ง๋ค๊ธฐ๋ฅผ ๊พธ์คํ ๋ง์ด ๋ณด๋๊ฒ ๊ฐ๋ค.
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ๋ฅผ ํ์๋์๋ ๋๊ธ์ด ๋ง์ด ๋ฌ๋ ค์
๊ณต๊ณตapi๋ฅผ ์ด์ฉํ๋ ค๋ ํ์๋ถ๋ค์ด ๋ง๊ตฌ๋ ์ถ์๋ค.
์ด๋ฒ์ ํ๊ต์์ ๊ฐ๋จํ ๋ฐ์ดํฐํ์ฉ ์นํ์ด์ง๋ฅผ ๋ง๋ค์ด๋ณด๋ผ๊ณ ํด์ ๊ณต๊ณตapi๋ฅผ ์ด์ฉํ์ฌ ์ง๋์ ํ์ํ๋ ์นํ์ด์ง๋ฅผ ๋ง๋ค์ด๋ดค๋๋ฐ
ํ๋ ์ฌ๋ฌ ๋ธ๋ก๊ทธ๋ค์ ๋ณด๋ฉด์ ๊ณต๊ณต api ํ์ฉํ๋ ค๊ณ ํ๋ ๋๋ฅผ ์๊ฐํ๋ฉฐ ์ด๋ฒ์ ์ข ์์ธํ ํ์ด๋ณด์์ผ๊ฒ ๋ค.
3๋ ์ ์ ๋๋ฅผ ๊ฒฉ๋ คํ๋ ๊ธ์ด๋ผ๊ณ ๋ณด๋๊ฒ ์ข๊ฒ ๋ค.
๊ณต๊ณต ์คํ api๋ ์ ์ ๊ฐ๋ฐ์๊ฐ ํฌํธํด๋ฆฌ์ค๋ฅผ ๋ง๋ค๋ ์ฐธ ํ์ฉํ๊ธฐ ์ข์ ๊ฒ ๊ฐ๋ค.
ํ์ฐฝ ์ฝ๋ก๋๊ฐ ์์๋ ๋์ฏค์ด์ฌ์ ๋ฉด์ ๋ ์์กํ๊ณ ์๋ฌด๊ฒ๋ ์ํ๊ธฐ์ ๋๋ฌด๋๋ ๋ถ์ํด์ ๋ง์คํฌ๋ฅผ ์ด์์๋ ์ฝ๊ตญ ์ ๋ณด๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ฐ์ ํ๋ก์ ํธ๋ก ํ์ฉ ํ์๋๋ฐ ์ด๋ฒ์๋ ๊ทธ์ ์กฐ๊ธ์ ๋น์ทํ ์ ๋ํ ์ฒด์ด๊ธ์์ถฉ์ ๊ธฐ๊ฐ ์๋ ๊ณณ์ ์ ๋ณด๋ฅผ ์ง๋๋ก ํํํ ์์๋ ๊ฐ๋จํ ํ์ด์ง๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ๋ค.
ํ์ฉํ ๊ณต๊ณต api
https://data.seoul.go.kr/dataList/OA-15813/S/1/datasetView.do?tab=A
๋ค๋ฅธ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ค๋ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์นด์นด๋ ์ง๋ api
https://apis.map.kakao.com/web/
1. ์ง๋ ์์ฑ
์นด์นด์ค ์ํ๊ฐ์ด๋๋ ์ฐธ ์น์ ํ๋ค.
์นด์นด์ค์ง๋ ์ํ์์ ์ง๋ ์์ฑํ๊ธฐ๋ฅผ ๊ทธ๋ฅ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐํ๋ค.
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=๋ฐ๊ธ๋ฐ์ APP KEY"></script>
<body>
<div id="map" style="width:100%;height:350px;"></div>
</body>
<script>
// id๊ฐ map์ธ ๊ฒ์ ์ฐพ์ mapContainer๋ก ๋ฐ์
let mapContainer = document.getElementById('map'),
// ์ต์ด ์ง๋์ ์ค์ฌ์ขํ, ๋ ๋ฒจ ๋ฑ์ ์ง์
mapOption = {
center: new kakao.maps.LatLng(33.450701, 126.570667),
level: 3
};
// ์นด์นด์ค ๋งต์ ๋์
let map = new kakao.maps.Map(mapContainer, mapOption);
</script>
*์นด์นด์ค ์ง๋๋ฅผ ๋์ฐ๊ธฐ ์ํด์๋ web์ฉ app key๋ฅผ ๋ฐ๊ธ ๋ฐ์์ผํ๋ค. ๋ํ url์ ์ด์ด์ฃผ์ด์ผํ๋ค.
2. ์๋ ๊ฒฝ๋ ๋ฐ๊ธฐ
๋ด๊ฐ ํ์ฉํ๊ณ ์ถ์ ์ ๋ณด๊ฐ ์ ์ ํ ์ ๋์ด์ค๋์ง ํ์ธํด๋ณธ๋ค.
ajax๋ก ํต์ ํ ์๋์์ง๋ง ๋๋ ์๋ฒ๋จ์์ axios๋ก ํต์ ํ์ฌ ์ ๋ณด๋ฅผ ๋ฐ์์ ์ถ๋ ฅ ํ ์์ ์ด๋ค.
let url = `http://openapi.seoul.go.kr:8088/${process.env.SECRET_KEY}/json/tbElecWheelChrCharge/1/1000`;
const data = await axios.get(url, {headers: {"Content-type": "application/x-www-form-urlencoded; charset=UTF-8", Accept: "*/*"}});
* ๊ณต๊ณต api ๋ ๋ง์ฐฌ๊ฐ์ง๋ก secret key๋ฅผ ๋ฐ์ ์์ฒญ์๋ง๋ค ์ด ํค๋ฅผ ํจ๊ป ๋ณด๋ด์ฃผ์ด์ผํ๋ค.
3. ์ง๋์ ๋ง์ปค์ฐ๊ธฐ + ๋ง์ปค์ ํด๋ฆญ ์ด๋ฒคํธ ๋ฌ๊ธฐ
์นด์นด์ค์ ๋ง์ปค์์ฑํ๊ธฐ ๋ถ๋ถ์ ์ฐธ๊ณ ํ์ฌ ์๋ฒ์์ ๋์ด์จ n๊ฐ์ ์๋์ ๊ฒฝ๋์ ๋ณด๋ฅผ ํตํด for๋ฅผ ๋๋ฉด์ ๋ง์ปค๋ฅผ ์ฐ์ด์ค๋ค.
์นด์นด์ค์ ๋ง์ปค์ ํด๋ฆญ ์ด๋ฒคํธ ๋ฑ๋กํ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ์ฌ ํด๋ฆญ์ด๋ฒคํธ๋ ํจ๊ป ๋ฌ์์ค๋ค.
let positions = [
<% for(let i=0; i<list.length; i++){ %>
{
title: '<%= list[i].FCLTYNM %>',
latlng: new kakao.maps.LatLng(<%= list[i].LATITUDE %>, <%= list[i].LONGITUDE %>),
}<% if(i<list.length-1){%>,<%}%>
<% } %>
];
var imageSrc = "https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png";
for (let i = 0; i < positions.length; i ++) {
let imageSize = new kakao.maps.Size(24, 35);
let markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize);
let marker = new kakao.maps.Marker({
map: map,
position: positions[i].latlng,
title : positions[i].title,
image : markerImage,
// clickable๋ฅผ true๋ก ํ๋ฉด ํด๋ฆญ์ด๋ฒคํธ๋ฅผ ๋ฌ ์ ์๋ค.
clickable:true
});
kakao.maps.event.addListener(marker, 'click', function() {
document.getElementById("title").innerText = positions[i].title;
});
}
ejs ๋ฌธ๋ฒ์ด๋ ์์ฌ์์ด์ ์กฐ๊ธ ํท๊ฐ๋ฆฌ๊ธด ํ์ง๋ง, ์๋ฒ์์ ๊ฐ์ ธ์จ ์ด๋ฆ, ์๋, ๊ฒฝ๋ ์ ๋ณด๋ฅผ for๋ฌธ์ ๋๋ฉด์ ๋ง์ปค๋ฅผ ์ฐ์ด์ค ๊ฒ์ด๊ณ
ํด๋ฆญ์ด๋ฒคํธ๋ ์์ฑํด์ฃผ๋ ๊ฒ์ด๋ค.
์ธ๊ฐ ๋ฃ๋ค๊ฐ ๊ณต๋ถํ๊ธฐ์ซ์ด์ ์ ์ ๋ป๊ธ ๋
'node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
nestjs + serverless + lambda + apiGateway ์ฌ์ฉํ๊ธฐ (0) | 2022.08.23 |
---|---|
nestjs swagger ๋ณด์์ค์ ํ๊ธฐ (0) | 2022.04.06 |
nestjs passport base64 ์ต์ ์ฌ์ฉํ๊ธฐ (0) | 2022.02.22 |
DND 5๊ธฐ 8์ฃผ์ฐจ - ์ต์ข ๋ฐํ (0) | 2021.08.29 |
DND 5๊ธฐ 7์ฃผ์ฐจ - ๋ฅ์คํธ ํ๋ ๋ฐ ํ๊ณ (0) | 2021.08.16 |