[javascript] Mapbox지도에서 레이어 간 상호작용 기능 추가하기

Mapbox는 사용자 친화적인 지도 및 위치 기반 서비스를 제공하는 플랫폼입니다. 이를 통해 우리는 웹 애플리케이션에서 다양한 레이어를 표시하고 상호작용할 수 있습니다. 이 글에서는 Mapbox지도에서 레이어 간 상호작용 기능을 추가하는 방법에 대해 알아보겠습니다.

HTML 파일 설정

먼저, HTML 파일을 생성하고 Mapbox 라이브러리를 로드해야 합니다. 다음과 같이 HTML 파일의 head 섹션에 다음 코드를 추가합니다.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Mapbox 레이어 상호작용 예제</title>
    <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
    <link href="https://api.mapbox.com/mapbox-gl-js/v2.7.0/mapbox-gl.css" rel="stylesheet" />
    <script src="https://api.mapbox.com/mapbox-gl-js/v2.7.0/mapbox-gl.js"></script>
    <style>
        body { margin: 0; padding: 0; }
        #map { position: absolute; top: 0; bottom: 0; width: 100%; }
    </style>
</head>
<body>
    <div id="map"></div>
    <script>
        // JavaScript 코드는 아래에서 설명합니다.
    </script>
</body>
</html>

JavaScript 코드 작성

다음으로, JavaScript 코드 부분에서 Mapbox 지도 및 레이어를 생성하고 상호작용 기능을 추가해야 합니다. 아래는 예제 코드입니다.

mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN';

var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/mapbox/streets-v11',
    center: [-74.5, 40],
    zoom: 9
});

map.on('load', function() {
    // 레이어를 추가하는 코드는 이곳에 작성합니다.
    
    // 레이어 간 상호작용을 설정하는 코드는 이곳에 작성합니다.
});

위 코드에서 YOUR_ACCESS_TOKEN 자리에는 개인적으로 생성한 Mapbox의 access token을 입력해야 합니다.

레이어 추가하기

먼저, 레이어를 추가하는 방법을 알아보겠습니다. 예를 들어, Mapbox의 서비스 중 하나인 “지적편집도”를 표시해보겠습니다. 다음은 지적편집도 레이어를 추가하는 코드입니다.

map.on('load', function() {
    map.addSource('cadastre', {
        type: 'vector',
        url: 'mapbox://mapbox.cadastre'
    });

    map.addLayer({
        'id': 'cadastre',
        'source': 'cadastre',
        'source-layer': 'cadastre',
        'type': 'fill',
        'paint': {
            'fill-color': 'rgba(0, 0, 255, 0.5)'
        }
    });
});

위 코드에서 map.addSource() 함수를 사용하여 레이어의 데이터 원천을 설정합니다. 그 후, map.addLayer() 함수를 사용하여 실제 레이어를 추가합니다.

레이어 간 상호작용 기능 추가하기

이제, 레이어 간의 상호작용을 추가하는 방법을 알아보겠습니다. 레이어 간에 마우스 클릭 시, 색상이 변경되는 예제를 보여드리겠습니다.

map.on('load', function() {
    // 레이어를 추가하는 코드는 생략합니다.

    map.on('click', 'cadastre', function(e) {
        map.setPaintProperty('cadastre', 'fill-color', 'rgba(255,0,0,0.5)');
    });

    // 클릭 이벤트가 완료되면 원래 색상으로 되돌리는 코드
    map.on('click', function(e) {
        map.setPaintProperty('cadastre', 'fill-color', 'rgba(0,0,255,0.5)');
    });
});

위 코드에서 map.on('click', 'cadastre', ...) 함수를 사용하여 특정 레이어를 클릭했을 때 실행되는 코드를 작성합니다. 이 예제에서는 클릭 시 레이어의 색상을 빨강으로 변경하고, 다른 곳을 클릭했을 때는 원래 색상으로 되돌리는 코드를 추가하였습니다.

이렇게 함으로써 Mapbox지도에서 여러 레이어 간의 상호작용 기능을 추가할 수 있습니다.


위의 예제는 Mapbox의 기본 기능을 사용하여 Mapbox지도에서 레이어 간 상호작용을 구현하는 방법을 설명했습니다. 더 자세한 정보는 Mapbox 공식 문서를 참조하세요.