BLOG main image
분류 전체보기 (65)
JSP (6)
Android (1)
ASP.NET (0)
MSSQL (4)
PHP (18)
ASP (11)
오픈 API (1)
HTML (2)
JavaScript (0)
Windows Programming (8)
컴퓨터교양 (14)
객체 지향 (0)
리뷰 및 생각 (0)
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
2014. 1. 12. 21:03

1. 네이버 지도 API 키 발급 받기
    http://developer.naver.com/wiki/pages/MapAPI 로 들어가 [키 발급/관리]를 클릭한다.
    코딩할 때는 JavaScript 2.0 지도 시작하기를 참고 하면 된다.
image

[키 추가] 버튼을 눌러 키를 발급화면으로 이동한다.
image

[?] 버튼을 눌러 디렉토리 제한에 관한 설명을 숙지하고, 양식을 작성하고 키를 발급 받는다.
image

2. 코딩하기 – 마커 및 라벨 추가하기
아래는 보통 회사 위치를 안내하는 페이지 이다.
네이버맵을 페이지에 내장시키고, 맵 위에 회사 위치에 마커를 찍어주고, 라벨에 회사명을 적어 주었다.
마커 옆에 긴 네모가 라벨이다.
image

JavaScript 2.0 지도 시작하기에 다 나와 있다. 아마 수십분만 투자해도 활용할 수 있을 것이다.
그런데 “샘플 파일 다운로드” 링크가 깨져있어서, 소스를 복사 붙여넣기 해야 하는데,
붙여넣기 하면 소스가 한줄로 쭉 나와서, 소스 정리 하는 시간이 좀 걸린다. 좀 짜증…

여튼 아래 소스는 1. 사용 예제를 기반으로 작성한 것이다.
주석을 약간 붙였다.
안쓰는 기능은 다 주석(/**/) 처리를 했다.
위 그림과 같이 나오게 하려면, 굵게 표시한 부분만 고쳐서 쓰면 된다.

위도/경도(Lat, Lng)는 각자에 맞게 찾아야 하는데, 네이버맵을 통해 어찌저찌 알아내면 된다.
안되면 구글맵을 통해 알아내도 되고, 다음맵을 통해 알아내도 될 것이다.
(주소를 가지고 있으면 쉽게 알아낼 수 있을 것이다.)
image


<!-- 네이버 맵 -->

<!-- prevent IE6 flickering -->
<script type="text/javascript">
try {
    document.execCommand('BackgroundImageCache', false, true);
}
catch(e) {
}
</script>


<script type="text/javascript" src="http://openapi.map.naver.com/openapi/naverMap.naver?ver=2.0&key=여기에발급받은키를입력한다."></script>

<div id="map" style="border:1px solid #000;"></div>

<script type="text/javascript">
var Lat = 37.0000000;
var Lng = 126.0000000;

// 위도/경도
var oSeoulCityPoint = new nhn.api.map.LatLng(Lat, Lng);
// 줌레벨
var defaultLevel = 12;
// 맵 생성
var oMap = new nhn.api.map.Map(document.getElementById('map'), {                                                
    point : oSeoulCityPoint,                                               
    zoom : defaultLevel,                                               
    enableWheelZoom : true,                                               
    enableDragPan : true,                                               
    enableDblClickZoom : false,                                               
    mapMode : 0,                                               
    activateTrafficMap : false,                                               
    activateBicycleMap : false,                                               
    minMaxLevel : [ 1, 14 ],                                               
    size : new nhn.api.map.Size(900, 480)
});

// 줌 컨트롤
var oSlider = new nhn.api.map.ZoomControl();               
oMap.addControl(oSlider);               
oSlider.setPosition({                       
    top : 10,                       
    left : 10               
});

// 일반/위성 버튼
var oMapTypeBtn = new nhn.api.map.MapTypeBtn();               
oMap.addControl(oMapTypeBtn);               
oMapTypeBtn.setPosition({                       
    bottom : 10,                       
    right : 80               
});

// 주제별 지도 버튼
/*var oThemeMapBtn = new nhn.api.map.ThemeMapBtn();               
oThemeMapBtn.setPosition({                       
    bottom : 10,                       
    right : 10               
});
oMap.addControl(oThemeMapBtn);*/

// 자전거 지도 범례 컨트롤
/*var oBicycleGuide = new nhn.api.map.BicycleGuide(); // - 자전거 범례 선언               
oBicycleGuide.setPosition({                       
    top : 10,                       
    right : 10               
}); // - 자전거 범례 위치 지정              
oMap.addControl(oBicycleGuide);// - 자전거 범례를 지도에 추가.  */

// 교통범례 컨트롤
/*var oTrafficGuide = new nhn.api.map.TrafficGuide(); // - 교통 범례 선언               
oTrafficGuide.setPosition({                       
    bottom : 30,                       
    left : 10               
});  // - 교통 범례 위치 지정.               
oMap.addControl(oTrafficGuide); // - 교통 범례를 지도에 추가.*/

// 실시간 교통 버튼
/*var trafficButton = new nhn.api.map.TrafficMapBtn(); // - 실시간 교통지도 버튼 선언               
trafficButton.setPosition({                       
    bottom:10,                        
    right:150               
}); // - 실시간 교통지도 버튼 위치 지정               
oMap.addControl(trafficButton);*/

// 마커 아이콘(안보이는 상태로 맵에 추가해 놓기)
var oSize = new nhn.api.map.Size(28, 37);               
var oOffset = new nhn.api.map.Size(14, 37);               
var oIcon = new nhn.api.map.Icon('http://static.naver.com/maps2/icons/pin_spot2.png', oSize, oOffset);

// 정보상자(안보이는 상태로 맵에 추가해 놓기)
var oInfoWnd = new nhn.api.map.InfoWindow();               
oInfoWnd.setVisible(false);               
oMap.addOverlay(oInfoWnd);               
oInfoWnd.setPosition({                       
    top : 20,                       
    left :20               
});

// 마커라벨(안보이는 상태로 맵에 추가해 놓기)
var oLabel = new nhn.api.map.MarkerLabel(); // - 마커 라벨 선언.               
oMap.addOverlay(oLabel); // - 마커 라벨 지도에 추가. 기본은 라벨이 보이지 않는 상태로 추가됨.               
oInfoWnd.attach('changeVisible', function(oCustomEvent) {                       
    if (oCustomEvent.visible) {                               
        oLabel.setVisible(false);                       
    }               
});

/*
// 폴리곤 객체 선언(안보이는 상태로 맵에 추가해 놓기)
var oPolyline = new nhn.api.map.Polyline([], {                       
    strokeColor : '#f00', // - 선의 색깔                       
    strokeWidth : 5, // - 선의 두께                       
    strokeOpacity : 0.5 // - 선의 투명도               
}); // - polyline 선언, 첫번째 인자는 선이 그려질 점의 위치. 현재는 없음.
oMap.addOverlay(oPolyline); // - 지도에 선을 추가함.         

oMap.attach('mouseenter', function(oCustomEvent) {                       
    var oTarget = oCustomEvent.target;                       
    // 마커위에 마우스 올라간거면                       
    if (oTarget instanceof nhn.api.map.Marker) {                               
        var oMarker = oTarget;                               
        oLabel.setVisible(true, oMarker); // - 특정 마커를 지정하여 해당 마커의 title을 보여준다.                       
    }               
});               
oMap.attach('mouseleave', function(oCustomEvent) {                       
    var oTarget = oCustomEvent.target;                       
    // 마커위에서 마우스 나간거면                       
    if (oTarget instanceof nhn.api.map.Marker) {                               
        oLabel.setVisible(false);                       
    }               
});               
oMap.attach('click', function(oCustomEvent) {                       
    var oPoint = oCustomEvent.point;                       
    var oTarget = oCustomEvent.target;                       
    oInfoWnd.setVisible(false);                       
    // 마커 클릭하면                       
    if (oTarget instanceof nhn.api.map.Marker) {                               
        // 겹침 마커 클릭한거면                               
        if (oCustomEvent.clickCoveredMarker) {                                       
            return;                               
        }                               
        // - InfoWindow 에 들어갈 내용은 setContent 로 자유롭게 넣을 수 있습니다. 외부 css를 이용할 수 있으며,                                
        // - 외부 css에 선언된 class를 이용하면 해당 class의 스타일을 바로 적용할 수 있습니다.                               
        // - 단, DIV 의 position style 은 absolute 가 되면 안되며,                                
        // - absolute 의 경우 autoPosition 이 동작하지 않습니다.                                
        oInfoWnd.setContent('<DIV style="border-top:1px solid; border-bottom:2px groove black; border-left:1px solid; border-right:2px groove black;margin-bottom:1px;color:black;background-color:white; width:auto; height:auto;">'+                                       
                '<span style="color: #000000 !important;display: inline-block;font-size: 12px !important;font-weight: bold !important;letter-spacing: -1px !important;white-space: nowrap !important; padding: 2px 5px 2px 2px !important">' +                                        
                'Hello World <br /> ' + oTarget.getPoint()                                       
                +'<span></div>');                               
        oInfoWnd.setPoint(oTarget.getPoint());                               
        oInfoWnd.setPosition({right : 15, top : 30});                               
        oInfoWnd.setVisible(true);                               
        oInfoWnd.autoPosition();                              
        return;                       
    }     
                     
    var oMarker = new nhn.api.map.Marker(oIcon, { title : '마커 : ' + oPoint.toString() });                       
    oMarker.setPoint(oPoint);                       
    oMap.addOverlay(oMarker);    
                      
    var aPoints = oPolyline.getPoints(); // - 현재 폴리라인을 이루는 점을 가져와서 배열에 저장.                       
    aPoints.push(oPoint); // - 추가하고자 하는 점을 추가하여 배열로 저장함.                       
    oPolyline.setPoints(aPoints); // - 해당 폴리라인에 배열에 저장된 점을 추가함               
});
*/

// 마커 직접추가   
var oMarker = new nhn.api.map.Marker(oIcon, { title : '회사명' });                       
oMarker.setPoint(oSeoulCityPoint);                       
oMap.addOverlay(oMarker); 
oLabel.setVisible(true, oMarker);

// 정보상자 직접추가
/*
oInfoWnd.setContent('<DIV style="border-top:1px solid; border-bottom:2px groove black; border-left:1px solid; border-right:2px groove black;margin-bottom:1px;color:black;background-color:white; width:auto; height:auto;">'+                                       
        '<span style="color: #000000 !important;display: inline-block;font-size: 12px !important;font-weight: bold !important;letter-spacing: -1px !important;white-space: nowrap !important; padding: 2px 5px 2px 2px !important">' +                                        
        'Hello World <br /> '
        +'<span></div>');                               
oInfoWnd.setPoint(oMarker.getPoint());                               
oInfoWnd.setPosition({right : 15, top : 30});                               
oInfoWnd.setVisible(true);                               
oInfoWnd.autoPosition();
*/
</script>