前期重新compile-有兴趣的可以参考适用于安卓的GDAL从编译到读写SHP
从首先https://github.com/houlian0/GdalAndroid下载compile-好的版本
把所以文件添加到工程里边去如下图所示
同时添加gdal.jar
在build.gradle里添加
allprojects {
repositories {
jcenter()
google()
maven {
url 'https://esri.bintray.com/arcgis'
}
flatDir {
dirs project(':app').file('libs')
}
}
}
具体创建shp的代码
private void writeShp() throws UnsupportedEncodingException {
ogr.RegisterAll();
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
gdal.SetConfigOption("SHAPE_ENCODING", "UTF-8");
String strDriverName = "ESRI Shapefile";//文件格式
org.gdal.ogr.Driver oDriver = ogr.GetDriverByName(strDriverName);
if (oDriver == null) {
System.out.println(strDriverName + " 驱动不可用!\n");
return;
}
DataSource oDS = oDriver.CreateDataSource(shpPath, null);
if (oDS == null) {
System.out.println("创建矢量文件【" + shpPath + "】失败!\n");
return;
}
// ogr.wkbPolygon 面 wkbLineString 线 wkbPoint 点
//定义坐标可以从shp的prj文件里获取所需要的参数
org.gdal.osr.SpatialReference sap = new org.gdal.osr.SpatialReference(Coordinate_System[0]);
org.gdal.ogr.Layer oLayer = oDS.CreateLayer("TestPolygon", sap, 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);
try {
oLayer.SyncToDisk();
oDS.SyncToDisk();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("\n数据集创建完成!\n");
}