基于java gadl库读取shp文件
话不多说,先上代码
import org.gdal.ogr.DataSource;
import org.gdal.ogr.Driver;
import org.gdal.ogr.Feature;
import org.gdal.ogr.FieldDefn;
import org.gdal.ogr.Layer;
import org.gdal.ogr.ogr;
public class ShpReader {
public static void main(String[] args) {
// 注册GDAL库
ogr.RegisterAll();
// 打开数据源
DataSource dataSource = ogr.Open("D:\\gisdata\\geospark\\city.shp");
// 获取图层数量
int layerCount = dataSource.GetLayerCount();
System.out.println("Layer count: " + layerCount);
// 获取第一个图层
Layer layer = dataSource.GetLayer(0);
// 获取要素数量
int featureCount = layer.GetFeatureCount();
System.out.println("Feature count: " + featureCount);
// 获取字段信息
int fieldCount = layer.GetLayerDefn().GetFieldCount();
for (int i = 0; i < fieldCount; i++) {
FieldDefn fieldDefn = layer.GetLayerDefn().GetFieldDefn(i);
System.out.println("Field name: " + fieldDefn.GetName());
System.out.println("Field type: " + fieldDefn.GetFieldTypeName(fieldDefn.GetFieldType()));
System.out.println("Field width: " + fieldDefn.GetWidth());
System.out.println("Field precision: " + fieldDefn.GetPrecision());
}
// 遍历要素
Feature feature = null;
while ((feature = layer.GetNextFeature()) != null) {
System.out.println("Feature ID: " + feature.GetFID());
System.out.println("Geometry type: " + feature.GetGeometryRef().GetGeometryName());
System.out.println("Geometry coordinates: " + feature.GetGeometryRef().ExportToWkt());
for (int i = 0; i < fieldCount; i++) {
FieldDefn fieldDefn = layer.GetLayerDefn().GetFieldDefn(i);
System.out.println(fieldDefn.GetName() + ": " + feature.GetFieldAsString(i));
}
feature.delete();
}
// 释放资源
dataSource.delete();
}
}