반응형

이번 포스팅에서는 shapefile의 schema를 뜯어보도록 하겠다.

 

qgis에서 shp 파일 레이어를 추가하게 되면 우측 하단에 어떤 좌표계인지 바로 확인할 수 있었다.

 

prj 파일도 아니고 그냥 shp파일만 추가했는데 어떻게 srs 코드를 알 수 있을까 고민하던 중 geotools로 한번 구현해보고 싶었다.

 

역시 구글링 도움도 컷지만 인터페이스와 함수들에 대해 하나 하나 뜯어보니 쉽게 찾아 낼 수 있었다.

 

geotools 설치에 관련해서는 생략하겠다.  설치는 메이븐으로 진행했고 설치 관련해서 아래 링크를 참조하면 된다.

docs.geotools.org/stable/userguide/tutorial/quickstart/index.html

 

Quickstart — GeoTools 25-SNAPSHOT User Guide

Quickstart Welcome to your first GeoTools project! We are going to set up a project using GeoTools to quickly display a shapefile on screen. This tutorial is available for: If you are interested in porting this tutorial to an additional IDE please contact

docs.geotools.org

shape 파일의 스키마에 접근하는 거에 대한 자세한 설명은 아래 소스와 주석을 같이 참고하면 되겠다.

 

 

먼저 좌표계에 관한 데이터를 가져오고  shape 파일의 속성 인코딩을 알아보겠다.

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;

import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.feature.FeatureCollection;
import org.geotools.referencing.CRS;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

public class GetShapeSchemaInfo {

	public static void main(String[] args) {
		String dir="shape 파일 경로";
		String fileName="파일명.shp";
		
		try {
			
			URL url = new File(dir+fileName).toURI().toURL();
            
          	  	//shapefiledatastore에 접근하면 featurecollection에서 스키마에 접근할 수 있다.
			ShapefileDataStore ds = new ShapefileDataStore(url); 
			SimpleFeatureCollection fc = ds.getFeatureSource(ds.getTypeNames()[0]).getFeatures();
			
           	 	//proj4 정의를 스트링으로 가져온다.
            		String projWkt = fc.getSchema().getCoordinateReferenceSystem().toWkt();
            
           	 	//lookupEpsgCode는 CRS 좌표계 시스템을 epsg 코드를 찾아서 리턴한다.
            		int epgs_auth_code =CRS.lookupEpsgCode(fc.getSchema().getCoordinateReferenceSystem(), true);
				
                //shape 파일 속성 인코딩 정보
                	String charsetStr = ds.getCharset().toString();
            System.out.println("EPSG:"+codeInt);
			System.out.println("PROJ="+projWkt);
            System.out.println("Charset:"+charsetStr);
            
            
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 

이 작업을 하면서 CRS와 SRS에 대한 차이점이 있다는 걸 알게 되었다.

 

다음 포스팅에서는 두 차이점에 대해 알아보고자 한다.

 

반응형

+ Recent posts