|
지도 API |
작성일 : 2012. 03. 16 |
작성자 : 김용운 |
지도 API를 사용하기 전에 |
|
먼저 key를 발급 받고 새 웹사이트 URL 주소를 위 그림과 같이 일치시켜 줍니다.
이렇게 해주지 않으면 지도를 불러올 수 없습니다.
(제 key는 문서작성을 위해 지워두었습니다.)
----ver03.13
지도 캡쳐화면1 |
|
1. TrackBar 를 이용한 지도 배율 조절
2. 원하는 지역에 아이콘을 추가할 수 있다.
- 저장 가능
3. 검색 API 를 이용해 찾고자 하는 지역을 구역 별로 검색할 수 있다.
- 클릭 시 그 지역으로 이동
- 마우스를 클릭한 곳의 좌표를 얻어오기 위해 많은 시도를 해 보았으나 실패.
---ver 03.15
지도 캡쳐화면2 |
|
지도를 클릭후 위치 저장 버튼을 누르면 DB에 저장되고 저장된 리스트가 listBox에 추가됩니다.
위치 저장 버튼을 눌러주지 않을 경우 DB에 저장되지 않습니다.
리스트를 클릭하면 해당 좌표로 이동됩니다.
DB에 추가되어있는 즐겨찾기 리스트 |
|
DaumMapPage.aspx 스크립트 코드 |
<script type="text/xxjavascript"> var map //맵 var marker //마크 var latLng //클릭한 곳의 좌표 window.[안내]태그제한으로등록되지않습니다-xxonload = function () { var position = new daum.maps.LatLng(37.537123, 127.005523); map = new daum.maps.Map(document.getElementById('map'), { center: position, level: 3, mapTypeId: daum.maps.MapTypeId.HYBRID, scrollwheel: true });
daum.maps.event.addListener(map, "dragstart", function () { latLng = MakeLatLng(0, 0); });
daum.maps.event.addListener(map, "click", function (MouseEvent) {//클릭이벤트 등록 latLng = MouseEvent.latLng;
marker = new daum.maps.Marker({ //클릭 시 마커 생성 position: latLng }); marker.setMap(map); }); };
function setMark(lat, lng) { var LatLng = new daum.maps.LatLng(lat, lng); var Marker = new daum.maps.Marker({ position: LatLng }); //alert(Marker); Marker.setMap(map); }
function getLat() { return latLng.getLat(); }
function getLng() { return latLng.getLng(); }
function setCenter(y, x) { var latLng = MakeLatLng(y, x); map.setCenter(latLng); }
function MakeLatLng(latitude, longitude) { return new daum.maps.LatLng(latitude, longitude); }
function getCenter() {//중심 좌표를 반환한다. return map.getCenter(); }
function setLevel(level) { map.setLevel(level); }
function MakeMarker(latLng) {//마커를 생성한다 return new daum.maps.Marker({ position: latLng }); } </script> |
Form Class의 코드 |
public partial class Form1 : Form { StoreForm sf = null;
SqlConnection scon = null; SqlCommand scom = null;
public Form1() { InitializeComponent(); }
private void SetMarks() { StartConnect();
string query = string.Format("Select * from LatLng"); scom.CommandText = query; SqlDataReader sr = scom.ExecuteReader();
object[] objs = new object[2];
HtmlDocument hdoc = webBrowser1.Document; while (sr.Read()) { objs[0] = double.Parse(sr["Lat"].ToString()); objs[1] = double.Parse(sr["Lng"].ToString());
hdoc.InvokeScript("setMark", objs); }
scon.Close(); }
private void SearchBT_Click(object sender, EventArgs e) { string str = HttpUtility.UrlEncode(SearchTextBox.Text, Encoding.GetEncoding("utf-8")); string query = string.Format(daum_url, str); listBox1.Items.Clear(); GetQueryList(query); }
private void GetQueryList(string query) { DataTable dt = new DataTable(); dt.ReadXmlSchema("MyMap.xsd");//다음 Xml Schema File 입니다. 따로 배포하겠습니다.
XmlReader xr = XmlReader.Create(query); dt.ReadXml(xr); xr.Close();
foreach (DataRow dr in dt.Rows) { listBox1.Items.Add(new MyLocaleInfo(dr)); } }
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { if (listBox1.SelectedItems.Count == 0) { return; } HtmlDocument hdoc = webBrowser1.Document; try { MyLocaleInfo mi = listBox1.SelectedItem as MyLocaleInfo;
object[] objs = new object[2]; objs[0] = double.Parse(mi.Mapy.ToString()); objs[1] = double.Parse(mi.Mapx.ToString());
hdoc.InvokeScript("setCenter", objs); } catch { StartConnect();
string sel = listBox1.SelectedItem.ToString(); string query = string.Format("Select Lat, Lng from LatLng where Title='{0}'", sel); scom.CommandText = query; SqlDataReader sr = scom.ExecuteReader();
object[] objs = new object[2]; while (sr.Read()) { objs[0] = double.Parse(sr["Lat"].ToString()); objs[1] = double.Parse(sr["Lng"].ToString());
hdoc.InvokeScript("setCenter", objs); }
scon.Close(); } }
private void MyLocationBT_Click(object sender, EventArgs e) { SetMarks(); }
private void trackBar1_Scroll(object sender, EventArgs e) { HtmlDocument hdoc = webBrowser1.Document;
object[] objs = new object[1]; objs[0] = int.Parse((trackBar1.Value).ToString());
hdoc.InvokeScript("setLevel", objs); }
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { HtmlDocument hdoc = webBrowser1.Document; }
void sf_ReturnTextHandler(string str) { sf.Dispose(); sf = null;
HtmlDocument hDoc = webBrowser1.Document; object[] objs = new object[3]; try { objs[0] = hDoc.InvokeScript("getLat", null); objs[1] = hDoc.InvokeScript("getLng", null); objs[2] = str; } catch { } SaveMarkSite(objs); }
private void SaveMarkSite(object[] objs) { string[] latlng = new string[3]; latlng[0] = objs[0].ToString(); latlng[1] = objs[1].ToString(); latlng[2] = objs[2] as string;
StartConnect();
string query = string.Format("Insert Into LatLng values('{0}', '{1}', '{2}')", latlng[0], latlng[1], latlng[2]); scom.CommandText = query; try { scom.ExecuteNonQuery(); scom.Transaction.Commit(); } catch { scom.Transaction.Rollback(); }
scon.Close(); }
private void StartConnect() { scon = new SqlConnection(conStr); scon.Open(); scom = scon.CreateCommand(); scom.Transaction = scon.BeginTransaction(); }
private void ViewMapBT_Click(object sender, EventArgs e) { webBrowser1.Navigate("http://192.168.34.55/kywDaumMap/DaumMapPage.aspx"); }
private void StoreSiteView_Click(object sender, EventArgs e) { listBox1.Items.Clear(); StartConnect();
string query = string.Format("Select Title from LatLng"); scom.CommandText = query; SqlDataReader sr = scom.ExecuteReader();
string str; while (sr.Read()) { str = sr["Title"].ToString(); listBox1.Items.Add(str); }
scon.Close(); SetMarks(); }
private void button1_Click(object sender, EventArgs e) { if (sf == null) { sf = new StoreForm(); sf.ReturnTextHandler += new ReturnText(sf_ReturnTextHandler); sf.ShowDialog(); } } } |
MyLocaleInfo Class 코드 |
class MyLocaleInfo { public string Title { get; private set; } public string Addess { get; private set; } public string Mapx { get; private set; } public string Mapy { get; private set; } public MyLocaleInfo(DataRow dr) { Title = dr["title"] as string; Addess = dr["newAddress"] as string; Mapx = dr["lng"] as string; Mapy = dr["lat"] as string; } public override string ToString() { return Title; } } |
받아서 Form 프로젝트의 Debug 폴더 안에 넣어 주시면 됩니다. ( 다음 API만 해당 )
지도 API 기술문서 ver 2012.03.16.docx
더 자세하게 주석을 달아 놓았으니 이해가 어려우신 분들은 다운받아 보시길 바랍니다.
|