var dpMouseX = 0; var dpMouseY = 0; var movement = 0; //지도 초기화 시키는 이벤트 function MapOnCreate() { //라이센스 파일 경로 Map.LicenseInfoPath = defaultLicense; //맵데이타 Map.DataMan.MapDataPath = defaultMPath; //테마경로 Map.DataMan.ThemePath = defaultTPath; //기본테마파일 Map.ThemeMan.FileName = defaultTFile; //기본 어드민파일정보 Map.AdminMan.FileName = defaultAFile; // Map.AdminMan.DrawAdmin = true; //Map.AdminMan.BFileName = defaultBFile; //나침반 이미지 Map.CompassMan.ImagePath = defaultCIFile; //IndexMap을 보여준다. Map.IndexMap.Visible = true; //지도의 상태를 저장한다. Map.CtrlMan.AutoConditionSave = true; // 200 usec 이상 지도를 그리는 속도가 넘으면, Image Move를 한다. Map.CtrlMan.MapDragMode = 200; // 14 Level을 논리적으로 나누어, 54 Level로 Wheel을 이용해 조정한다. Map.CtrlMan.UseDetailLevel = true; //기존의 정보를 복원하는 함수 Map.CtrlMan.RestoreCondition(); //지도위에 문자를 보여준다. Map.MapMan.ShowTextHint = 0; // 보이는 문자만 Hint 표시 1(전체), 0(보이지 않음) // GIF Image를 사용하는 경우 GIF의 Animation을 조절한다. Map.AnimationInterval = 500; if (Map.CtrlMan.BirdView) { Map.CtrlMan.ViewCenter = 70; } else { Map.CtrlMan.ViewCenter = 50; } // Layer, POI 등의 표출을 빨리 처리 할 수 있다. Map.TripleBuffered = true; Map.SetFocus(); Map.ShowHint = true; ShowIndexMap(0); //콤보박스 기본셋팅 ChangeAdmin(1, false); // POI의 Image가 GIF인경우 Image의 뒤배경을 관리한다. Map.POIMan.SaveBackImage = 1; //지도위에 올려놓을 이미지를 미리 선언 Map.ImageMan.PrepareRotationImage("http://www.smartmap.co.kr/tutorial/image/poi/car.png","car",2, Map.Util.RGBColor(255,0,255)); Map.ImageMan.PrepareImage("http://www.smartmap.co.kr/tutorial/image/poi/taxi.bmp", "start"); Map.ImageMan.PrepareImage("http://www.smartmap.co.kr/tutorial/image/poi/taxi_s.bmp", "player"); Map.ImageMan.PrepareImage("http://www.smartmap.co.kr/tutorial/image/poi/add.gif", "add"); // Map.IndexMap.SetPositionImage("http://www.smartmap.co.kr/tutorial/image/small_balls.bmp", 1); // Progress Bar 설정 // Map.UIMan.ProgressBar_Visible = true; // Map.UIMan.ProgressBar_Type = 1; // Graphic // Map.MapMan.UseMinMaxLevelText = 1; } //지도 상태변경시 호출되는 함수 function MapOnStateChange(Type, Value) { if (Type == Map.Util.ConstToValue("SMSC_LEVEL")) { DrawLevel(); } else if (Type == Map.Util.ConstToValue("SMSC_ZOOM")) { } else if (Type == Map.Util.ConstToValue("SMSC_DISPSIZE")) { ShowIndexMap(0); } else if (Type == Map.Util.ConstToValue("SMSC_INDEXMAP")) { ChangeIndexMap(Value); } } function MapOnPopupMenu(Index, Caption, Contents) { var vector = Map.PopupMenu.PopupPoint; var coord = Map.DPToCoord(vector.X, vector.Y); if (Index < 10) { // 객체 메뉴 if (Map.CtrlMan.Mode == Map.Util.ConstToValue("SMM_ManMode")) { var obj = Map.LayerMan.HitTest(vector.X, vector.Y, true); if (obj != null) { if (obj.Type == Map.Util.ConstToValue("SMOT_POLYGON")) { // var polygon = Map.LayerMan.CastToPolygon(obj); var polygon = obj; if (Index == 1) { polygon.SeparateLine(vector.X, vector.Y); } else if (Index == 2) { polygon.DeleteDPPoint(vector.X, vector.Y); } else if (Index == 3) { Map.LayerMan.DeleteObject2(obj); } } } } } else { if (Contents != "") { eval(Contents); } } } //지도 위에서 마우스 이동시 발생하는 이벤트 function MapOnMouseMove(Shift, X, Y) { dpMouseX = X; dpMouseY = Y; var coord = Map.DPToCoord(X, Y); Map.AdminMan.SetAdminPos(coord.tmX, coord.tmY); var lon = Map.Util.TrimRight(coord.StrLon, ".") + "″"; // 소수점 초를 삭제한다. var lat = Map.Util.TrimRight(coord.StrLat, ".") + "″"; // 소수점 초를 삭제한다. var adminname = ""; if (Map.AdminMan.InAdmin) { adminname = Map.Util.ReplaceStr(Map.AdminMan.AdminName, "/", " "); } //coord = BesselTOWGS84(coord); //var tmpX = coord.StrLon; //var tmpY = coord.StrLat; tmpX = coord.tmX; tmpY = coord.tmY; //window.status='경도:'+tmpX+'('+coord.DegreeLon.toString().substring(0, 12)+') 위도:'+tmpY+'('+coord.DegreeLat.toString().substring(0, 12)+') 주소:'+adminname;return true; window.status = '주소 :' + adminname; } function MapOnMouseUp(Button, Shift, X, Y) { if (Button == Map.Util.ConstToValue("mbRight")) { var menu = Map.PopupMenu; var idx = 0; menu.Clear(); menu.SetImageList("http://www.eksys.co.kr/map/image/popupimage.bmp", 16, 16, Map.Util.RGBCOLOR(255, 0, 255)); if (Map.ActiveMan && Map.ActiveMan.ManName == "LayerMan") { var obj = Map.LayerMan.HitTest(X, Y, true); if (obj && obj.Type == Map.Util.ConstToValue("SMOT_POLYGON")) { menu.NewMenuItem(1, -1, "선나누기", -1, "Layer_SepLine()"); menu.NewMenuItem(2, -1, "점 삭제", -1, "Layer_DeletePos()"); menu.NewMenuItem(3, -1, "객체 삭제", -1, "Layer_Delete()"); menu.NewMenuItem(4, -1, "-", -1, ""); var hr = obj.HitTest(X, Y); if (hr == Map.Util.ConstToValue("SMHR_LINE")) { menu.SetEnabled(2, false); } else if (hr == Map.Util.ConstToValue("SMHR_IN")) { menu.SetEnabled(1, false); menu.SetEnabled(2, false); } else if (hr >= 0) { menu.SetEnabled(1, false); } } } menu.NewMenuItem(10, -1, "지도 확대", 1, "ZoomIn()"); menu.NewMenuItem(11, -1, "지도 축소", 2, "ZoomOut()"); menu.NewMenuItem(12, -1, "지도 회전", 3, "Rotate()"); menu.NewMenuItem(-1, -1, "-", -1, ""); menu.NewMenuItem(20, -1, "조망 보기", 9, "BirdView()"); menu.NewMenuItem(21, -1, "입체 보기", 10, "View3D()"); menu.NewMenuItem(-1, -1, "-", -1, ""); menu.NewMenuItem(30, -1, "거리 계산", 11, "CheckDistance()"); menu.NewMenuItem(31, -1, "면적 계산", 12, "CheckArea()"); menu.NewMenuItem(32, -1, "객체 편집", 13, "ObjectModify()"); menu.NewMenuItem(33, -1, "거리/면적 삭제", 14, "DelDistance()"); menu.NewMenuItem(-1, -1, "-", -1, ""); idx = menu.NewMenuItem(40, -1, "보내기", -1, ""); menu.NewMenuItem(41, idx, "클립보드 복사", 16, "CopyToClipboard()"); menu.NewMenuItem(42, idx, "지도 저장하기", 17, "javascript:SaveImage(1)"); menu.NewMenuItem(-1, -1, "-", -1, ""); menu.NewMenuItem(50, -1, "행정동 폴리곤", -1, "AdminPolygon(1, coord.Lon, coord.Lat)"); menu.NewMenuItem(-1, -1, "-", -1, ""); idx = menu.NewMenuItem(90, -1, "설정", -1, ""); menu.NewMenuItem(91, idx, "색인지도 보기", -1, "ShowIndexMap(-2)"); menu.NewMenuItem(92, idx, "반경 보기", -1, "ToggleThemeMisc(126)"); menu.NewMenuItem(-1, -1, "-", -1, ""); idx = menu.NewMenuItem(2000, -1, "테마 관리", -1, ""); menu.NewMenuItem(2100, idx, "관리창 보기", -1, "Map.ThemeMan.ShowForm()"); if (Map.IndexMap.Visible) menu.SetChecked(91, true); menu.PopupMenu(X, Y); } else if (Button == Map.Util.ConstToValue("mbLeft")) { if (Map.AdminMan.InAdmin) { var code = Map.AdminMan.AdminCode; // 10자리 - 도(2자리), 구(3자리), 동(5자리) var tcode= code.substring(0, 2); if (tcode != AdminDo.value) { for (i = 0; i < AdminDo.length; i++) { if (AdminDo.options[i].value == tcode) { AdminDo.options[i].selected = true; break; } } if (AdminDo.value != "") ChangeAdmin(1, false); } tcode = code.substring(0, 5); if (tcode != AdminGu.value) { for (i = 0; i < AdminGu.length; i++) { if (AdminGu.options[i].value == tcode) { AdminGu.options[i].selected = true; break; } } if (AdminGu.value != "") ChangeAdmin(2, false); } tcode = code; if (tcode != AdminGu.value) { for (i = 0; i < AdminDong.length; i++) { if (AdminDong.options[i].value == tcode) { AdminDong.options[i].selected = true; break; } } } } else { AdminDo.value = ""; AdminGu.options.length = 0; AdminGu.options[0] = new Option("--선택--", ""); AdminDong.options.length = 0; AdminDong.options[0] = new Option("--선택--", ""); } } } //지역이동콤보박스클릭시 호출되는 함수 function ChangeAdmin(Type, IsEvent) { if (Type == 0) { AdminDo.options.length = 0; var adminlist = Map.AdminMan.GetAdminList("", false); // No name sort for (i=0; i < adminlist.Count; i++) { var value = adminlist.Value(i); var oOption = document.createElement("OPTION"); oOption.text = value.String2; oOption.value = value.String1; AdminDo.add(oOption); } AdminDo.selectedIndex = 0; ChangeAdmin(1, false); Map.SetFocus(); } else if (Type == 1) { if (AdminDo.value == "") { AdminGu.options.length = 0; AdminGu.options[0] = new Option("--선택--", ""); AdminDong.options.length = 0; AdminDong.options[0] = new Option("--선택--", ""); } else if (AdminDo.options.length > 0) { AdminGu.options.length = 0; var adminlist = Map.AdminMan.GetAdminList(AdminDo.options[AdminDo.selectedIndex].value, true); // name sort // alert(AdminDo.options[AdminDo.selectedIndex].value); for (i=0; i < adminlist.Count; i++) { var value = adminlist.Value(i); var oOption = document.createElement("OPTION"); oOption.text = value.String2; oOption.value = value.String1; AdminGu.add(oOption); } AdminGu.selectedIndex = 0; ChangeAdmin(2, false); if (IsEvent) { Map.AdminMan.GotoAdmin(AdminDo.options[AdminDo.selectedIndex].value, true); Map.SetFocus(); } } } else if (Type == 2) { if (AdminGu.options.length > 0) { AdminDong.options.length = 0; var adminlist = Map.AdminMan.GetAdminList(AdminGu.options[AdminGu.selectedIndex].value, true); // name sort for (i=0; i < adminlist.Count; i++) { var value = adminlist.Value(i); var oOption = document.createElement("OPTION"); oOption.text = value.String2; oOption.value = value.String1; AdminDong.add(oOption); } AdminDong.selectedIndex = 0; if (IsEvent) { Map.AdminMan.GotoAdmin(AdminGu.options[AdminGu.selectedIndex].value, true); Map.SetFocus(); } } } else if (Type == 3) { if (AdminDong.options.length > 0) { if (IsEvent) { Map.AdminMan.GotoAdmin(AdminDong.options[AdminDong.selectedIndex].value, true); Map.AdminMan.AdminCode = AdminDong.options[AdminDong.selectedIndex].value; var center; center = Map.AdminMan.AdminCenter; Map.SetFocus() } } } } //indexmap 호출되는 함수 // 1 (Show), 0 (Reposition), -1 (Hide) function ShowIndexMap(Value) { var indexmap = Map.IndexMap; if (!indexmap.UseDefaultPos) { if (Value == -2) { // Toggle indexmap.Visible = !indexmap.Visible; } else { if (Value != 0) indexmap.Visible = (Value > 0); } if (indexmap.Visible) { indexmap.Left = Map.Width - indexmap.Width - 10; indexmap.Top = Map.Height - indexmap.Height - 50; if (indexmap.IsIconic) { indexmap.Left -= 2; indexmap.Top -= 2; } } } } function ChangeIndexMap(Value) { if (Value == 5 || Value == 6) { ShowIndexMap(0); } } //좌표변경시 호출되는 함수 function DoMinToTM(lat,lon) { var coord = Map.Coord; coord.CoordType = 1; coord.DoMinLat = lat; coord.DoMinLon = lon; coord.CoordType = 0; return coord; } //좌표변경시 호출되는 함수 function TMToDoMin(tmX, tmY) { var coord = Map.Coord; coord.CoordType = 0; coord.tmX = tmX; coord.tmY = tmY; coord.CoordType = 1; return coord; } function BesselTOWGS84(xcoord) { var coord = Map.Coord; coord.CoordType = 0; coord = xcoord; coord.CoordType = 1; return coord; } //이미지로 복사하는 함수 function CopyToClipboard() { Map.MapImage.CopyToClipboard(); } //이미지로 저장하는 함수 function SaveImage(type) { // OpenDialog도 같은 형식으로 처리하면됨. if (type == 1) { // Raster Image var path = Map.Util.SaveDialog("이미지 저장", "C:\\", "MapImage.png", "Windows Bitmap Image (*.bmp)|*.BMP|PNG Image (*.png)|*.PNG|Jpeg Image (*.jpg)|*.JPG"); if (path != "") { Map.MapImage.SaveToFile(path); } } else if (type == 2) { // Meta Image var path = Map.Util.SaveDialog("메타 이미지 저장", "C:\\", "MapImage.emf", "Windows Enhanced Meta Image (*.emf)|*.EMF"); if (path != "") { var image = Map.MapMetaImage(1250/*Width*/, 750/*Height*/, 1, 0); if (image != null) { image.SaveToFile(path); } else { alert("Meta Image를 생성 할 수 없습니다."); } } } } //지도 중앙으로 이동하는 함수 function Map_Center(tmX, tmY) { Map.CenterTMX = tmX; Map.CenterTMY = tmY; Map.focus(); } //버드뷰로 보는 함수 function BirdView() { Map.CtrlMan.BirdView = !Map.CtrlMan.BirdView; if (Map.CtrlMan.BirdView) { Map.CtrlMan.ViewCenter = 70; } else { Map.CtrlMan.ViewCenter = 50; } } //3D로 보는 함수 function View3D() { Map.MapMan.Show3DBuilding = !Map.MapMan.Show3DBuilding; } //지도 회전하는 함수 function Rotate() { if (Map.CtrlMan.RotationAngle != 0) Map.CtrlMan.RotationAngle = 0; else Map.CtrlMan.SetModeRotation(); } //이전화면으로 이동하는 함수 function HistoryPrev() { Map.CtrlMan.HistoryPrev(); } //다음화면으로 이동하는 함수 function HistoryNext() { Map.CtrlMan.HistoryNext(); } //줌인하는 함수 function ZoomIn() { if (Map.CtrlMan.Level <= 0) return; Map.CtrlMan.Level = Map.CtrlMan.Level - 1; } //줌아웃하는 함수 function ZoomOut() { if (Map.CtrlMan.Level >= 13) return; Map.CtrlMan.Level = Map.CtrlMan.Level + 1; } //폴리곤 그리는 함수 function DrawPolygon(ColorR, ColorG, ColorB) { var layer = Map.LayerMan.FindLayer(1); if (layer == null) layer = Map.LayerMan.NewLayer(1); if (layer != null) { var obj = layer.NewPolygon(-1); if (obj != null) { obj.Closed = true; obj.StartArrow = 4; // 원 obj.EndArrow = 4; // 마름모 obj.PenStyle = Map.Util.ConstToValue("PS_SOLID"); obj.PenWidth = 1; obj.PenColor = Map.Util.RGBCOLOR(150, 150, 150); obj.Pen2Color = Map.Util.RGBCOLOR(255, 0, 0); obj.BrushStyle = Map.Util.ConstToValue("BS_SOLID"); obj.BrushColor = Map.Util.RGBCOLOR(255, 255, 0); obj.HatchStyle = Map.Util.ConstToValue("HS_FDIAGONAL"); obj.ROP2Mode = Map.Util.ConstToValue("R2_MASKPEN"); obj.EnableStyle = true; Map.LayerMan.SetModeNewObject(); Map.LayerMan.ActiveObject = obj; var mpos = Map.Util.MousePos; mpos.X = 400; mpos.Y = 400; Map.Util.MousePos = mpos; Map.CtrlMan.DisplayMessage("마우스 오른쪽 버튼을 클릭하면, 종료됩니다.", 10000, true); } } } //폴리라인 그리는 함수 function DrawPolyline() { var layer = Map.LayerMan.FindLayer(1); if (layer == null) layer = Map.LayerMan.NewLayer(1); if (layer != null) { var obj = layer.NewPolygon(-1); if (obj != null) { obj.StartArrow = 1; // 원 obj.EndArrow = 2; // 마름모 obj.PenStyle = Map.Util.ConstToValue("PS_SOLID"); obj.PenWidth = 10; obj.PenColor = Map.Util.RGBCOLOR(150, 150, 150); obj.Pen2Style = Map.Util.ConstToValue("PS_SOLID"); obj.Pen2Width = 3; obj.Pen2Color = Map.Util.RGBCOLOR(255, 255, 255); obj.BrushStyle = Map.Util.ConstToValue("BS_SOLID"); obj.BrushColor = Map.Util.RGBCOLOR(255, 255, 0); obj.HatchStyle = Map.Util.ConstToValue("HS_FDIAGONAL"); obj.ROP2Mode = Map.Util.ConstToValue("R2_MASKPEN"); obj.EnableStyle = true; Map.LayerMan.SetModeNewObject(); Map.LayerMan.ActiveObject = obj; var mpos = Map.Util.MousePos; mpos.X = 400; mpos.Y = 400; Map.Util.MousePos = mpos; Map.CtrlMan.DisplayMessage("마우스 오른쪽 버튼을 클릭하면, 종료됩니다.", 10000, true); } } } //폴리곤 객체 삭제하는 함수 function RemovePolygon() { var layer = Map.LayerMan.FindLayer(1); if (layer != null) { layer.Clear(); // Layer 1의 모든 객체를 삭제한다. } } //폴리곤 객체 수정하는 함수 function ObjectModify() { if (Map.CtrlMan.GetMode() == 0) { Map.LayerMan.SetModeEditLayer(); } else { Map.CtrlMan.SetModeDefault(); } } function CheckArea() { var layer = Map.LayerMan.NewLayer(2); if (layer == null) layer = Map.LayerMan.FindLayer(2); if (layer != null) { var obj = layer.NewPolygon(-1); if (obj != null) { obj.Closed = true; obj.ShowArea = true; obj.PenStyle = Map.Util.ConstToValue("PS_SOLID"); obj.PenWidth = 2; obj.PenColor = Map.Util.RGBCOLOR(255, 0, 0); obj.BrushStyle = Map.Util.ConstToValue("BS_SOLID"); obj.BrushColor = Map.Util.RGBCOLOR(255, 255, 0); obj.HatchStyle = Map.Util.ConstToValue("HS_FDIAGONAL"); obj.ROP2Mode = Map.Util.ConstToValue("R2_MASKPEN"); obj.EnableStyle = true; Map.LayerMan.SetModeNewObject(); Map.LayerMan.ActiveObject = obj; var mpos = Map.Util.MousePos; mpos.X = 400; mpos.Y = 400; Map.Util.MousePos = mpos; } } } function CheckDistance() { var layer = Map.LayerMan.NewLayer(2); if (layer == null) layer = Map.LayerMan.FindLayer(2); if (layer != null) { var obj = layer.NewPolygon(-1); if (obj != null) { obj.caption ="test"; obj.ShowCaption = 0; //obj.ShowDistance = true; obj.StartArrow = 4; // 원 obj.EndArrow = 4; // 마름모 obj.PenStyle = Map.Util.ConstToValue("PS_SOLID"); obj.PenWidth = 2; obj.PenColor = Map.Util.RGBCOLOR(255, 0, 0); obj.BrushStyle = Map.Util.ConstToValue("BS_SOLID"); obj.BrushColor = Map.Util.RGBCOLOR(255, 255, 0); obj.HatchStyle = Map.Util.ConstToValue("HS_FDIAGONAL"); obj.ROP2Mode = Map.Util.ConstToValue("R2_MASKPEN"); obj.EnableStyle = true; Map.LayerMan.SetModeNewObject(); Map.LayerMan.ActiveObject = obj; var mpos = Map.Util.MousePos; mpos.X = 400; mpos.Y = 400; Map.Util.MousePos = mpos; } } } function DelDistance() { var layer = Map.LayerMan.FindLayer(2); if (layer != null) { layer.Clear(); // Layer 2의 모든 객체를 삭제한다. } } //테마관리창 보이는 함수 function ShowTheme() { Map.ThemeMan.ShowForm(); } //지도위에 글씨보이는 함수 function ViewText() { Map.MapMan.ShowText = !Map.MapMan.ShowText; } //지도 레벨 변경시 이미지 교체하는 함수 function DrawLevel(){ var imgid = "slevel"; var imgname = "z"; for(i=0; i<=13; i++){ num = i; if(num < 10){ num = "0"+i; } if(i == Map.Level) { eval(imgid+num).src = "./image/icon/"+imgname+num+"_on.gif"; } else { eval(imgid+num).src = "./image/icon/"+imgname+num+".gif"; } } }