SimpleSHP v0.1

SimpleSHP는 ESRI에서 정의한 SHP와 DBF 파일을 처리하기 위한 자바 클래스 모음입니다. 이 라이브러리는 사용하기 쉬우며 가볍고 매우 단순한 구조를 갖습니다. 아래의 UML은 SHP 파일 Access에 대한 Class Diagram 입니다.

사용자 삽입 이미지

SHP 파일에 대한 Access에 대한 예제 코드는 아래와 같습니다.

AccessSHP access = new AccessSHP("filename.shp");
RowSetSHP rowSet = access.getRowSet();
int rowCount = rowSet.getRowCount();
try {
    for(int fid=0; fid < rotCount; fid++) {
        RowSHP row = rowSet.getRow(fid+1);
        if(row.load()) {
            System.out.println(row.getFID());
            Geometry geom = row.getGeometry();
            System.out.println(geom.getEnvelopeInternal().toString());
            row.unload();
        }
    }

    access.release();
} catch (IOException e) {
    e.printStackTrace();
}  

사용자 삽입 이미지

DBF 파일에 대한 Access에 대한 예제 코드는 아래와 같습니다.

AccessDBF access = new AccessDBF("filename.dbf");
RowSetDBF rowSet = access.getRowSet();
int rowCount = rowSet.getRowCount();
try {
    for(int fid=0; fid < rowCount; ++fid) {       
        RowDBF row = rowSet.getRow(fid+1);
        if(row.load()) {
            System.out.println(row.getFID());
            FieldSet fieldSet = access.getFieldSet();
            for(int iField=0; iField                Field field = fieldSet.getField(iField);
                System.out.println(field.getFieldName() 
                    + ": " + row.getValueAsString(iField));
            }
  
            row.unload();
        }

        access.release();
    }
} catch (IOException e) {
    e.printStackTrace();
}  

버전 이력
           1.  v0.1 2011/05/20 최초 배포

라이브러리 소스코드 다운로드

상세 문서 URL

http://www.gisdeveloper.co.kr/download/simpleshp

외부 참조 라이브러리

JTS(Java Topology Suite, http://www.vividsolutions.com/jts/jtshome.htm)

[GIS] SHP와 SHX 파일 해석(파싱)시 주의할 점

SHP의 레코드 헤더와 SHX의 레코드 헤더는 각각 Content Length와 Offset, Content Length라는 Integer 타입의 값이 있습니다. 물론 SHP와 SHX에 대한 Content Length는 동일합니다. 여기서 주의할 점은 이 값이 BYTE 개수가 아닌 WORD 개수라는 점입니다. 예를 들어서 Content Length가 100이라고 할때 레코드 내용의 길이가 100 BYTES가 아닌 2배 길이인 200 BYTES라는 것이지요.

사용자 삽입 이미지
ESRI에서 제공하고 있는 문서에.. 잘(?) 나와 있네요.  길이니 당연히 BYTE 개수겠지 하고 술렁 술렁 넘어갔더랬는데.. 이런 복병이.. 대학원 다닐때 SHP 파일 해석하는 것을 구현했던 적이 있었는데.. 그땐 문제없이 잘했더랬는데.. 초심자의 마음으로 문서를 정밀하게(?) 읽고 구현했던 시절이였으니 지금의 실수가 없었겠지 않나 싶습니다. 여튼.. SHP파일 파싱할때 요점 주의하시기 바랍니다.. 초심의 잃지 말아야한다.. 라는 각오를 새롭게 다져봅니다.

[GIS] JTS Geometry Class Diagram

JTS는 자바로 잘짜여진 지오메트리 공간연산 기능을 제공하는 오픈소스입니다. 세상에 나온지 수년이 지났고 워낙 잘짜여진터라 C언어로도 포팅되졌습니다. 위의 UML을 그려본 이유는 최근에 자바언어로 ESRI의 SHP 파일과 DBF 파일을 읽고 쓸 수 있는 라이브러리를 오픈소스 차원에서 개발할때 JTS에서 제공하는 Geometry 타입을 사용하기 위함입니다. 자바언어로 SHP와 DBF 파일을 읽는 오픈소스를 찾아보았으나 너무 다른 라이브러리에 깊이 관계를 맺고 있어 최적화시켜 사용하기가 제겐 부담이 되어 이번 기회에 새롭게 만들어 오픈소스 형태로 공유해볼 생각입니다.

GIS 기술 수준 상위 1%를 꿈꾸며..

강원도 평창군의 삼양대관령목장. 이곳에서 본 풍력발전단지가 가장 먼저 눈에 띠었다. 국내에서 최대 규모의 풍력발전단지란다. 총 53기로 한대당 23억이란다. 인근 도시의 전기 수요의 60%를 담당한단다. 풍력만으로 60%라니… 원자력 발전기도 아니고..!?

무언가를 만들려면 저런거 만들어야 한다라는 생각이 들었다. 많은 곳에서 필요로 하는 것은 아니지만.. 필요한 곳에서는 꼭 해야만 하는.. 없어서는 않되는 것.

이런 생각이 들었다. 소프트웨어 개발, 특히 GIS 개발 분야는 잘만들어진 공개된 OpenAPI가 많다. 오픈소스도 많다. 이러한 공개속에 사용자들에게 GIS 소프트웨어는 공짜라는 인식이 생겨버렸다. 이러한 인식에 반하는 나의 사업모델이 과연 성공할 수 있을까? 여기에 대한 답을 강원도 평창군의 풍력발전단지에서 웅장하게 돌아가는 발전기에서 답을 찾기 바랬다.

기술 수준 상위 1%에 들기 위한 노력과 결실 맺기

기술은 중요하다. GIS를 통해 기술을 보자. GIS 분석가라고 하는 이들에게서 GIS 프로그램을 사용하지 않고 분석하라고 한다면 그들은 업무는 매우 고된 노동이 될 것이며 결국 아무것도 할 수 없다. 물론 GIS 프로그램을 가지고 있다고 모두가 GIS 전문가가 될 수는 없다. 서로가 보조를 맞춰주고 또 서로가 기반이 되어줘야 한다.

나는 기술자다. 즉, GIS 개발자이다. 만약 내가 상위 1%에 들 수 있는게 있다면 그것이 무엇이냐고 물어보자. 그것은 내가 지금까지 해왔으며 내가 가장 잘할 수 있는 GIS 개발 분야이다.

강원도 평창군의 풍력발전단지에 설치된 총 53기의 발전기를 개발하고 설치한 덴마크의 세계 1위 베스타스(Vestas)처럼! 많은 곳에서 필요로 하는 것은 아니지만.. 필요한 곳에서는 꼭 해야만 하는.. 없어서는 않되는 것. 기술 수준 상위 1%에 도전한다.