2015. 11. 11. 10:05

네이버 지도 API를 사용할 일이 생겨서 작업을 진행, 그소스를 남겨둡니다.

네이버 API 안내에 있는 소스를 활용하여 부분 수정하였습니다.

참고로 소스중 src="//openapi.map.naver.com~ 부분에서 http: 를 제거하지 않으면

파폭등에서 블럭시켜서 동작을 하지 않는 경우가 있기에 제거하였습니다.

 

 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>네이버 지도 TEST</title>
<script type="text/javascript" src="//openapi.map.naver.com/openapi/naverMap.naver?ver=2.0&key=네이버에서 발급받은 키"></script>
<style>
body {
    height:600px;
    width: 500px;
}
</style>
</head>
<body>
<div id="map" style="border:1px solid $000;"><div>


<script type="text/javascript">
var isShow_Slider = true;
var isShow_MapTypeBtn = true;
var isShow_ThemeMapBtn = true;
var isShow_BicycleGuide = false;
var isShow_TrafficGuide = false;
var isShow_trafficButton = true;
var isRun_userClick = false; //사용자 클릭

var oSeoulCityPoint = new nhn.api.map.LatLng(37.5675451, 126.9773356);
var defaultLevel = 11;
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(800, 480) });


if(isShow_Slider == true){
 var oSlider = new nhn.api.map.ZoomControl();
 oMap.addControl(oSlider);
 oSlider.setPosition({
  top : 10,
  left : 10
 });
}


if(isShow_MapTypeBtn == true){
 var oMapTypeBtn = new nhn.api.map.MapTypeBtn();
 oMap.addControl(oMapTypeBtn);
 oMapTypeBtn.setPosition({
  bottom : 10,
  right : 80
 });
}


if(isShow_ThemeMapBtn == true){
 var oThemeMapBtn = new nhn.api.map.ThemeMapBtn();
 oThemeMapBtn.setPosition({
  bottom : 10,
  right : 10
 });
 oMap.addControl(oThemeMapBtn);
}


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


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


if(isShow_trafficButton == true){
 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 oUserPoint = new nhn.api.map.LatLng(37.5675451, 126.9773356);
var oUserMarker = new nhn.api.map.Marker(oIcon, { title : '서울~'});
oUserMarker.setPoint(oUserPoint);
oMap.addOverlay(oUserMarker);
// 마커라벨 표시
var oUserLabel = new nhn.api.map.MarkerLabel(); // 마커 라벨 선언
oMap.addOverlay(oUserLabel);// 마커 라벨 지도에 추가. 기본은 라벨이 보이지 않는 상태로 추가됨
oUserLabel.setVisible(true, oUserMarker);// 마커 라벨 보이기

 


               
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);
 }
});


if(isRun_userClick == true){

 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); // - 해당 폴리라인에 배열에 저장된 점을 추가함
 });
}
</script>
</body>
</html>

 

Posted by 작은0악마