마커를 배열로 관리하고 라디오 버튼이 눌렸을 때
지도의 중심 좌표와 마커들 간의 거리를 비교해서 범위 안에 있는 마커를 표시해주세요.
아래 링크와 코드 함께 참고해주세요.
https://devtalk.kakao.com/t/topic/84191/6?u=lea.ju
<body>
<div id="map" style="width:100%;height:350px;"></div>
<button onclick="showMarker(1000)">1km</button>
<button onclick="showMarker(3000)">3km</button>
<button onclick="showMarker(5000)">5km</button>
<button onclick="showMarker(100000)">모두보기</button>
<script>
var mapContainer = document.getElementById('map'), // 지도를 표시할 div
mapOption = {
center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
level: 7 // 지도의 확대 레벨
};
// 지도를 생성합니다
var map = new kakao.maps.Map(mapContainer, mapOption);
var current = new kakao.maps.Marker({
map: map,
position: new kakao.maps.LatLng(33.450701, 126.570667)
});
// 주소-좌표 변환 객체를 생성합니다
var geocoder = new kakao.maps.services.Geocoder();
var add = ['제주특별자치도 제주시 첨단로 242', '제주특별자치도 제주시 명림로 575-107', '제주특별자치도 제주시 516로 2870', '제주특별자치도 제주시 한북로 313'];
var markers = [];
for(let i=0; i <add.length; i++){
geocoder.addressSearch(add[i], function(result, status) {
// 정상적으로 검색이 완료됐으면
if (status === kakao.maps.services.Status.OK) {
var coords = new kakao.maps.LatLng(result[0].y, result[0].x);
// 결과값으로 받은 위치를 마커로 표시합니다
var marker = new kakao.maps.Marker({
map: map,
position: coords
});
markers.push(marker);
}
});
}
var circle = new kakao.maps.Circle({});
function showMarker(radius) {
var center = map.getCenter();
var line = new kakao.maps.Polyline();
if(radius < 100000) {
circle.setMap(map);
circle.setPosition(center);
circle.setRadius(radius);
} else {
// 전체보기
circle.setMap(null);
}
markers.forEach(marker => {
var path = [marker.getPosition(), center];
line.setPath(path);
// 마커와 원의 중심 사이의 거리
var dist = line.getLength();
// 이 거리가 원의 반지름보다 작거나 같다면
if (dist <= radius) {
// 해당 marker는 원 안에 있는 것
marker.setMap(map);
} else {
marker.setMap(null);
}
});
}
</script>