반응형

shp2pgsql로 shape 파일을 컨버팅하는 과정에서 골치 아팠던 게 dbf 파일 속성 파일에 대한 인코딩을 알 수 있는 방법이 무엇이 있을까 고민하다 처음에는 shape의 스키마에 접근해서 charset을 가져오는 걸 썼었다.

 

 

 

shape 스키마에서 characterset을 가져오는 소스는 아래와 같다.

import java.io.File;
import java.io.IOException;
import java.net.URL;

import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.shapefile.files.ShpFiles;
import org.geotools.data.shapefile.shp.ShapeType;
import org.geotools.data.shapefile.shp.ShapefileReader;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.geometry.jts.LiteCoordinateSequence;
import org.geotools.referencing.CRS;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.opengis.style.Style;

public class ShapeSchemaInfo {

    public static void main(String[] args) throws Exception {
        String dir = "파일 경로";
        String fileName = "파일명.shp";
        
        try {
            // TODO Auto-generated method stub
            URL url = new File(dir + fileName).toURI().toURL();
            ShapefileDataStore ds = new ShapefileDataStore(url);
            SimpleFeatureCollection fc = ds.getFeatureSource(ds.getTypeNames()[0]).getFeatures();

            String encoding = ds.getCharset().toString();
            System.out.println("shp schema encoding : "+encoding);

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

이 소스는 dbf 속성 파일에 대한 인코딩이 아닌 shp 파일의 대한 인코딩 정보를 가져오는 것이다. 

 

그러면 dbf 파일 자체의 인코딩을 확인할려면 어떻게 해야 할까? 

 

QGIS에서 속성 인코딩을 변경하고  export 하면 export한 경로에 확장자가. cpg인 파일이 생성된다.

 

. cpg 파일은 속성에 데이터에 대한 charatset이 명시되어있다.

 

shape 파일 확장자에 대한 자세한 내용은 아래 링크에서 확인할 수 있다.

https://en.wikipedia.org/wiki/Shapefile

 

Shapefile - Wikipedia

The shapefile format is a geospatial vector data format for geographic information system (GIS) software. It is developed and regulated by Esri as a mostly open specification for data interoperability among Esri and other GIS software products.[1] The shap

en.wikipedia.org

 

그러면. cpg 파일을 java에서 FileInputStream으로 인코딩인 어떤 건지 확인해보면 아래와 같다.

File file = new File("파일경로/파일명.cpg");

try {

    FileInputStream fis = new FileInputStream(file);

    byte[] buf = new byte[10];
    fis.read(buf);
    String charsetStr = new String(buf);
    System.out.println("인코딩 정보 : "+charsetStr)
} catch (IOException ie) {
    ie.printStackTrace();
}

 

 

java로 shape 파일과 dbf 인코딩을 다루는 예제를 살펴보았다.

 

다음 포스팅에서는 raster 이미지 geotiff에 대해 알아보도록하겠다.

 

반응형

+ Recent posts