国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java用GDAL讀寫shapefile的方法示例

2019-11-26 13:26:32
字體:
來源:轉載
供稿:網友

GDAL介紹

GDAL(Geospatial Data Abstraction Library)是一個在X/MIT許可協議下的開源柵格空間數據轉換庫。它利用抽象數據模型來表達所支持的各種文件格式。它還有一系列命令行工具來進行數據轉換和處理。

GDAL官方網址:http://www.gdal.org/,它能支持當前流行的各種地圖數據格式,包括柵格和矢量地圖,具體參考官方網站。該庫使用C/C++開發,在Java中使用需要自己編譯,具體編譯過程這里就不說了,下面來看看本文的主要內容吧。

Java使用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//node.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 + " 驅動不可用!/n");   return;  }  DataSource oDS = oDriver.CreateDataSource(strVectorFile, null);  if (oDS == null) {   System.out.println("創建矢量文件【" + strVectorFile + "】失敗!/n");   return;  }  Layer oLayer = oDS.CreateLayer("TestPolygon", null, ogr.wkbPolygon, null);  if (oLayer == null) {   System.out.println("圖層創建失??!/n");   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("/n數據集創建完成!/n"); }}

得到test.dbf, test.shp, test.shx。

test.dbf如下:

打開形狀如下

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 虹口区| 长宁区| 鄂伦春自治旗| 麻阳| 华池县| 石门县| 红河县| 商水县| 定兴县| 闵行区| 茌平县| 连平县| 太原市| 龙口市| 西平县| 安福县| 成都市| 九寨沟县| 正安县| 甘谷县| 尉犁县| 浮山县| 平乡县| 都兰县| 华亭县| 林州市| 左云县| 津市市| 布尔津县| 东源县| 多伦县| 清水县| 乐安县| SHOW| 合江县| 马边| 吉木乃县| 鄄城县| 榕江县| 棋牌| 玉树县|