kakao.map.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. let kakaoMap = {
  2. init: function(id, locate, latX, longY) {
  3. this.formId = id;
  4. this.load(locate, latX, longY);
  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, latX, longY) {
  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. var mapMoveFn = function(result) {
  44. var coords = new kakao.maps.LatLng(result.y, result.x);
  45. if(_this.formId.lastIndexOf('DETAIL') > -1) {
  46. document.getElementById(_this.formId + '_LAT').value = result.y;
  47. document.getElementById(_this.formId + '_LNG').value = result.x;
  48. }
  49. // 결과값으로 받은 위치를 마커로 표시합니다
  50. _this.marker(map, coords);
  51. // 지도의 중심을 결과값으로 받은 위치로 이동시킵니다
  52. map.setCenter(coords);
  53. };
  54. if((latX && longY) && (latX !== '' && longY !== '')) {
  55. mapMoveFn({'x':longY, 'y':latX});
  56. } else {
  57. if(!locate || locate.length == 0 ) {
  58. // 지도에 마커를 생성하고 표시한다
  59. _this.marker(map, new kakao.maps.LatLng(37.56684, 126.97865));
  60. } else {
  61. // 주소로 좌표를 검색합니다
  62. _this.geocoder.addressSearch(locate, function(result, status) {
  63. // 정상적으로 검색이 완료됐으면
  64. if (status === kakao.maps.services.Status.OK) {
  65. mapMoveFn(result[0]);
  66. } else {
  67. _this.marker(map, new kakao.maps.LatLng(37.56684, 126.97865));
  68. }
  69. });
  70. }
  71. }
  72. if(_this.formId.lastIndexOf('DETAIL') > -1) {
  73. _this.listener.drag(map);
  74. }
  75. });
  76. },
  77. listener: {
  78. drag: function(map) {
  79. // 지도 드래깅 이벤트를 등록한다 (드래그 시작 : dragstart, 드래그 종료 : dragend)
  80. kakao.maps.event.addListener(map, 'drag', function () {
  81. kakaoMap.schDetailAddrFromCoords(map.getCenter(), function(result, status) {
  82. if (status === kakao.maps.services.Status.OK) {
  83. document.getElementById(kakaoMap.formId + '_LOTS_ADDRESS').value = result[0].address.address_name ;
  84. document.getElementById(kakaoMap.formId + '_ADRES').value = !!result[0].road_address ? result[0].road_address.address_name : result[0].address.address_name ;
  85. document.getElementById(kakaoMap.formId + '_STREET_ADDRESS').value = !!result[0].road_address ? result[0].road_address.address_name : $('#' + this.formId + '_STREET_ADDRESS').val();
  86. document.getElementById(kakaoMap.formId + '_ZIPNO').value = !!result[0].road_address ? result[0].road_address.zone_no : $('#' + this.formId + '__CMPY_ZIPNO').val() ;
  87. document.getElementById(kakaoMap.formId + '_LAT').value = map.getCenter().getLat();
  88. document.getElementById(kakaoMap.formId + '_LNG').value = map.getCenter().getLng();
  89. // 마커를 클릭한 위치에 표시합니다
  90. marker.setPosition(map.getCenter());
  91. marker.setMap(map);
  92. }
  93. });
  94. /* var message = '지도를 드래그 하고 있습니다. 지도의 중심 좌표는 ' + map.getCenter().toString() +' 입니다.';
  95. console.log(message); */
  96. });
  97. }
  98. },
  99. address: function() {
  100. var _this = this;
  101. new daum.Postcode({
  102. oncomplete: function(data) {
  103. // 전체주소 리턴
  104. document.getElementById(kakaoMap.formId + '_ZIPNO').value = data.zonecode;
  105. document.getElementById(kakaoMap.formId + '_ADRES').value = data.roadAddress;
  106. document.getElementById(kakaoMap.formId + '_LOTS_ADDRESS').value = !!data.autoJibunAddress ? data.autoJibunAddress : data.jibunAddress;
  107. document.getElementById(kakaoMap.formId + '_STREET_ADDRESS').value = data.roadAddress;
  108. document.getElementById(kakaoMap.formId + '_HJ_DONG').value = !!data.hname ? data.hname : data.bname;
  109. document.getElementById(kakaoMap.formId + '_BJ_DONG').value = data.bname;
  110. _this.init(kakaoMap.formId, data.roadAddress);
  111. document.getElementById(kakaoMap.formId + '_ADRES_DTL').focus();
  112. }
  113. }).open();
  114. },
  115. simpleAddress: function (formId) {
  116. new daum.Postcode({
  117. oncomplete: function(data) {
  118. // 전체주소 리턴
  119. document.getElementById(formId + '_ZIPNO').value = data.zonecode;
  120. document.getElementById(formId + '_ADRES').value = data.roadAddress;
  121. document.getElementById(formId + '_ADRES_DTL').focus();
  122. }
  123. }).open();
  124. }
  125. };