JavaScript의 마커 클러스터링 Google 지도

JavaScript의 마커 클러스터링 Google 지도

2022-10-19 last update

13 minutes reading beginners programming javascript webdev
이 짧은 자습서에서는 JavaScript로 Google 지도에 마커 클러스터링을 구현하는 방법을 보여 드리겠습니다.

Google 지도 JavaScript SDK 추가



index.html에 다음 Google Maps API JavaScript SDK를 추가합니다.

<script src="https://maps.googleapis.com/maps/api/js?libraries=places&key=[YOUR_API_KEY]"></script>


[YOUR_API_KEY]를 실제 Google Maps API 키로 바꾸십시오.

없는 경우 계속 진행하고 Create an API Key from Google Cloud Console .

Google 지도 개체 만들기



브라우저 창에 전체 화면으로 구글 지도 보기를 만들어 봅시다.

map이라는 ID로 간단한 div HTML 요소를 만듭니다.

<div id="map"></div>


div 내부의 지도가 나중에 전체 화면으로 표시되도록 CSS 규칙을 정의하여 div를 전체 화면으로 만듭니다.

html,
body {
    height: 100%;
    margin: 0;
}

#map {
    width: 100%;
    height: 100%;
    background: red;
    border: 5px solid red;
    box-sizing: border-box;
}


Learn a few ways to make a div full screen on the browser.



마지막으로 원하는 지리적 좌표로 지도 개체를 선언합니다.

이 경우 오타와를 사용했습니다.

const map = new google.maps.Map(document.getElementById('map'), {
    zoom: 15,
    center: {
        lat: 45.424721,
        lng: -75.695000
    },
    mapTypeId: google.maps.MapTypeId.ROADMAP
});




주변 검색 요청을 사용하여 장소 가져오기



이제 Nearby Search Request를 사용하여 지도에 마커를 가져오겠습니다.

다음은 Google Maps Places API의 일부인 Nearby Search Request URL입니다.

const URL = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=45.424721,-75.695000&type=restaurant&radius=1000&key=[YOUR_API_KEY]";

fetch(URL)
.then(response => {
    return response.json();
}).then(response => {
    console.log(response.results)

}).catch(error => {
    console.log(error);
});


프론트엔드 앱에서 Places API에 HTTP 요청을 하면 이 못생긴 CORS 오류가 발생합니다.



CORS 오류를 제거하려면 기본 URL에 프록시 URL을 추가하십시오.

const URL = "https://cors-anywhere.herokuapp.com/https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=45.424721,-75.695000&type=restaurant&radius=1000&key=[YOUR_API_KEY]";


CORS 오류를 제거해야 합니다.

Learn more ways to fix CORS error.



프록시 URL 사용 제한으로 인해 403 금지 오류가 발생하는 경우가 있습니다.

아래 URL로 이동하여 임시 접근 권한을 요청하면 해결할 수 있습니다.

https://cors-anywhere.herokuapp.com/corsdemo


요청이 성공하면 처음 20개 장소에 대한 데이터를 받게 됩니다.



지도에 장소 마커 표시



이제 장소 데이터가 있으므로 마커를 사용하여 Google 지도에 표시해 보겠습니다.

응답 데이터를 반복하고 이 데이터에서 위도 및 경도 값을 가져옵니다. 각 루프에서 마커 개체를 인스턴스화하여 위도 및 경도 값과 매핑을 전달합니다.

response.results.forEach(place => {
    const lat = place.geometry.location.lat;
    const lng = place.geometry.location.lng;
    let marker = new google.maps.Marker({
        position: new google.maps.LatLng(lat, lng),
        map: map
    });
})




Google 지도의 마커 클러스터링



마커에 클러스터링 기능을 추가하려면 index.html에 마커 클러스터링 JavaScript 라이브러리를 포함해야 합니다.

<script src="https://unpkg.com/@googlemaps/[email protected]/dist/index.min.js"></script>


마지막으로 markerClusterer 객체를 인스턴스화하고 지도와 마커가 나타나야 하는 곳에 전달합니다.

모든 마커를 배열로 누적하려면 fetch() 요청 외부에 markers라는 배열을 정의하고 각 마커를 forEach 루프 내부의 markers 배열에 푸시합니다.

const markers = [];

fetch(URL)
.then(response => {
    return response.json();
}).then(response => {

    response.results.forEach(place => {
        const lat = place.geometry.location.lat;
        const lng = place.geometry.location.lng;
        let marker = new google.maps.Marker({
            position: new google.maps.LatLng(lat, lng),
            map: map
        });
        markers.push(marker);
    });

    new markerClusterer.MarkerClusterer({
        map,
        markers
    });

}).catch(error => {
    console.log(error);
});




당신은 그것을 가지고 있습니다.

마커 클러스터링에 대한 질문이나 제안이 있는 경우 아래에 의견을 보내주시면 최대한 빨리 답변해 드리겠습니다.

즐거운 코딩!