FileGDB代码示例
1. 读取FileGDB图层
1.1 实现思路
1.2 代码示例
public Layer readGdbLayer(String driverName,String gdbPath,String layerName) {
ogr.RegisterAll();
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
Driver driver = ogr.GetDriverByName(driverName);
DataSource dataSource = driver.Open(gdbPath, 1);
Layer layer = dataSource.GetLayerByName(layerName);
for (int i = 0; i < layer.GetLayerDefn().GetFieldCount(); i++) {
System.out.println(layer.GetLayerDefn().GetFieldDefn(i).GetName());
}
Feature feature = layer.GetNextFeature();
while (feature != null) {
for (int i = 0; i < feature.GetFieldCount(); i++) {
System.out.println(feature.GetFieldDefnRef(i).GetName());
System.out.println(feature.GetFieldAsString(i));
}
System.out.println(feature.GetGeometryRef().ExportToWkt());
feature = layer.GetNextFeature();
}
return layer;
}
2. 写入FileGDB图层
2.1 实现思路
2.2 代码示例
public void writeGdbLayer(String driverName,String gdbPath,String featureDataset,String layerName,int wkid,String wkt) {
ogr.RegisterAll();
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
Vector options = null;
if (CharSequenceUtil.isNotBlank(featureDataset)) {
options = new Vector();
options.add("FEATURE_DATASET=" + featureDataset);
}
Driver driver = ogr.GetDriverByName(driverName);
DataSource dataSource = driver.Open(gdbPath, 1);
if (dataSource == null) {
dataSource = driver.CreateDataSource(gdbPath);
}
Layer layer = dataSource.GetLayerByName(layerName);
if (layer == null) {
SpatialReference sr = new SpatialReference();
sr.ImportFromEPSG(wkid);
layer = dataSource.CreateLayer(layerName, sr,6, options);
}
FieldDefn fieldDefn = new FieldDefn("TEST", 4);
layer.CreateField(fieldDefn);
Feature feature = new Feature(layer.GetLayerDefn());
feature.SetGeometry(ogr.CreateGeometryFromWkt(wkt));
feature.SetField("TEST", "test");
layer.CreateFeature(feature);
dataSource.delete();
}
3. 读取FileGDB数据集
3.1 实现思路
3.2 代码示例
public void readGdbDs(String gisPath){
SystemPropsUtil.set("GDAL_FILENAME_IS_UTF8", "YES");
SystemPropsUtil.set("SHAPE_ENCODING", "UTF-8");
String output = RuntimeUtil.execForStr(StandardCharsets.UTF_8, "ogrinfo", "-json", gisPath);
String jout = null;
if (!JSONUtil.isTypeJSONObject(output)) {
jout = output.substring(output.indexOf("{"));
}
if (!JSONUtil.isTypeJSONObject(jout)) {
jout = output.substring(output.indexOf("{"), output.lastIndexOf("}") + 1);
}
JSONObject jsonObject = JSON.parseObject(jout);
String rootGroup = jsonObject.getString("rootGroup");
System.out.println(rootGroup);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2014-01-05 基于ArcGIS API for Javascript的地图编辑工具