[OpenLayers] 마우스로 Vector 생성하기(그리기)

ol에서 마우스를 이용해 지도에 도형을 그리기 내용에 대한 정리이다. UI에 대한 DOM 구성은 아래와 같다.

위의 DOM에 대한 CSS는 아래와 같다.


이제 JavaScript 코드이다. 먼저 필요한 모듈을 import 한다.

import 'ol/ol.css';

import Map from 'ol/Map.js';
import View from 'ol/View.js';
import Draw from 'ol/interaction/Draw.js';
import {Tile as TileLayer, Vector as VectorLayer} from 'ol/layer.js';
import {OSM, Vector as VectorSource} from 'ol/source.js';

배경지도로 OpenStreetMap을 사용하기 위해 아래의 TileLayer 타입의 raster 객체를 생성한다.

var raster = new TileLayer({
    source: new OSM()
});

마우스를 이용해 도형을 그리면 해당 도형이 저장될 벡터 저장소가 필요하다. 이에 대한 저장소와 표현을 위한 레이어 객체를 생성한다.

var source = new VectorSource({wrapX: false});

var vector = new VectorLayer({
    source: source
});

위의 2개의 레이어를 구성하여 지도 객체를 생성한다.

var map = new Map({
    layers: [raster, vector],
    target: 'map',
    view: new View({
        center: [-11000000, 4600000],
        zoom: 4
    })
});

id가 type인 DOM 요소를 얻어오고, 이 DOM 요소를 통해 사용자가 자신이 그릴 도형의 타입을 선택할때 발생하는 이벤트를 아래처럼 지정한다.

var typeSelect = document.getElementById('type');

typeSelect.onchange = function() {
    map.removeInteraction(draw);
    addInteraction();
};

addInteraction();

addInteraction 함수는 아래와 같은데, 그릴 도형을 선택하여 선택된 값으로 Draw 타입의 클래스의 객체를 생성해 지도에 Interaction으로써 추가해 준다.

var draw; // 전역 객체

function addInteraction() {
    var value = typeSelect.value;

    if (value !== 'None') {
        draw = new Draw({
            source: source,
            type: typeSelect.value,
            //freehand: false
        });

        map.addInteraction(draw);
    }
}

실행하면 마우스를 통해 내가 원하는 도형을 선택해 그릴 수 있다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다