도움말 |
---|
| LoadMap 에서 geojson 을 이용하여 feature 를 생성할 때, 지역별로 스타일 속성(Fill, Line) 을 추가할 수 있습니다. 사용 예제▶ 메인 보고서 Script데이터 테이블을 매개변수로 전달합니다. 코드 블럭 |
---|
language | js |
---|
title | 예제 코드 |
---|
collapse | true |
---|
| function addGeoJsonWithStyle(){
Matrix.Execute('DS_COLOR', function(p){
if(p.Success == false){
Matrix.Alert(p.Message);
return;
}
var ds = p.DataSet;
var dt = p.DataTable;
closure.map.addDomesticGeoJson(Matrix.getObject('CheckBox2').Checked, dt);
});
} |
▶ 스타일 데이터 구조데이터 테이블은 아래의 구조를 가집니다. Column 명 | Data Type | Default Value | Description |
---|
GID_CODE | string |
| 스타일을 적용할 지역 코드 | FILL_COLOR | string | '#b1c3f9' | feature 의 배경색상 | FILL_OPACITY | number (between 0 and 1) | 0.4 | feature 의 배경 투명도 | LINE_COLOR | string | '7e9bf6' | feature 의 border 색상 | LINE_OPACITY | number (between 0 and 1) | 0.8 | feature 의 border 투명도 | LINE_WIDTH | number | 1 | feature 의 border 두께 |
▶ UserComponent 보고서 ScriptaddProperty() 함수에서 geojson 의 feature에 스타일 속성을 추가합니다. 아래의 예제 코드는 GID_1 과 매핑하고 있습니다. 필요에 따라 수정해서 사용하실 수 있습니다. 코드 블럭 |
---|
language | js |
---|
title | 예제 코드 |
---|
collapse | true |
---|
| addDomesticGeoJson: function(isFit, options){
Matrix.RunScript("" ,"MAP_SERVICE" ,function(p){
if(p.Success == false){
Matrix.Alert(p.Message);
Matrix.DebugWrite('GeoMap', 'refreshMap::'+ p.Message);
return;
}
var geoJson = p.DataSet;
var lastLevel = Matrix.GetGlobalParamValue('VS_G_LAST_FEATURE_LEVEL');
Matrix.RemoveGlobalParams('VS_G_LAST_FEATURE_LEVEL');
if(geoJson.features.length > 0) {
if(options) geoJson = addProperty(geoJson, options); // geoJson 에 속성을 추가해서 전달합니다
IGeoMapComponent.LoadMap(geoJson, isFit);
Matrix.DebugWrite('GeoMap', 'LoadMap::');
}else {
alert('마지막 Level입니다.');
return;
}
});
/*
geoJson 의 Property 에 overlay style 속성을 추가하고 geoJson 을 반환합니다.
@params property DataTable 의 형태로 GID_CODE, FILL_COLOR, FILL_OPACITY, LINE_COLOR, LINE_WIDTH, LINE_OPACITY 의 Column 을 가진다
*/
function addProperty(geoJson, property){
property.Rows.map(function(row){
// geoJson 을 돌면서 속성을 추가합니다.
geoJson.features.forEach(function(feature){
if (feature.properties.GID_1 === row.GetValue('GID_CODE')) { // GID_1 과 매핑
feature.properties.GID_CODE = row.GetValue('GID_CODE');
feature.properties.FILL_COLOR = row.GetValue('FILL_COLOR');
feature.properties.FILL_OPACITY = row.GetValue('FILL_OPACITY');
feature.properties.LINE_COLOR = row.GetValue('LINE_COLOR');
feature.properties.LINE_WIDTH = row.GetValue('LINE_WIDTH');
feature.properties.LINE_OPACITY = row.GetValue('LINE_OPACITY');
}
});
});
return geoJson;
}
}, |
▶ 최종 화면 예시아래의 예시 화면은 KakaoMap 을 이용하였으며, 현재 지원하는 기타 상용 지도(MapboxMap, VWorldMap) 에서도 동일한 결과를 확인할 수 있습니다.
|
도움말 |
---|
| getProjUtil()은 GeoMap Component 의 util 객체에 정의되어 있습니다. Proj 라이브러리를 이용한 Util을 반환합니다.
사용 예제 코드 블럭 |
---|
| var projUtil = map.util.getProjUtil();
// 기존 Proj 라이브러리에서 제공하는 좌표계를 반환합니다. 변경을 원하는 좌표계가 아래에 있을 경우 defineNewProjection를 이용해 좌표계를 정의하실 필요가 없습니다.
var predefinedProjections = projUtil.getPreDefinedProjections() // return ['EPSG:4326', 'EPSG:4269', 'EPSG:3857'];
// 예시) EPSG:5181 좌표계의 [37.528, 126.9207]를 변환하고 싶은 경우
// 1. 좌표계 정의
// proj4 문자열 좌표계 정의는 https://epsg.io/5181 를 참고하세요.
projUtil.defineNewProjection("EPSG:5181", "+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
// 2. 포인트 좌표 변환
var transformedCoordinate = projUtil.transformCoordinate("EPSG:5181", [37.528, 126.9207]); // return [124.84886361842304, 33.47611942468759] |
|
도움말 |
---|
| getCenterPoint(callback) 은 GeoMap Component 의 util 객체에 정의되어 있습니다. 파라미터 callback 은 각 지역의 정보를 가져온 뒤 실행되는 함수입니다. 참고사항 |
---|
자체 알고리즘에 의해 계산한 값이 아닌 SGIS 의 주소경계 API를 이용하여 SGIS에서 제공하는 지리 데이터를 가져오고 있습니다. 현재는 시/도 범위의 중심 좌표만 지원합니다. |
사용 예제 코드 블럭 |
---|
language | js |
---|
title | 예제 코드 |
---|
linenumbers | true |
---|
| function getCenter(){
map.util.getCenterPoint(function(datas){
// callback function (datas 의 내용은 아래의 결과값을 참고하세요)
var markerInfo = datas.map(function(data){
retrun {
name: data.name,
lonLat: data.lonLat
}
});
map.addMarker(markerInfo); // 마커로 표시합니다
});
} |
결과값 lonLat: 좌표값 code: SGIS 의 지역 코드 name: 지역 이름 (MAP_GEO_1 테이블의 LABEL 에 해당하는 값과 같습니다) 코드 블럭 |
---|
language | js |
---|
title | 결과값 |
---|
linenumbers | true |
---|
collapse | true |
---|
| [
{
"lonLat": [
126.97834782835902,
37.56669009036455
],
"code": "11",
"name": "서울특별시"
},
{
"lonLat": [
129.09175563706935,
35.24125634125668
],
"code": "21",
"name": "부산광역시"
},
{
"lonLat": [
128.6226425399308,
35.97347538476608
],
"code": "22",
"name": "대구광역시"
},
{
"lonLat": [
126.70523602351949,
37.45604185708162
],
"code": "23",
"name": "인천광역시"
},
{
"lonLat": [
126.8354459164671,
35.15573674234789
],
"code": "24",
"name": "광주광역시"
},
{
"lonLat": [
127.39405991650911,
36.33980451022681
],
"code": "25",
"name": "대전광역시"
},
{
"lonLat": [
129.23840258289323,
35.55370705798613
],
"code": "26",
"name": "울산광역시"
},
{
"lonLat": [
127.25881030360377,
36.560535581441435
],
"code": "29",
"name": "세종특별자치시"
},
{
"lonLat": [
127.25204502645134,
37.2865873659788
],
"code": "31",
"name": "경기도"
},
{
"lonLat": [
128.17336172923484,
37.8836272925393
],
"code": "32",
"name": "강원특별자치도"
},
{
"lonLat": [
127.53924730130387,
36.73834076972116
],
"code": "33",
"name": "충청북도"
},
{
"lonLat": [
126.71839045797792,
36.67835738574175
],
"code": "34",
"name": "충청남도"
},
{
"lonLat": [
127.10867588676484,
35.820389942968816
],
"code": "35",
"name": "전라북도"
},
{
"lonLat": [
126.67198974055624,
34.814882947753354
],
"code": "36",
"name": "전라남도"
},
{
"lonLat": [
128.75109173106813,
36.4649263768976
],
"code": "37",
"name": "경상북도"
},
{
"lonLat": [
128.16437996516694,
35.42913615877326
],
"code": "38",
"name": "경상남도"
},
{
"lonLat": [
126.48382513785216,
33.40104880413814
],
"code": "39",
"name": "제주특별자치도"
}
] |
|
도움말 |
---|
| getTurfUtil()은 GeoMap Component 의 util 객체에 정의되어 있습니다. Turf 라이브러리를 이용한 Util을 반환합니다.
사용 예제 코드 블럭 |
---|
| var turfUtil = map.util.getTurfUtil();
// 시작점과 끝점을 잇는 곡선을 그립니다. 중간지점을 지정하지 않는 경우 turf 라이브러리의 midpoint 함수를 이용하여 중간지점을 정합니다.
var curveLine = turfUtil.addCurveLine([37.683105,55.751849], [129.078369,35.169318], undefined); // 모스크바와 부산을 잇는 "LineString"인 type의 feature 반환 |
|
도움말 |
---|
title | shp 파일 형식 변환 및 좌표계 변환 기능 |
---|
| shp 파일의 형식을 geoJson 으로 바꾸고 AUD 에서 제공하는 지도의 좌표계(WGS84)와 다른 경우에는 좌표계의 변환을 수행합니다. 더욱 자세한 코드를 확인하시려면 geoTools service 불러오기.mtsz를 참고해주세요. (샘플 보고서에서는 mapbox 지도를 사용하고 있습니다.)
참고사항 |
---|
| - 패치 필요 : 해당 서비스를 이용하기 위해서는 서버에 패치가 필요합니다.
- JDK 11 환경에서 서비스 : 해당 서비스는 JDK 11 환경에서 서비스됩니다. JDK 11 이상의 버전이 아닌 다른 버전에서는 서비스가 제대로 작동하지 않을 수 있습니다.
|
패치 방법 - geomap-1.0.jar을 [CONTEXT_ROOT]/WEB-INF/lib/ 에 위치시켜 주세요.
- 샘플 보고서의 server script 에서 환경에 맞는 경로로 filePath를 수정해 주세요.
사용 예제 코드 블럭 |
---|
language | js |
---|
title | Client Script 예제 |
---|
linenumbers | true |
---|
collapse | true |
---|
| /* 서버에서 shp 파일을 geoJson 형식으로 변환하고 좌표계를 WGS84 로 변경하는 함수 */
function convertSHPfile(){
Matrix.RunScript('', 'CONVERT_COORDS', function(p){
if(p.Success == false){
Matrix.Alert(p.Message);
return;
}
var ds = p.DataSet;
closure.map.LoadMap(ds, true); // 변환된 geoJson을 지도에 표시합니다.
});
} |
코드 블럭 |
---|
language | js |
---|
title | Server Script 예제 |
---|
linenumbers | true |
---|
collapse | true |
---|
| /* 서버에서 jar 파일을 실행 */
var req = Matrix.getRequest(); /* request */
var res = Matrix.getResponse(); /* response */
var session = Matrix.getSession(); /* session */
var util = Matrix.getUtility(); /* utility */
var fso = Matrix.getFileSystemObject(); /* file access */
try{
Matrix.WriteCustomLog('geoTools', '===== shell command [시작] =====');
// shp file path
var inputFilePath = req.getParam('VS_SHP_PATH');
// geoJson file path
var filePath = 'C:/AUDPlatform_7/matrix/reports/_TEMP_/';
var fileName = util.getUniqueKey('GEO') + '.json';
var outputFilePath = fso.PathCombine(filePath, fileName);
// target 좌표계
var epsgCode = req.getParam('VS_EPSG_CODE');
Matrix.WriteCustomLog('geoTools', '===== shell command [inputFilePath] ===== ' + inputFilePath);
Matrix.WriteCustomLog('geoTools', '===== shell command [outputFilePath] ===== ' + outputFilePath);
/* jar 실행시 필요한 파라미터 */
var cmdArray = [
"C:\\Program Files\\Java\\jdk-11\\bin\\java.exe", // jdk 11 실행 경로
"-jar", // jar 파일 실행 명령어
"C:\\AUDPlatform_7\\matrix\\WEB-INF\\lib\\geomap-1.0.jar", // geomap-1.0.jar 파일 위치
inputFilePath, // .shp 파일의 위치
outputFilePath, // .json 파일의 위치
epsgCode // target 좌표계
];
var result = util.ShellExecute(cmdArray, true);
Matrix.WriteCustomLog('geoTools', '===== shell command [완료] =====');
if(fso.Exists(outputFilePath)){
Matrix.WriteCustomLog('geoTools', '===== read geoJson [시작] =====');
res.WriteResponseTextFile(outputFilePath)
fso.DeleteFile(outputFilePath);
Matrix.WriteCustomLog('geoTools', '===== read geoJson [완료] =====');
}
}catch(e){
Matrix.WriteCustomLog('geoTools', '===== CONVERT_COORDS Error ===== ' + e);
} |
화면 예시
|
|