- AUD팀님이 작성, 2024-01-12에 최종 변경
GeoMap 컴포넌트 사용 가이드
Start Release No : 7.0.400.20230517 / Update Release No : 7.0.400.20231227-11
프로젝트명 : (BCRM#D0732) AUD플랫폼 7 버전 국내지도 개발
작성자 : 황송희, 김예슬 / 검수자 :
기능 정보 |
|
|
|
|
|
|
---|
GeoMap 패치 적용 방법
- 기존 패키지 패치 방법과 동일하게 백업 후 패치를 진행합니다.
- 패치 파일: GeoMap_patch.zip
- 패치 파일 미리보기:
- 패치 파일 덮어쓰기 경로: REPORTPATH(보고서 파일 위치, Admin > 시스템 옵션 > REPORTPATH 확인)
- GeoMap 컴포넌트 사용을 위해 필요한 데이터를 아래의 보고서를 통해 생성합니다.
- 생성 데이터: 지도 GeoJSON 데이터 / 지도 영역 다국어(한국어) 데이터
- 보고서 파일: MAP_DATABASE_생성하기.mtsd
- 보고서 미리보기:
- 보고서를 해당 서버에서 오픈 후, 보고서에서 안내한 대로 1번부터 3번까지의 과정을 진행합니다. 단, 반드시 패치 우선 적용이 필요합니다.
- GeoMap 컴포넌트 사용을 위한 UserComponent 보고서인 GeoMap 컴포넌트(국내지도) 보고서 파일을 다운받아 사용합니다.
- 위 파일은 아래의 경로에서 시연이 가능합니다.
- URL: https://rnd.bimatrix.co.kr/aud7/portal/Content.jsp
- https://rnd.bimatrix.co.kr/aud7/portal/Content.jsp?id=REPBD79BA93FF3F4926BCE3534BB92247F7
- 보고서 위치: 공용 폴더 > 1. 샘플보고서 > 1.1. i-AUD > UserComponent
- 보고서 이름: [GeoMap] MAP_USERCOMPONENT_REPORT
- AddIn 컨트롤의 Component 목록에 GeoMap을 추가합니다.
- i-AUD Designer에서 신규 보고서를 생성하여 아래의 규칙을 따라 GeoMap 컴포넌트를 사용합니다.
- UserComponent 컨트롤을 생성하여, 우측 PropertyGrid의 Base > Source 를 3번 과정에서 다운받은 보고서로 설정합니다.
- 설정하는 방법은 UserComponent 가이드 를 참고하십시오.
- 설치가 정상적으로 진행되었다면, 아래와 같은 화면이 노출됩니다.
- 이후 데이터를 연결하여 사용할 수 있습니다.
- 설정하는 방법은 UserComponent 가이드 를 참고하십시오.
- 보고서 스크립트에 아래와 같이 작성합니다.
- OnDocumentLoadComplete 이벤트
- GeoMap 컴포넌트 제공 이벤트 사용
- 자세한 사항은 보고서 샘플을 참고하십시오.
- OnDocumentLoadComplete 이벤트
- UserComponent 컨트롤을 생성하여, 우측 PropertyGrid의 Base > Source 를 3번 과정에서 다운받은 보고서로 설정합니다.
기능 설명
- 지도 컴포넌트를 AUD Designer에서 편집, 실행할 수 있습니다.
- 세부 기능
- zoom-in, zoom-out: 지도에서 표시하는 영역을 zoom-in , zoom-out 하여 확인할 수 있습니다.
- undo,redo: load되었던 지도 정보를 기억하여 undo, redo 하며 history를 확인할 수 있습니다.
Property 명 | Property 설명 |
---|---|
Source |
|
Features |
|
UseHighlightStyle |
|
HighlightStyle |
|
DefaultMapStyle | Map의 기본 style 객체
|
Method 명 | Method 설명 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Update() | Map의 style 속성, feature의 style 속성값 변경 후 해당 Method를 실행하면 변경된 값에 맞게 Map의 Layer가 change됩니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Clear() | Map의 모든 layer의 source가 refresh, 즉 초기화됩니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LoadMap(GeoJSON) | feature 정보가 존재하는 featureCollection 타입의 GeoJSON을 전달받아 Map이 Load됩니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
getFeature(featureLabelName) | 매개 변수 featureLabelName과 feature 객체의 LABEL 속성값과 일치하는 feature를 반환합니다. Method
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setFeaturesStyleProperties(dataTable) | 매개 변수 dataTable의 각 row의 'LABEL' column의 data와 자신의 LABEL 속성값과 일치하는 featrue의 style 속성을 변경, 설정합니다. 변경 가능한 속성은 setStyleProperty와 동일합니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
addMarker(markerInfos) | 매개 변수 markerInfos정보에 맞는 위치에 Marker를 생성하고, 해당 Marker 객체를 반환합니다.
markerInfos 예시
원본 펼치기
[{'name' : '세방빌딩', 'id' : 'ID_AA', 'lonLat': ['127.0448', '37.5038']}, {'name' : '경복궁', 'id' : 'ID_BB', 'lonLat': ['126.9602', '37.5788']} ] Method
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
addLine(locations) | 매개 변수 locations 정보에 맞는 위치에 Line을 생성하고, 해당 Line 객체를 반환합니다. Method
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
createTooltip() | 지도 위의 특정 feature 위에 마우스를 올리면 해당 위치에 Tooltip을 생성하고 Tooltip객체를 반환합니다. Tooltip에는 feature의 'label' 정보가 표시됩니다. Method Tooltip 객체
Tooltip Style 객체
예제 코드
원본 펼치기
var toolTip = null; var toolTipStyle = null; Map.OnMapLoaded = function(){ if(!toolTip) toolTip = Map.createTooltip(); // 툴팁은 한 번만 생성 } Map.OnFeatureMouseOver = function(args){ var feature = args.feature; if(feature){ if(toolTip){ var label = feature.get('LABEL'); toolTipStyle = toolTip.Style; // 툴팁의 스타일 객체 switch(label){ case '서울특별시': case '제주특별자치도': var text = label + '<br>입니다!'; toolTip.setText(text); toolTipStyle.BackgroundColor = '#ffcc80'; toolTipStyle.Color= '#151a27'; break; } } } } |
Event 명 | Event 설명 |
---|---|
OnMapLoaded | LoadMap이 끝난 후, 즉 Map이 load되고 나서 발생합니다. |
OnFeatureClick | Map의 어떠한 Feature를 click시 발생합니다. 해당 Feature 객체를 전달받습니다. |
OnFeatureMouseOver | Map의 어떠한 Feature를 mouseover시 발생합니다. 해당 Feature 객체를 전달받습니다. |
OnFeatureMouseOut | Map의 어떠한 Feature를 mouseover시 발생합니다. 해당 Feature 객체를 전달받습니다. 단, feature가 없는 경우, undefined를 전달합니다. |
OnMarkerClick | Map에 Marker가 존재하고 해당 Marker를 click시 발생합니다. 해당 Marker 객체와 아래 Layer의 Feature 객체를 전달받습니다. |
OnMarkerMouseOver | Map에 Marker가 존재하고 해당 Marker를 mouseover시 발생합니다. 해당 Marker 객체를 전달받습니다. |
이벤트 전달 객체 일괄 변경 알림
(BCRM#D3511) [i-AUD] 국내 지도(GeoMap) 컴포넌트 마우스 포인터 위치에 따른 툴팁 기능 추가 이슈 작업으로 인해, Geomap Componenet Event에서 전달하는 객체의 타입이 일괄 변경되었습니다.
- AS-IS: 객체 한개 혹은 Array로 전달
- TO-BE: object로 전달
Event 명 변경 전 객체 변경 후 객체 OnFeatureClick feature e.point e.feature (변경 전 feature와 동일) OnFeatureMouseOver feature e.point e.feature (변경 전 feature와 동일) OnFeatureMouseOut feature e.point e.feature (변경 전 feature와 동일) OnMarkerClick [ markerFeature, layerFeature ] e.point e.marker (변경 전 markerFeature와 동일) e.feature (변경 전 layerfeature와 동일) OnMarkerMouseOver markerFeature e.point e.marker (변경 전 markerFeature와 동일)
(BCRM#D3511) [i-AUD] 국내 지도(GeoMap) 컴포넌트 마우스 포인터 위치에 따른 툴팁 기능 추가
해당 개선 작업으로 아래와 같이 추가되었습니다.
- 툴팁: Geomap 컴포넌트에서 기본으로 제공하는 기능입니다.
- 사용 방법은 위 createTooltip() 메소드 설명을 참고해주세요.
- 툴팁은 Geomap 컴포넌트의 viewport 내에서만 움직입니다.
- 간단한 style 변경이 가능합니다.
- 팝업: 툴팁보다 다양한 UI를 원하는 사용자들을 위한 기능입니다.
- Geomap 컴포넌트의 event마다 전달해주는 pointEvent의 위치를 이용합니다.
- AUD의 UserComponent를 이용한 샘플 보고서와 아래 가이드를 참고해주세요.
- 샘플 보고서: GeoMap 컴포넌트(국내지도) 팝업 보고서
- 가이드:
- 뷰어 보고서의 스크립트 가이드
팝업 기능 사용을 위한 함수 정의
원본 펼치기this.initMAP = function(){ var _this = this; //팝업 샘플을 사용하기 위한 UserComponent보고서 정의 this.RPT_POPUP = Matrix.getObject('RPT_POPUP'); // UserComponent 보고서 this.RPT_POPUP.Visible = false; // init 기본은 숨김 this.RPT_POPUP.OnLoaded = function(s, e){ _this.mPopupScript = e.ScriptObject; // UserComponent의 Script Object _this.mPopupScript.GetRect(_this.RPT_REPORT.Left,_this.RPT_REPORT.Top,_this.RPT_POPUP.Width, _this.RPT_POPUP.Height); // Geomap Component의 viewport가 아닌, 해당 viewer 보고서 안에서 띄우기 위해 사용하는 파라미터를 전달합니다. }; this.RPT_REPORT = Matrix.getObject("RPT_REPORT"); this.RPT_REPORT.OnLoaded = function(s, e){ _this.mMapScript = e.ScriptObject; _this.mMapScript.CreateAddin(function(component){ mapComponent = Object.assign(component, mapComponent); }); }; }; //팝업 샘플 사용을 위한 함수: ShowPOPUP, HidePOPUP, SetMySizeToPOPUP this.ShowPOPUP = function(point, code){ // 팝업을 띄웁니다. if(!this.RPT_POPUP.Visible){ this.RPT_POPUP.Visible = true; } var position = this.mPopupScript.ShowPOPUP(point, code); this.RPT_POPUP.Left = position.x; // position을 전달받아 팝업을 이동시킵니다. this.RPT_POPUP.Top = position.y; } this.HidePOPUP = function(){ // 팝업을 숨깁니다. if(this.RPT_POPUP.Visible){ this.RPT_POPUP.Visible = false; } }; this.SetMySizeToPOPUP = function(size){ // 팝업 보고서에게 viewer 보고서 자신의 사이즈를 전달합니다. if(this.mPopupScript){ this.mPopupScript.GetParentViewSize(size); } } //팝업 샘플 사용을 위한 함수: ShowPOPUP, HidePOPUP, SetMySizeToPOPUP
a에서 정의한 함수 사용 예시
원본 펼치기// Geomap의 이벤트 mapComponent.OnFeatureMouseOver = function(e){ var feature = e.feature; if(feature) { var point = e.point; if(point){ MAIN_FORM.ShowPOPUP(point, feature.get('GID_1')); // point 위치와 팝업보고서에 전달할 코드값을 전달합니다. } } }; mapComponent.OnFeatureMouseOut = function(e){ var feature = e.feature; if(feature) { var point = e.point; if(point){ MAIN_FORM.ShowPOPUP(point, feature.get('GID_1')); } }else { MAIN_FORM.HidePOPUP(); // feature 객체가 없는 경우( = 바다 영역인 경우) 팝업을 숨깁니다. } } }; // AUD 제공 기본 이벤트 /************************************** * 뷰어의 사이즈가 변경될 때 발생합니다. * * arguments : * double Width (Readonly:False) : 뷰어의 넓이 * double Height (Readonly:False) : 뷰어의 높이 **************************************/ var OnViewerSizeChanged = function(sender, args){ var size = { Width: args.Width, Height: args.Height } MAIN_FORM.ResizeMAP(); MAIN_FORM.SetMySizeToPOPUP(size); // 뷰어 사이즈가 변경될 때마다 팝업 보고서에게 자신의 사이즈를 다시 전달합니다. };
- 팝업 샘플 보고서의 스크립트 안내
- 해당 보고서는 샘플 보고서이며, 스크립트 수정으로 사용자가 원하는 대로 사용할 수 있습니다.
- UI는 VIEW class에서, 내용은 CONTENT class에서 관리합니다.
VIEW class에서 팝업 보고서 자신의 위치 조정
원본 펼치기var VIEW_CONTROLLER = function(){ this.RECT = { Width: 0, Height:0, Left: 0, Top: 0 }; this.PARENT_SIZE = { Width: 0, Height: 0 }; this.setPosition = function(point){ var position = { x: 0, y: 0 }; var gap = 10; //기본 position.x = this.RECT.Left + point.X + gap; position.y = this.RECT.Top + point.Y - this.RECT.Height - gap; //오른쪽으로 튀어나가는 경우 왼쪽으로 자리를 옮겨준다 if(position.x + this.RECT.Width > this.PARENT_SIZE.Width ){ position.x = this.RECT.Left + point.X - this.RECT.Width - gap; } //위쪽으로 튀어나가는 경우 아래쪽으로 자리를 옮겨준다 if(Math.max(position.y,0) == 0){ position.y = this.RECT.Top + point.Y + gap; } return position; }; }
CONTENT class에서 표시해주는 데이터 설정
원본 펼치기var CONTENT_CONTROLLER = function(){ this.CODE = ""; this.GRD_INFO = null; this.LBL_TITLE = null; this.LBL_SUBTITLE = null; this.IMG_CONTENT = null; this.LBL_AREA = null; this.LBL_POPULATION = null; this.LBL_DENSITY = null; this.LBL_DISTRICT = null; this.init = function(){ this.GRD_INFO = Matrix.getObject('GRD_INFO'); this.LBL_TITLE = Matrix.getObject('LBL_TITLE'); this.LBL_SUBTITLE = Matrix.getObject('LBL_SUBTITLE'); this.IMG_CONTENT = Matrix.getObject('IMG_CONTENT'); this.LBL_AREA = Matrix.getObject('LBL_AREA'); this.LBL_POPULATION = Matrix.getObject('LBL_POPULATION'); this.LBL_DENSITY = Matrix.getObject('LBL_DENSITY'); this.LBL_DISTRICT = Matrix.getObject('LBL_DISTRICT'); } this.Update = function(code){ if(this.CODE === code){ return; } for(var i = 0; i < this.GRD_INFO.GetRowCount(); i++){ var row = this.GRD_INFO.GetRow(i); if(code === row.GetValue('CODE1') || code === row.GetValue('CODE2')){ this.CODE = code; this.LBL_TITLE.Text = row.GetValue('NAME'); this.LBL_SUBTITLE.Text = row.GetValue('DESCRIPTION'); this.LBL_AREA.Text = row.GetValue('AREA'); this.LBL_POPULATION.Text = row.GetValue('POPULATION'); this.LBL_DENSITY.Text = row.GetValue('DENSITY'); this.LBL_DISTRICT.Text = row.GetValue('DISTRICT'); this.IMG_CONTENT.ImageBase64Text = 'data:image' + row.GetValue('IMAGE_TEXT'); return; } } } this.init(); }
- 뷰어 보고서의 스크립트 가이드
필수 옵션
해당 가이드에서 제공하는 별도 패치 파일 없이는 GeoMap 컴포넌트를 사용하실 수 없습니다.
제약 사항
해당 기능은 ie11에서 사용 불가능합니다.
샘플 정보
변경 전/후 제품 버전 | 변경 전(제품 버전) | 변경 후(제품 버전) |
---|---|---|
변경 전 : 변경 후 : |
|
참고 자료
데이터 출처
- 세계 지도 데이터: GADM v4.1. (2022년도 7월)
- 국내 지도 데이터: 대한민국 최신 행정구역(SHP) 다운로드 도로명주소 DB의 행정구역도 기반
- 국내 지도 코드표: 행정안전부>업무안내>주민등록,인감 최신일자(등록일 2023.12.18) 게시판
문서 수정 이력
버전 | 날짜 | 댓글 |
---|---|---|
현재 버전 (v. 26) | 2024-01-12 10:33 |
AUD팀: 데이터 출처 표시 |
v. 46 | 2024-06-27 20:08 | AUD팀 |
v. 45 | 2024-06-25 16:08 | AUD팀 |
v. 44 | 2024-06-25 14:31 | AUD팀 |
v. 43 | 2024-06-25 13:07 | AUD팀 |
v. 42 | 2024-05-31 11:48 | AUD팀 |
v. 41 | 2024-03-21 14:29 | 품질기술팀 |
v. 40 | 2024-03-20 14:26 | 품질기술팀 |
v. 39 | 2024-03-19 17:44 | 품질기술팀 |
v. 38 | 2024-03-19 17:41 | 품질기술팀 |
v. 37 | 2024-03-19 17:41 | 품질기술팀 |
v. 36 | 2024-03-19 17:38 | 품질기술팀 |
v. 35 | 2024-03-19 17:38 | 품질기술팀 |
v. 34 | 2024-03-19 17:37 | 품질기술팀 |
v. 33 | 2024-03-19 17:24 | 품질기술팀 |
v. 32 | 2024-03-12 14:37 | 품질기술팀 |
v. 31 | 2024-02-23 16:59 |
AUD팀:
(BCRM#E0193) 국내 지도 내 클릭 및 휠 통한 지도 위치와 크기 변경 가능 문의 |
v. 30 | 2024-02-15 17:40 |
AUD팀:
MAP_GEO_1 데이터 단순화 |
v. 29 | 2024-02-14 15:37 |
AUD팀:
UserComponent 가이드 url 변경 |
v. 28 | 2024-01-19 10:44 |
AUD팀:
(BCRM#E0030) 지도 내 행정구역 이미지 최신화 가능 여부 문의 작업 내용 업데이트 |
v. 27 | 2024-01-16 14:23 |
AUD팀:
데이터 출처 및 버전 기입 |
v. 26 | 2024-01-12 10:33 |
AUD팀:
데이터 출처 표시 |
v. 25 | 2023-11-21 17:23 | AUD팀 |
v. 24 | 2023-11-21 16:33 | AUD팀 |
v. 23 | 2023-11-21 16:06 |
AUD팀:
팝업 보고서 샘플 설명 추가 |
v. 22 | 2023-11-16 16:48 |
AUD팀:
ToolTip 관련 api 추가 |
v. 21 | 2023-10-18 18:03 |
AUD팀:
marker getId 메소드 설명 추가 |
v. 20 | 2023-10-10 17:40 | AUD팀 |
v. 19 | 2023-10-10 17:37 | AUD팀 |
v. 18 | 2023-10-10 17:35 | AUD팀 |
v. 17 | 2023-10-10 17:33 | AUD팀 |
v. 16 | 2023-10-10 17:31 | AUD팀 |
v. 15 | 2023-10-10 17:17 |
AUD팀:
샘플 URL 변경 |
v. 14 | 2023-07-13 10:24 | 품질기술팀 |
v. 13 | 2023-07-13 10:23 | 품질기술팀 |
v. 12 | 2023-07-13 09:53 | 품질기술팀 |
v. 11 | 2023-06-29 18:38 | AUD팀 |
v. 10 | 2023-06-29 18:22 | AUD팀 |
v. 9 | 2023-06-21 16:51 | AUD팀 |
v. 8 | 2023-06-14 01:44 | AUD팀 |
v. 7 | 2023-05-17 23:52 | AUD팀 |
v. 6 | 2023-05-17 23:51 | AUD팀 |
v. 5 | 2023-05-17 23:49 | AUD팀 |
v. 4 | 2023-05-17 23:48 | AUD팀 |
v. 3 | 2023-05-17 23:47 | AUD팀 |
v. 2 | 2023-05-17 23:47 |
AUD팀:
지도 컴포넌트(1차 개발 완료) 가이드 작성 |
v. 1 | 2023-05-17 18:55 | AUD팀 |
BCRM 정보
(BCRM#D0732) AUD플랫폼 7 버전 국내지도 개발
...
- 레이블 없음