원하는 지명을 입력하면 리스트를 보여주고, 리스트에서 원하는 지명을 선택하면 원하는 곳으로 마커와 위치를 이동 시키는 예제입니다.
코드에서는 DEMO_KEY를 사용했는데 실제 사용할 때는 이 DEMO_KEY는 등록한 홈페이지 주소가 다르다고 사용이 안될 것입니다.
개발을 하고자 하시는 분은 apikey 발급을 받으신 후에 코드를 약간 수정하는 것으로 이용하실 수 있습니다.
- <script type="text/javascript" src="http://apis.daum.net/maps/maps3.js?apikey=DAUM_MAPS_DEMO_APIKEY" charset="utf-8"></script>
- <script language="Javascript" type="text/javascript">
- var daumLocalSearch = {
- /** 초기화. **/
- init : function(){
- this.apikey = "DAUM_LOCAL_DEMO_APIKEY"
- this.q = document.getElementById('daumLocalSearch');
- this.v = document.getElementById('daumLocalView');
- this.s = document.getElementById('daumLocalScript');
- },
- /** 검색 **/
- search : function(){
- this.query = '?apikey=' + this.apikey + '&output=json&q=' + encodeURI(this.q.value);
- //검색어에 맞게 각각 첫페이지를 띄움.
- this.pingSearch(1);
- },
- /** callback 함수 호출. **/
- pingSearch : function(ds, api, pgno, callback, result){
- this.s.innerHTML = "";
- var s = document.createElement('script');
- s.type = 'text/javascript';
- s.charset = 'utf-8';
- s.src = 'http://apis.daum.net/local/geo/addr2coord' + this.query + '&callback=daumLocalSearch.pongSearch&result=50';
- this.s.appendChild(s);
- },
- /** 결과를 뿌려줌. **/
- pongSearch : function(z){
- this.v.innerHTML ="";
- var ul = document.createElement('ul');
- for(var i=0; i<z.channel.item.length; i++){
- var li = document.createElement('li');
- var a = document.createElement('a');
- a.href = 'javascript:daumMap.searchMark(' + z.channel.item[i].point_y + ',' + z.channel.item[i].point_x + ')';
- a.innerHTML = daumLocalSearch.escapeHtml(z.channel.item[i].title)
- li.appendChild(a);
- ul.appendChild(li);
- }
- this.v.appendChild(ul);
- },
- /** HTML태그 안 먹게 하는 함수 **/
- escapeHtml: function (str) {
- str = str.replace(/&/g, "&");
- str = str.replace(/</g, "<");
- str = str.replace(/>/g, ">");
- return str;
- }
- };
- /** 다음 Map **/
- var daumMap = {
- init : function(lat,lng){
- this.map = new daum.maps.Map(document.getElementById('daumMapView'), {
- center: new daum.maps.LatLng(lat,lng),
- level:4
- });
- this.zoomControl = new daum.maps.ZoomControl();
- this.map.addControl(this.zoomControl, daum.maps.ControlPosition.RIGHT);
- this.mapTypeControl = new daum.maps.MapTypeControl();
- this.map.addControl(this.mapTypeControl, daum.maps.ControlPosition.TOPRIGHT);
- this.marker = new daum.maps.Marker({position: new daum.maps.LatLng(lat, lng)});
- this.marker.setMap(this.map);
- },
- searchMark : function(lat,lng){
- var po = new daum.maps.LatLng(lat, lng);
- this.map.panTo(po);
- this.marker.setPosition(new daum.maps.LatLng(lat,lng));
- }
- }
- window.onload = function () {
- daumMap.init(37.566419230900905,126.97787415510291);
- daumLocalSearch.init();
- daumLocalSearch.search();
- };
- </script>
- <div id="daumLocalForm">
- <input id="daumLocalSearch" type="text" value="서울" onkeydown="javascript:if(event.keyCode == 13) daumLocalSearch.search();"/>
- <input id="daumLocalSubmit" type="submit" value="검색"
- onclick="javascript:daumLocalSearch.search()"/>
- </div >
- <div id="daumLocalView" style="float:left; overflow-x:hidden; overflow-y:scroll; width:300px; height:480px; padding:10px;"></div>
- <div id="daumMapView" style="width:500px;height:500px;"></div>
- <div id="daumLocalScript"></div>
멋지네요.. 수고가 많습니다.
답글삭제이벤트 리스너를 붙일때 어떻게 해야나요?
다음 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 에서 확인 하실 수 있습니다.