자바 가 GDAL 로 shapefile 을 읽 고 쓰 는 방법 예시

4925 단어 자바gdalshapefile
GDAL 소개
GDAL(Geospatial Data Abstraction Library)은 X/MIT 인 허가 프로 토 콜 에 따 른 오픈 소스 격자 공간 데이터 변환 라 이브 러 리 입 니 다.그것 은 추상 적 인 데이터 모델 을 이용 하여 지원 하 는 각종 파일 형식 을 표현 한다.그것 은 데이터 변환 과 처 리 를 위 한 일련의 명령 행 도구 도 있다.
GDAL 공식 사이트:http://www.gdal.org/현재 유행 하 는 각종 지도 데이터 형식 을 지원 할 수 있 습 니 다.격자 와 벡터 지 도 를 포함 하여 공식 사 이 트 를 구체 적 으로 참고 할 수 있 습 니 다.이 라 이브 러 리 는 C/C++개발 을 사용 합 니 다.자바 에서 사용 하려 면 스스로 컴 파일 해 야 합 니 다.구체 적 인 컴 파일 과정 은 여기 서 말 하지 않 겠 습 니 다.다음은 본 고의 주요 내용 을 살 펴 보 겠 습 니 다.
자바 가 GDAL 을 사용 하여 shapefile 을 읽 고 쓰 는 방법 예시
shp 파일 을 읽 고 json 으로 변환 합 니 다.

import org.gdal.ogr.*;
import org.gdal.ogr.Driver;
import org.gdal.gdal.*;

public class GdalShpTest {
 public static void main(String[] args) {
  //        
  ogr.RegisterAll();
  //         ,         
  gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");
  //             ,       
  gdal.SetConfigOption("SHAPE_ENCODING","");

  String strVectorFile = "D:\\test\\NODE.shp";
  //    
  DataSource ds = ogr.Open(strVectorFile,0);
  if (ds == null)
  {
   System.out.println("      !" );
   return;
  }
  System.out.println("      !" );
  Driver dv = ogr.GetDriverByName("GeoJSON");
  if (dv == null)
  {
   System.out.println("      !" );
   return;
  }
  System.out.println("      !" );
  dv.CopyDataSource(ds, "D:\\test\
ode.json"); System.out.println(" !" ); } }
shp 파일 쓰기

import org.gdal.ogr.*;
import org.gdal.gdal.*;
class writeShp2 {
 public static void main(String[] args) {
  writeShp2 readshpObj = new writeShp2();
  readshpObj.WriteVectorFile();
 }

 static void WriteVectorFile() {
  String strVectorFile = "D:\\test\\test.shp";

  ogr.RegisterAll();
  gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
  gdal.SetConfigOption("SHAPE_ENCODING", "CP936");

  String strDriverName = "ESRI Shapefile";
  org.gdal.ogr.Driver oDriver = ogr.GetDriverByName(strDriverName);
  if (oDriver == null) {
   System.out.println(strVectorFile + "      !
"); return; } DataSource oDS = oDriver.CreateDataSource(strVectorFile, null); if (oDS == null) { System.out.println(" 【" + strVectorFile + "】 !
"); return; } Layer oLayer = oDS.CreateLayer("TestPolygon", null, ogr.wkbPolygon, null); if (oLayer == null) { System.out.println(" !
"); return; } // // FieldID FieldDefn oFieldID = new FieldDefn("FieldID", ogr.OFTInteger); oLayer.CreateField(oFieldID); // FeatureName , 50 FieldDefn oFieldName = new FieldDefn("FieldName", ogr.OFTString); oFieldName.SetWidth(100); oLayer.CreateField(oFieldName); FeatureDefn oDefn = oLayer.GetLayerDefn(); // Feature oFeatureTriangle = new Feature(oDefn); oFeatureTriangle.SetField(0, 0); oFeatureTriangle.SetField(1, " "); Geometry geomTriangle = Geometry.CreateFromWkt("POLYGON ((0 0,20 0,10 15,0 0))"); oFeatureTriangle.SetGeometry(geomTriangle); oLayer.CreateFeature(oFeatureTriangle); // Feature oFeatureRectangle = new Feature(oDefn); oFeatureRectangle.SetField(0, 1); oFeatureRectangle.SetField(1, " "); Geometry geomRectangle = Geometry.CreateFromWkt("POLYGON ((30 0,60 0,60 30,30 30,30 0))"); oFeatureRectangle.SetGeometry(geomRectangle); oLayer.CreateFeature(oFeatureRectangle); // Feature oFeaturePentagon = new Feature(oDefn); oFeaturePentagon.SetField(0, 2); oFeaturePentagon.SetField(1, " "); Geometry geomPentagon = Geometry.CreateFromWkt("POLYGON ((70 0,85 0,90 15,80 30,65 15,70 0))"); oFeaturePentagon.SetGeometry(geomPentagon); oLayer.CreateFeature(oFeaturePentagon); oDS.SyncToDisk(); System.out.println("

"); } }
test.dbf,test.shp,test.shx 를 얻 습 니 다.
test.dbf 는 다음 과 같 습 니 다.

열 린 모양 은 다음 과 같 습 니 다.

총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.

좋은 웹페이지 즐겨찾기