標籤:tin mtr 失敗 null 簡單 reg sso 屬性 class
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檔案