Script / CSS

G1sUtil.js

G1sBlogger.js

G1sNavigationList.js

G1sCode

G1sTagList

Posts List

전체 리스트 ()

2012년 3월 10일 토요일

[Daum API] 다음 Map & Local API 응용

다음DNA에서 제공하는 지도 APILocal API의 간단한 응용입니다.
원하는 지명을 입력하면 리스트를 보여주고, 리스트에서 원하는 지명을 선택하면 원하는 곳으로 마커와 위치를 이동 시키는 예제입니다.


코드에서는 DEMO_KEY를 사용했는데 실제 사용할 때는 이 DEMO_KEY는 등록한 홈페이지 주소가 다르다고 사용이 안될 것입니다.
개발을 하고자 하시는 분은 apikey 발급을 받으신 후에 코드를 약간 수정하는 것으로 이용하실 수 있습니다.
  1. <script type="text/javascript" src="http://apis.daum.net/maps/maps3.js?apikey=DAUM_MAPS_DEMO_APIKEY" charset="utf-8"></script>
  2.  
  3. <script language="Javascript" type="text/javascript">
  4. var daumLocalSearch = {
  5. /** 초기화. **/
  6. init : function(){
  7. this.apikey = "DAUM_LOCAL_DEMO_APIKEY"
  8. this.q = document.getElementById('daumLocalSearch');
  9. this.v = document.getElementById('daumLocalView');
  10. this.s = document.getElementById('daumLocalScript');
  11. },
  12. /** 검색 **/
  13. search : function(){
  14. this.query = '?apikey=' + this.apikey + '&output=json&q=' + encodeURI(this.q.value);
  15. //검색어에 맞게 각각 첫페이지를 띄움.
  16. this.pingSearch(1);
  17. },
  18. /** callback 함수 호출. **/
  19. pingSearch : function(ds, api, pgno, callback, result){
  20. this.s.innerHTML = "";
  21. var s = document.createElement('script');
  22. s.type = 'text/javascript';
  23. s.charset = 'utf-8';
  24. s.src = 'http://apis.daum.net/local/geo/addr2coord' + this.query + '&callback=daumLocalSearch.pongSearch&result=50';
  25. this.s.appendChild(s);
  26. },
  27. /** 결과를 뿌려줌. **/
  28. pongSearch : function(z){
  29. this.v.innerHTML ="";
  30. var ul = document.createElement('ul');
  31. for(var i=0; i<z.channel.item.length; i++){
  32. var li = document.createElement('li');
  33. var a = document.createElement('a');
  34. a.href = 'javascript:daumMap.searchMark(' + z.channel.item[i].point_y + ',' + z.channel.item[i].point_x + ')';
  35. a.innerHTML = daumLocalSearch.escapeHtml(z.channel.item[i].title)
  36. li.appendChild(a);
  37. ul.appendChild(li);
  38. }
  39.  
  40. this.v.appendChild(ul);
  41. },
  42. /** HTML태그 안 먹게 하는 함수 **/
  43. escapeHtml: function (str) {
  44. str = str.replace(/&amp;/g, "&");
  45. str = str.replace(/&lt;/g, "<");
  46. str = str.replace(/&gt;/g, ">");
  47. return str;
  48. }
  49. };
  50.  
  51. /** 다음 Map **/
  52. var daumMap = {
  53. init : function(lat,lng){
  54. this.map = new daum.maps.Map(document.getElementById('daumMapView'), {
  55. center: new daum.maps.LatLng(lat,lng),
  56. level:4
  57. });
  58. this.zoomControl = new daum.maps.ZoomControl();
  59. this.map.addControl(this.zoomControl, daum.maps.ControlPosition.RIGHT);
  60. this.mapTypeControl = new daum.maps.MapTypeControl();
  61. this.map.addControl(this.mapTypeControl, daum.maps.ControlPosition.TOPRIGHT);
  62. this.marker = new daum.maps.Marker({position: new daum.maps.LatLng(lat, lng)});
  63. this.marker.setMap(this.map);
  64. },
  65. searchMark : function(lat,lng){
  66. var po = new daum.maps.LatLng(lat, lng);
  67. this.map.panTo(po);
  68. this.marker.setPosition(new daum.maps.LatLng(lat,lng));
  69. }
  70. }
  71.  
  72. window.onload = function () {
  73. daumMap.init(37.566419230900905,126.97787415510291);
  74. daumLocalSearch.init();
  75. daumLocalSearch.search();
  76. };
  77. </script>
  78.  
  79. <div id="daumLocalForm">
  80. <input id="daumLocalSearch" type="text" value="서울" onkeydown="javascript:if(event.keyCode == 13) daumLocalSearch.search();"/>
  81. <input id="daumLocalSubmit" type="submit" value="검색"
  82. onclick="javascript:daumLocalSearch.search()"/>
  83. </div >
  84.  
  85. <div id="daumLocalView" style="float:left; overflow-x:hidden; overflow-y:scroll; width:300px; height:480px; padding:10px;"></div>
  86. <div id="daumMapView" style="width:500px;height:500px;"></div>
  87. <div id="daumLocalScript"></div>

댓글 2개:

  1. 멋지네요.. 수고가 많습니다.
    이벤트 리스너를 붙일때 어떻게 해야나요?

    답글삭제
    답글
    1. 다음 dna http://dna.daum.net/apis/maps/v3#toc-samples 에서 제공하는 이벤트에 대한 예제 http://dna.daum.net/examples/maps/maps3/event.html 만 보셔도 어떻게 사용하는지 감을 잡으실 수 있으실 겁니다. 예제는 마우스 드래그가 끝나면 드래그가 끝난 지점에 위치값을 아래 칸에 출력해주는 간단한 예제이구요. 소스보기로 보시면 아시겠지만
      daum.maps.event.addListener(map,"dragend",function(){
      var center = map.getCenter();
      document.getElementById("message").innerHTML = "latitude : " + center.getLat() + "
      longitude: " + center.getLng();
      });
      이 부분이구요. map에 "dragend" 이벤트가 발생하면 해당 function을 실행합니다.
      이벤트에 대한 자세한 부분들은 역시 다음 dna의 지도 api 관련 레퍼런스페이지 http://dna.daum.net/apis/maps/v3/reference 에서 확인 하실 수 있습니다.

      삭제