자바 가 GDAL 로 shapefile 을 읽 고 쓰 는 방법 예시
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 는 다음 과 같 습 니 다.
열 린 모양 은 다음 과 같 습 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.