kakao.map.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. let kakaoMap = {
  2. init: function(id, locate) {
  3. this.formId = id;
  4. this.load(locate);
  5. },
  6. geocoder: null,
  7. schDetailAddrFromCoords: function(coords, callback) {
  8. // 좌표로 법정동 상세 주소 정보를 요청합니다
  9. if(this.geocoder) {
  10. this.geocoder.coord2Address(coords.getLng(), coords.getLat(), callback);
  11. }
  12. },
  13. getMap: function(id) {
  14. var mapContainer = document.getElementById(id), // 지도를 표시할 div
  15. mapOption = {
  16. center: new kakao.maps.LatLng(37.56684, 126.97865), // 지도의 중심좌표
  17. level: 3, // 지도의 확대 레벨
  18. mapTypeId : kakao.maps.MapTypeId.ROADMAP // 지도종류
  19. };
  20. // 지도를 생성한다
  21. var map = new kakao.maps.Map(mapContainer, mapOption);
  22. // 마우스 휠과 모바일 터치를 이용한 지도 확대, 축소를 막는다
  23. map.setZoomable(false);
  24. // 지도에 확대 축소 컨트롤을 생성한다
  25. //var zoomControl = new kakao.maps.ZoomControl();
  26. // 지도의 우측에 확대 축소 컨트롤을 추가한다
  27. //map.addControl(zoomControl, kakao.maps.ControlPosition.RIGHT);
  28. return map;
  29. },
  30. marker: function(map, coords) {
  31. // 지도에 마커를 생성하고 표시한다
  32. marker = new kakao.maps.Marker({
  33. position: coords, // 마커의 좌표
  34. map: map // 마커를 표시할 지도 객체
  35. });
  36. },
  37. load: function(locate) {
  38. var _this = this;
  39. kakao.maps.load(function() {
  40. var map = _this.getMap(_this.formId + '_MAP');
  41. // 주소-좌표 변환 객체를 생성합니다
  42. _this.geocoder = new kakao.maps.services.Geocoder();
  43. if( !locate || locate.length == 0 ) {
  44. // 지도에 마커를 생성하고 표시한다
  45. _this.marker(map, new kakao.maps.LatLng(37.56684, 126.97865));
  46. } else {
  47. // 주소로 좌표를 검색합니다
  48. _this.geocoder.addressSearch(locate, function(result, status) {
  49. // 정상적으로 검색이 완료됐으면
  50. if (status === kakao.maps.services.Status.OK) {
  51. var coords = new kakao.maps.LatLng(result[0].y, result[0].x);
  52. if(_this.formId.lastIndexOf('DETAIL') > -1) {
  53. document.getElementById(_this.formId + '_LAT').value = result[0].y;
  54. document.getElementById(_this.formId + '_LNG').value = result[0].x;
  55. }
  56. // 결과값으로 받은 위치를 마커로 표시합니다
  57. _this.marker(map, coords);
  58. // 지도의 중심을 결과값으로 받은 위치로 이동시킵니다
  59. map.setCenter(coords);
  60. } else {
  61. _this.marker(map, new kakao.maps.LatLng(37.56684, 126.97865));
  62. }
  63. });
  64. }
  65. if(_this.formId.lastIndexOf('DETAIL') > -1) {
  66. _this.listener.drag(map);
  67. }
  68. });
  69. },
  70. listener: {
  71. drag: function(map) {
  72. // 지도 드래깅 이벤트를 등록한다 (드래그 시작 : dragstart, 드래그 종료 : dragend)
  73. kakao.maps.event.addListener(map, 'drag', function () {
  74. kakaoMap.schDetailAddrFromCoords(map.getCenter(), function(result, status) {
  75. if (status === kakao.maps.services.Status.OK) {
  76. document.getElementById(kakaoMap.formId + '_LOTS_ADDRESS').value = result[0].address.address_name ;
  77. document.getElementById(kakaoMap.formId + '_ADRES').value = !!result[0].road_address ? result[0].road_address.address_name : result[0].address.address_name ;
  78. document.getElementById(kakaoMap.formId + '_STREET_ADDRESS').value = !!result[0].road_address ? result[0].road_address.address_name : $('#' + this.formId + '_STREET_ADDRESS').val();
  79. document.getElementById(kakaoMap.formId + '_ZIPNO').value = !!result[0].road_address ? result[0].road_address.zone_no : $('#' + this.formId + '__CMPY_ZIPNO').val() ;
  80. document.getElementById(kakaoMap.formId + '_LAT').value = map.getCenter().getLat();
  81. document.getElementById(kakaoMap.formId + '_LNG').value = map.getCenter().getLng();
  82. // 마커를 클릭한 위치에 표시합니다
  83. marker.setPosition(map.getCenter());
  84. marker.setMap(map);
  85. }
  86. });
  87. /* var message = '지도를 드래그 하고 있습니다. 지도의 중심 좌표는 ' + map.getCenter().toString() +' 입니다.';
  88. console.log(message); */
  89. });
  90. }
  91. },
  92. address: function() {
  93. var _this = this;
  94. new daum.Postcode({
  95. oncomplete: function(data) {
  96. // 전체주소 리턴
  97. document.getElementById(kakaoMap.formId + '_ZIPNO').value = data.zonecode;
  98. document.getElementById(kakaoMap.formId + '_ADRES').value = data.roadAddress;
  99. document.getElementById(kakaoMap.formId + '_LOTS_ADDRESS').value = !!data.autoJibunAddress ? data.autoJibunAddress : data.jibunAddress;
  100. document.getElementById(kakaoMap.formId + '_STREET_ADDRESS').value = data.roadAddress;
  101. document.getElementById(kakaoMap.formId + '_HJ_DONG').value = !!data.hname ? data.hname : data.bname;
  102. document.getElementById(kakaoMap.formId + '_BJ_DONG').value = data.bname;
  103. _this.init(kakaoMap.formId, data.roadAddress);
  104. document.getElementById(kakaoMap.formId + '_ADRES_DTL').focus();
  105. }
  106. }).open();
  107. }
  108. };