마이그레이션: v1에서 v3로 전환하기
이 문서는 NAVER 지도 API v1에서 v3으로 전환하는 사용자를 위해 NAVER 지도 API v1의 주요 인터페이스 중 v3에서 변경된 내용을 중심으로 설명합니다.
주요 변경 내용
줌 레벨 지원 범위
- v1: 1~12 레벨을 지원하고 있으며, 1 레벨이 최대 확대 레벨입니다.
- v3: 1 레벨이 대한민국 전도가 보이는 레벨이며, 14 레벨이 최대 확대 레벨입니다.
오버레이, 컨트롤 추가/삭제 방법
- v1: 오버레이, 컨트롤을 추가/삭제할 때 Map 객체의 다음 메서드를 이용합니다.
addOverlay
removeOveraly
addControl
removeControl
- v3:
setMap
메서드를 이용해 오버레이, 컨트롤을 지도에 추가/삭제합니다.
주요 객체 대체표
NAVER 지도 API v1은 별도의 네임스페이스가 없습니다. 그러나 v3은 naver.maps
네임스페이스가 있으며, 축약해 N
네임스페이스를 사용할 수 있습니다.
v1 | v3 | 설명 |
---|---|---|
NMap | naver.maps.Map | 지도 클래스 |
NSize | naver.maps.Size | Size 클래스 |
NPoint | naver.maps.Point | Point 좌표 클래스 |
NLatLng | naver.maps.LatLng | 경/위도 좌표 클래스 |
NEvent | naver.maps.Event | 이벤트 추가/삭제 객체 |
NMark | naver.maps.Marker | 마커 오버레이 클래스 |
NIcon | 없음 | |
NInfoWindow | naver.maps.InfoWindow | 정보 창 클래스 |
NPolyline | naver.maps.Polyline | 폴리라인 오버레이 클래스 |
NXmlHttp | 없음 | |
NZoomControl | naver.maps.ZoomControl | 지도 줌 컨트롤 |
NSaveBtn | 없음 | |
NIndexMap | 없음 | |
NMiniMap | 없음 |
전환 방법
지도 초기화하기
v1
var map = new NMap(document.getElementById('mapContainer'), 300, 400);
v3
var map = new naver.maps.Map('mapContainer', {
size: new naver.maps.Size(300, 400)
});
지도 이동하기
v1
var cityHall = new NLatLng(37.5666805, 126.9784147);
map.setCenterAndZoom(cityHall, 10);
var bounds = map.getBound();
map.setBound(bounds[0], bounds[1], bounds[2], bounds[3]);
map.pan(15, 30);
v3
var cityHall = new naver.maps.LatLng(37.5666805, 126.9784147);
map.setCenter(cityHall);
map.setZoom(3);
var bounds = map.getBounds();
map.fitBound(bounds);
map.panBy(new naver.maps.Point(15, -30));
지도 줌 레벨 설정하기
v1
map.zoomIn();
map.zoomOut();
map.setMinLevel(5);
map.setMaxLevel(10);
v3
map.setZoom(map.getZoom() + 1);
map.setZoom(map.getZoom() - 1);
map.setOptions("minZoom", 5);
map.setOptions("maxZoom", 10);
지도 인터랙션 옵션 조정하기
v1
map.disableDrag();
map.enableDrag();
map.disableWheelZoom();
map.enableWheelZoom();
v3
map.setOptions("draggable", false);
map.setOptions("draggable", true);
map.setOptions("scrollWheel", false);
map.setOptions("scrollWheel", true);
지도 이벤트 제어하기
v1
NEvent.addListener(map, 'move', onMove);
NEvent.removeListener(map, 'move', onMove);
NEvent.addListener(map, 'drag', onDrag);
NEvent.removeListener(map, 'drag', onDrag);
NEvent.addListener(map, 'startDrag', onDragStart);
NEvent.removeListener(map, 'startDrag', onDragStart);
NEvent.addListener(map, 'endDrag', onDragEnd);
NEvent.removeListener(map, 'endDrag', onDragEnd);
NEvent.addListener(map, 'click', onClick);
NEvent.removeListener(map, 'click', onClick);
NEvent.addListener(map, 'dblclick', onDblClick);
NEvent.removeListener(map, 'dblclick', onDblClick);
NEvent.addListener(map, 'mousemove', onMousemove);
NEvent.removeListener(map, 'mousemove', onMousemove);
NEvent.addListener(map, 'zoom', onZoom);
NEvent.removeListener(map, 'zoom', onZoom);
NEvent.addListener(map, 'redraw', onRedraw);
NEvent.removeListener(map, 'redraw', onRedraw);
v3
var listeners = [
naver.maps.Event.addListener(map, 'center_changed', onMove),
naver.maps.Event.addListener(map, 'bounds_changed', onMove),
naver.maps.Event.addListener(map, 'drag', onDrag),
naver.maps.Event.addListener(map, 'dragstart', onDragStart),
naver.maps.Event.addListener(map, 'dragend', onDragEnd),
naver.maps.Event.addListener(map, 'click', onClick),
naver.maps.Event.addListener(map, 'dblclick', onDblClick),
naver.maps.Event.addListener(map, 'mousemove', onMousemove),
naver.maps.Event.addListener(map, 'zoom_changed', onZoom),
naver.maps.Event.addListener(map, 'idle', onRedraw)
];
naver.maps.Event.removeListener(listeners);
마커 추가/삭제하기
v1
var cityHall = new NLatLng(37.5666805, 126.9784147);
var icon = new NIcon('http://static.naver.net/maps/v3/pin_default.png',
new NSize(22, 35), new NSize(11, 35));
var marker = new NMark(cityHall, icon);
map.addOverlay(marker);
map.removeOverlay(marker);
v3
var cityHall = new naver.maps.LatLng(37.5666805, 126.9784147);
var markerOptions = {
position: cityHall,
icon: {
url: 'http://static.naver.net/maps/v3/pin_default.png',
size: new naver.maps.Size(22, 35),
anchor: new naver.maps.Point(11, 35)
}
};
var marker = new naver.maps.Marker(markerOptions);
marker.setMap(map); // 추가
marker.setMap(null); // 삭제
정보 창 표시하기
v1
var infoWindow = new NInfoWindow();
infoWindow.set(cityHall, '<div style="background-color:#fff;border:solid 1px #333;padding:5px;">NAVER Maps</div>');
map.addOverlay(infoWindow);
infoWindow.showWindow();
infoWindow.delayHideWindow(2000);
v3
var infoWindow = new naver.maps.InfoWindow({
content: 'NAVER Maps'
});
infoWindow.open(map, cityHall);
window.setTimeout(function() {
infoWindow.close();
}, 2000);
폴리라인 추가/삭제하기
v1
var points = [
new NLatLng(37.5679109, 126.9778991),
new NLatLng(37.5677989, 126.9795420),
new NLatLng(37.5664412, 126.9798661),
new NLatLng(37.5656713, 126.9794012),
new NLatLng(37.5657751, 126.9778604),
new NLatLng(37.5662818, 126.9770724),
new NLatLng(37.5671805, 126.9767998)
];
var polyline = new NPolyline();
polyline.setWeight(5);
polyline.setOpacity(0.5);
polyline.setColor("#0000ff");
for (var i=0, ii=points.length; i<ii; i++) {
polyline.addPoints(points[i]);
}
map.addOverlay(polyline);
map.removeOverlay(polyline);
v3
var points = [
new naver.maps.LatLng(37.5679109, 126.9778991),
new naver.maps.LatLng(37.5677989, 126.9795420),
new naver.maps.LatLng(37.5664412, 126.9798661),
new naver.maps.LatLng(37.5656713, 126.9794012),
new naver.maps.LatLng(37.5657751, 126.9778604),
new naver.maps.LatLng(37.5662818, 126.9770724),
new naver.maps.LatLng(37.5671805, 126.9767998)
];
var polyline = new naver.maps.Polyline({
path: points,
strokeWeight: 5,
strokeColor: "#0000ff",
strokeOpacity: 0.5
});
polyline.setMap(map); // 추가
polyline.setMap(null); // 삭제
원과 사각형 추가/삭제하기
v1
var circle = new NCircle(cityHall, 100);
circle.setLineColor("#00ff00");
circle.setLineWeight(10);
circle.setFillColor("#00ff00");
circle.setOpacity(0.5);
map.addOverlay(circle);
map.removeOverlay(circle);
var rect = new NRectangle(cityHall, new NSize(100, 200));
rect.setLineColor("#ff0000");
rect.setLineWeight(5);
rect.setFillColor("#ff0000");
rect.setOpacity(0.5);
map.addOverlay(rect);
map.removeOverlay(rect);
v3
var circle = new naver.maps.Circle({
center: cityHall,
radius: 100,
strokeColor: "#00ff00",
strokeWeight: 10,
strokeOpacity: 0.5,
fillColor: "#00ff00",
fillOpacity: 0.5
});
circle.setMap(map);
circle.setMap(null);
var rect = new naver.maps.Rectangle({
bounds: new naver.maps.LatLngBounds(cityHall, anotherLatLng)),
strokeColor: "#ff0000",
strokeWeight: 5,
strokeOpacity: 0.5
fillColor: "#ff0000",
fillOpacity: 0.5
});
rect.setMap(map); // 추가
rect.setMap(null); // 삭제
지도 줌 컨트롤 표시하기
v1
var zoomControl = new NZoomControl();
zoomControl.setAlign("left");
zoomControl.setValign("top");
map.addControl(zoomControl);
v3
map.setOptions({
zoomControl: true,
zoomControlOptions: {
position: naver.maps.Position.TOP_LEFT
}
});
또는
var zoomControl = new naver.maps.ZoomControl({
position: naver.maps.Position.TOP_LEFT
});
zoomControl.setMap(zoomControl);
미니 맵 표시하기
v1
var minimap = new NMiniMap();
minimap.setAlign("right");
minimap.setValign("bottom");
map.addControl(minimap);
v3
전체 화면 지도와 미니 맵 예제를 참고합니다.