2011년 6월 21일 화요일

[FOSS4G]Altibase Spatial JdbcDataStore for GeoTools, GeoServer

최신 정보는 이 블로그의 다음 포스트([GeoTools Data Store] 국내 공간 DBMS 및 파일 포맷 지원)를 참조하세요.

Altibase Spatial(버전 5.5.1)용 GeoTools JdbcDataStore 입니다.

Altibase Spatial에 대한 개략적인 내용은 다음 링크를 참조하세요.
http://www.onspatial.com/2011/06/altibase-spatial-sql-quick-reference.html

◎ gt-jdbc-altibase-1.0.0.jar 설치

다운로드 : https://sourceforge.net/projects/gt-jdbc-korean/files/?source=navbar

첨부한 파일을 GeoTools libraries  폴더로 복사하면 됩니다. 추가로 Altibase 설치폴더의 lib 폴더 내에 있는 Altibase.jar 파일도 같이 복사합니다.

주요 기능
 - GeoTools에서 PostGIS 사용하는 방법과 동일합니다.
 - Create Layer
 - Insert, Update, Delete 지원

◎ Altibase Spatial SPATIAL_REF_SYS 업데이트
Altibase Spatial을 처음 설치하면 SPATIAL_REF_SYS 테이블에는 샘플로 몇 개(우리나라 관련 좌표계)만 포함이 되어 있습니다. 또한 레이어 등록(ADDGEOMETRYCOLUMNS)할 때 이 테이블에 관련 SRID 코드가 없으면 등록이 안되므로 항상 확인이 필요합니다.

따라서 아래에 첨부한 spatial_ref_sys.sql을 사용하여 업데이트 합니다. 이 파일은 PostgreSQL(PostGIS)에서 사용하는 좌표체계 테이블입니다.
첨부한 파일을 다운로드 후 Command 창에서 다음을 실행합니다.

다운로드 : spatial_ref_sy.zip

C:\>isql -u sys -p manager -f spatial_ref_sys.sql

◎ GeoTools 샘플코드
다음 코드는 Altibase에 접속하여 ADMIN이라는 피쳐소스를 얻고 공간검색을 수행하는 코드입니다.
Map<String, Object> params = new HashMap<String, Object>();
params.put(JDBCDataStoreFactory.DBTYPE.key, "altibase");
params.put(JDBCDataStoreFactory.HOST.key, "localhost");
params.put(JDBCDataStoreFactory.DATABASE.key, "mydb");
params.put(JDBCDataStoreFactory.PORT.key, "20300");
params.put(JDBCDataStoreFactory.USER.key, "sys");
params.put(JDBCDataStoreFactory.PASSWD.key, "manager");

AltibaseNGDataStoreFactory factory = new AltibaseNGDataStoreFactory();
DataStore dataStore = factory.createDataStore(params);
// or
DataStore dataStore = DataStoreFinder.getDataStore(params);

SimpleFeatureSource featureSource = dataStore.getFeatureSource("ADMIN");

// Spatial Filter
WKTReader wktReader = new WKTReader();
Geometry geometry = wktReader.read("LINESTRING (70 38, 32 12, 36 36)");

FilterFactory2 fF = CommonFactoryFinder.getFilterFactory2(GeoTools.getDefaultHints());
Filter spatialFilter = fF.intersects(fF.property("THE_GEOM"), fF.literal(geometry));

SimpleFeatureIterator srcIter = null;
try {
    srcIter = featureSource.getFeatures(filter).features();
    while (srcIter.hasNext()) {
        SimpleFeature feature = srcIter.next();
        Geometry geom = (Geometry) feature.getDefaultGeometry();
        System.out.println(geom.toText());

        for (int k = 0; k < feature.getAttributeCount(); k++) {
            AttributeDescriptor desc = feature.getFeatureType().getDescriptor(k);
            System.out.println(desc.getLocalName() + " = " + feature.getAttribute(k));
        }
    }
} finally {
    if (srcIter != null) srcIter.close();
}


아래 이미지는 Altibase에 연결 후 레이어를 Unique Value Style을 적용한 예입니다.

◎ GeoServer
GeoServer 설치폴더의 webapps\geoserver\WEB-INF\lib 폴더에 gt-jdbc-altibase-1.0.0.jar 파일과 Altibase.jar 파일을 복사합니다.

GeoServer를 실행합니다.

다음 그림과 같이 Stores -> Add New Store를 클릭합니다.
Altiabse를 클릭한 후 그림과 같이 연결정보를 입력합니다.
이후 과정은 PostGIS를 사용할 때와 동일합니다.
다음은 ADMIN 이라는 레이어 등록 후 OpenLayer로 미리보기 한 이미지입니다.