1. 程式人生 > >Android GIS開發系列-- 入門季(13)Gdal簡單寫個shp文件

Android GIS開發系列-- 入門季(13)Gdal簡單寫個shp文件

ring map register enc 資源 ger 下載地址 不可用 tle

Gdal是用來讀寫柵格與矢量數據的,在Gdal官網,可以下載相關的資源進行平臺的編譯。其實Arcgis底層也是用Gdal來讀取shp文件的,那在Android中可以直接讀寫shp文件嗎,是可以的。這裏已經有人編譯了Android端的so ,下載地址。也可以自己嘗試編譯相關so。

新建項目,將下載的so 與相關資源導入,相關目錄結構如下:
技術分享
註意gdal的相關包名不要修改,避免so讀取不到相應的類。
簡單寫個shp,註意導包,要導入org.gdal下面相關的類:

private void writeShp() throws UnsupportedEncodingException {
        
//存放路徑 String shpPath = basePath + "/my_line.shp"; ogr.RegisterAll(); gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO"); // 不支持中文 gdal.SetConfigOption("SHAPE_ENCODING", ""); String strDriverName = "ESRI Shapefile"; org.gdal.ogr.Driver oDriver
= ogr.GetDriverByName(strDriverName); if (oDriver == null) { System.out.println(" 驅動不可用!\n"); return; } // 創建數據源 DataSource oDS = oDriver.CreateDataSource(shpPath, null); if (oDS == null) { return; }
// 創建一個84坐標系的圖層 org.gdal.osr.SpatialReference sap = new org.gdal.osr.SpatialReference(); sap.SetWellKnownGeogCS("WGS84"); Layer oLayer = oDS .CreateLayer("TestPolygon", sap, ogr.wkbPolygon, null); if (oLayer == null) { System.out.println("圖層創建失敗!\n"); return; } // 下面創建屬性表 // 先創建一個叫FieldID的整型屬性 FieldDefn oFieldID = new FieldDefn("ID", ogr.OFTInteger); oLayer.CreateField(oFieldID, 1); // 再創建一個叫FeatureName的字符型屬性,字符長度為50 FieldDefn oFieldName = new FieldDefn("name", ogr.OFTString); oFieldName.SetWidth(100); oLayer.CreateField(oFieldName, 1); FeatureDefn oDefn = oLayer.GetLayerDefn(); // 創建要素 Feature oFeatureTriangle = new Feature(oDefn); oFeatureTriangle.SetField(0, 0); oFeatureTriangle.SetField(1, "test"); Geometry geomTriangle = Geometry .CreateFromWkt("POLYGON ((112 45,112 30,140 30))"); oFeatureTriangle.SetGeometry(geomTriangle); oLayer.CreateFeature(oFeatureTriangle); //同步到文件中,一定要寫 oLayer.SyncToDisk(); }

用Arcgis MapView加載shp文件效果:
技術分享

Gdal Java相關Api

Android GIS開發系列-- 入門季(13)Gdal簡單寫個shp文件