GIS 서버, GeoService-Xr이 티맥스의 티베로 DBMS를 지원합니다.

티베로는 티맥스소프트의 자회사인 티맥스데이터(TmaxData)에서 개발한 국산 DBMS로 오라클과 견줄 수 있는 소프트웨어입니다. 오라클과의 호환성이 높아 최소한의 변경으로도 DBMS 전환이 가능하며 오라클의 RAC 기능으로 그간 독점해온 DB 클러스터 기술을 성공시킨 세계에서 두번째 제품이라고 합니다.

이러한 티베로(Tibero)를 GeoService-Xr에서 지원합니다. 티베로에 저장된 공간 데이터에 대한 시각화, 공간 데이터 편집, 다양한 공간 조회 기능 등을 기본으로 제공하며 아래 그림에서의 기능을 티베로와 연계하여 제공할 수 있습니다. GeoService-Xr은 GIS 서버로써의 기본 기능 이외에도 GIS 시스템 및 서비스 구축을 위해 필요한 지오코딩, 10 Parameters 기반의 좌표 변환, 지도 기반 사용자 대화 기능, 대용량 공간 데이터 업로드 등과 같은 기능을 제공하는 미들웨어 서버로 GS인증 1등급 제품입니다.

FingerEyes-Xr에서 SHP 파일 자원을 외부 URL로 접근해 사용하기

예를 들어, http://www.gisdeveloper.co.kr:8080/SHP/seoul.zip와 같은 URL 경로로 접근할 수 있는 SHP 파일 자원을 웹 지도 컴포넌트인 FingerEyes-Xr에서 어떻게 가져와 지도를 구성하는 레이어로 사용하기 위한 코드를 정리합니다. zip 파일에는 반드시 .shp, .dbf, .shx 파일이 있어야 합니다.

let map = ...

let layerName = "레이어의 고유한 이름";
let URL = "http://www.gisdeveloper.co.kr:8080/SHP/seoul.zip";
let layer = new Xr.layers.SHPFileLayer(layerName, URL);

layer.EPSG(map.EPSG());
layer.proj4Name("EPSG:5179");

map.layers().add(layer, function () {
    map.updateLayer(layerName);
});

위의 코드에서 7번은 배경지도에 대한 좌표계의 EPSG 코드이며, 8번은 해당 shp 파일의 좌표계에 대한 EPSG 코드입니다.

아래의 글은 FingerEyes-Xr에서 사용자의 PC에 저장된 SHP 파일 자원 웹에서 활용하는 기능에 대한 설명입니다. URL을 통한 접근은 아니지면, 그 기반은 동일합니다.

NexGen, 웹 GIS에서 로컬 데이터 파일 활용

DBMS에서 ST_EXTENT 함수를 제공하지 않을 경우의 대안

PostgreSQL 등과 같은 공간 DB에서는 ST_EXTENT를 지원하지만, 오라클이나 티베로 등과 같은 DBMS에서는 이 함수를 제공하지 않습니다. 다행이 오라클은 SDO_AGGR_MBR라는 함수를 제공함으로써 ST_EXTENT 대신 사용할 수 있습니다. (최근의 오라클은 ST_EXTENT를 지원할지도 모르겠습니다) 그러나 오라클처럼 자체적인 함수 조차도 지원하지 않는 티베로와 같은 경우 사용할 수 있는 대안은 다음과 같습니다.

SELECT * 
FROM 
    (SELECT * FROM (SELECT ST_MINX(the_geom) MinX FROM TSTTABLE ORDER BY ST_MINX(the_geom) ASC) WHERE ROWNUM = 1 ), 
    (SELECT * FROM (SELECT ST_MAXX(the_geom) MaxX FROM TSTTABLE ORDER BY ST_MAXX(the_geom) DESC) WHERE ROWNUM = 1),
    (SELECT * FROM (SELECT ST_MINY(the_geom) MinY FROM TSTTABLE ORDER BY ST_MINY(the_geom) ASC) WHERE ROWNUM = 1),
    (SELECT * FROM (SELECT ST_MAXY(the_geom) MaxY FROM TSTTABLE ORDER BY ST_MAXY(the_geom) DESC) WHERE ROWNUM = 1);

대상 테이블의 이름은 TSTTABLE이고 Geometry 필드는 the_gem입니다. 결과의 예는 다음과 같습니다.

위의 쿼리는 티베로에서 실행한 결과입니다. 위처럼 하나의 Row로 결과를 얻을 수도 있지만 MinX, MaxX, MinY, MaxY 각각을 하나의 Row로 얻을 수도 있습니다. 아래처럼요.

SELECT * FROM (SELECT ST_MINX(the_geom) FROM TSTTABLE  ORDER BY ST_MINX(the_geom) ASC) WHERE ROWNUM = 1 
UNION SELECT * FROM (SELECT ST_MAXX(the_geom) FROM TSTTABLE  ORDER BY ST_MAXX(the_geom) DESC) WHERE ROWNUM = 1
UNION SELECT * FROM (SELECT ST_MINY(the_geom) FROM TSTTABLE  ORDER BY ST_MINY(the_geom) ASC) WHERE ROWNUM = 1
UNION SELECT * FROM (SELECT ST_MAXY(the_geom) FROM TSTTABLE  ORDER BY ST_MAXY(the_geom) DESC) WHERE ROWNUM = 1;

참고로 이 대안들은 속도가 느립니다. 테이블에 데이터가 개수가 많을 수록 그 속도는 더욱 느려집니다. 그러므로 해당 DBMS에서 ST_EXTENT를 제공한다면, ST_EXTENT를 사용해야 하며 ST_EXTENT를 지원하지 않는다면 해당 DBMS에서 자체적인 방법을 제공하는지 확인하여 그 방법을 사용해야 합니다. 자체적인 방법까지도 없다면 위의 대안을 사용할 수 있습니다.