주소지에 따라 네이버 api 지도 자동 표시하기
주소지에 따라 네이버api를 이용하여 지도를 표시하고 해당 지점에 마커를 표시해 주는 걸 만들어 보았습니다.
네이버api이용 지도표시 및 마커 표시는 Kwang Jae Lee님의 블로그글을 참조하였습니다.
제가 만들려고 하는 것의 포인트는 주소지에 따른 네이버 위,경도를 구하여 지도를 생성하고 마커를 표시해 주는데 있겠습니다.
먼저, https://dev.naver.com/openapi/register 에서 키값을 생성합니다.
아래 소스는 실제 적용될 페이지 소스입니다.
'mapContainer' 영역에 맵이 생성됩니다.
입력되는 주소지는 빈칸이 없도록 수정후 넣어주세요.
<script type="text/javascript" src="http://openapi.map.naver.com/openapi/naverMap.naver?ver=2.0&key=openapi키값"></script>
<SCRIPT LANGUAGE="JavaScript">
<!--
$(document).ready(function(){
var addr="<?=$address2?>"; // 주소지를 넣어줍니다.
$.post("get_map.php","addr="+addr,function(data) {
var x=$(data).find('x').eq(0).text();
var y=$(data).find('y').eq(0).text();
var oPoint = new nhn.api.map.LatLng(y, x);
nhn.api.map.setDefaultPoint('LatLng');
oMap = new nhn.api.map.Map('mapContainer', {
center : oPoint,
level : 13, // - 초기 줌 레벨은 10이다.
enableWheelZoom : true,
enableDragPan : true,
enableDblClickZoom : false,
mapMode : 0,
activateTrafficMap : false,
activateBicycleMap : false,
activateRealtyMap : true,
minMaxLevel : [ 1, 14 ],
size : new nhn.api.map.Size(430, 230)
});
var mapZoom = new nhn.api.map.ZoomControl(); // - 줌 컨트롤 선언
mapZoom.setPosition({left:20, bottom:20}); // - 줌 컨트롤 위치 지정.
oMap.addControl(mapZoom); // - 줌 컨트롤 추가.
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);
// - Draggable Marker 의 경우 Icon 인자는 Sprite Icon이 된다.
// - 따라서 Sprite Icon 을 사용하기 위해 기본적으로 사용되는 값을 지정한다.
// - Sprite Icon 을 사용하기 위해서 상세한 내용은 레퍼런스 페이지의 nhn.api.map.SpriteIcon 객체를 참조하면 된다.
var oMarker1 = new nhn.api.map.Marker(oIcon, { title : '마커이름' }); //마커 생성
oMarker1.setPoint(oPoint); //마커 표시할 좌표 선택
oMap.addOverlay(oMarker1); //마커를 지도위에 표현
var oLabel1 = new nhn.api.map.MarkerLabel(); // - 마커 라벨 선언.
oMap.addOverlay(oLabel1); // - 마커 라벨 지도에 추가. 기본은 라벨이 보이지 않는 상태로 추가됨.
oLabel1.setVisible(true, oMarker1); // 마커 라벨 보이기
});
});
//-->
</SCRIPT>
<div id='mapContainer' style='width:430px;height:230px;'></div>
위 소스에서 주소지를 가지고 위,경도를 구해오는 부분은 아래 부분입니다.
$.post("get_map.php","addr="+addr,function(data) {
var x=$(data).find('x').eq(0).text();
var y=$(data).find('y').eq(0).text();
위 소스는 get_map.php 파일로 addr 즉 주소지를 보낸다음 위,경도가 포함된 정보를 받아온 다음 위, 경도만 분리해 내는 것입니다.
get_map.php 파일 내용은 아래와 같습니다.
<?
include "./Snoopy.class.php";
$addr=urldecode($addr);
$url="http://openapi.map.naver.com/api/geocode.php?key=키값&encoding=utf-8&coord=latlng&query=".$addr;
$snoopy = new Snoopy;
$snoopy->fetch($url);
$content=$snoopy->results;
echo $content;
?>
Ajax로 파일내용을 불러오는건 같은 도메인내의 파일만 가능하여 직접 네이버주소를 불러오지 못하기 때문에 위와 같이 snoopy class를 이용하여 외부 페이지를 불러온 다음 그 내용을 Ajax로 불러오는 것입니다. 다른 용도로도 많이 이용이 가능한 부분입니다.
위 소스에서 coord 값으로 좌표체계를 지정해 줄 수 있습니다.
네이버 지도api에서 좌표체계는 다음과 같습니다.
nhn.api.map.LatLng : 위도/경도 좌표
[nLat: 30.3466388~30.3466388(?), Lng: 116.1252694~137.3551916]
nhn.api.map.TM128 : TM128 좌표
[nX: -550015~1301577, nY: -211785~1351112]
nhn.api.map.UTMK : UTMK 좌표
[nX: 90107~1949489, nY: 1192895~2745468]
'jQuery' 카테고리의 다른 글
input button type의 활성화, 비활성화 (0) | 2012.05.30 |
---|---|
id element 삭제하기 (0) | 2012.05.24 |