[FAQ] 지도/로컬 API 문의 전 꼭 읽어 주세요.
https://devtalk.kakao.com/t/faq-api/125610
범위 특정까진했는데 Polyline() 을 사용해서 비교하는부분에서
마커의 좌표를 배열에 넣어 forEach를 돌려야하는데 이부분에서 큰 어려움을 겪고있네요…
import React, { useEffect, useState } from 'react';
const { kakao } = window;
const MapContainer = () => {
const [data, setData] = useState();
console.log(data);
useEffect(() => {
const markerdata = [
{
id: 0,
address: '신정로 225-12',
title: '교촌 치킨 접선 모임',
},
{
id: 1,
address: '오목로 337-10',
title: '삼겹살 접선 모임',
},
{
id: 2,
address: '오목로 245',
title: '라멘 접선 모임',
},
{
id: 3,
address: '목동서로 256',
title: '곱창 모임',
},
];
const nowData = { address: '신정로 225-12' };
const container = document.getElementById('myMap');
const options = {
center: new kakao.maps.LatLng(35.12, 129.1),
level: 4,
};
// 지도를 생성합니다.
const map = new kakao.maps.Map(container, options);
// 주소-좌표 변환 객체를 생성합니다.
const geocoder = new kakao.maps.services.Geocoder();
// 주소로 좌표를 검색합니다..
markerdata.forEach((el) => {
geocoder.addressSearch(el.address, function (result, status) {
// 정상적으로 검색이 완료됐으면
if (status === kakao.maps.services.Status.OK) {
const coord = new kakao.maps.LatLng(result[0].y, result[0].x);
// 결과값으로 받은 위치를 마커로 표시합니다
const marker = new kakao.maps.Marker({
map: map,
position: coord,
});
// 인포윈도우로 장소에 대한 설명을 표시합니다
const infowindow = new kakao.maps.InfoWindow({ zIndex: 1 });
kakao.maps.event.addListener(marker, 'click', function () {
const content =
`<div style="width:150px;color:red;text-align:center;padding:6px 0;">` +
el.address +
`</div>`;
if (infowindow.getMap()) {
infowindow.close();
} else {
infowindow.open(map, marker);
infowindow.setContent(content);
}
});
}
});
});
geocoder.addressSearch(nowData.address, function (result, status) {
console.log(result);
// 정상적으로 검색이 완료됐으면
if (status === kakao.maps.services.Status.OK) {
const coords = new kakao.maps.LatLng(result[0].y, result[0].x);
setData(coords);
// // 지도의 중심을 결과값으로 받은 위치로 이동시킵니다
map.setCenter(coords);
var circle = new kakao.maps.Circle({
map: map,
center: coords,
radius: 1000, // m단위
strokeWeight: 2,
strokeColor: '#FF00FF',
strokeOpacity: 0.8,
strokeStyle: 'dashed',
fillColor: '#00EEEE',
fillOpacity: 0.5,
});
var center = circle.getPosition();
var radius = circle.getRadius();
var line = new kakao.maps.Polyline();
const aa = [{ La: 35.12, Ma: 129.1 }];
aa.forEach(function (marker) {
// 마커의 위치와 원의 중심을 경로로 하는 폴리라인 설정
var path = [marker, center];
line.setPath(path);
// 마커와 원의 중심 사이의 거리
var dist = line.getLength();
console.log(dist);
// 이 거리가 원의 반지름보다 작거나 같다면
if (dist < radius) {
// 해당 marker는 원 안에 있는 것
marker.setMap(map);
} else {
marker.setMap(null);
}
});
}
});
}, []);
return (
<div
id='myMap'
style={{
width: '800px',
height: '800px',
}}
></div>
);
};
export default MapContainer;