gis利器之Gdal(三)gdb数据读取

简介: 本文介绍了arcgis下gdb和mdb数据库文件,简单比较了两者的区别​。文中提供了演示用的gdb数据的下载网址和数据目录展示,并采用qgis进行数据预览,最终给出了给予gdal的​gdb数据解析完整代码

     众所周知,arcgis依然是目前最流行的gis数据管理制作平台。在gis领域,仍然要将arcgis支持的矢量数据读取。首先,简单介绍下gdb数据。在ArcGIS软件中,地理数据库分为两种,File Geodatabase(文件地理数据库)和Personal Geodatabase(个人地理数据库)。

一、数据库内容介绍

1.1 文件地理数据库GDB

     文件地理数据库(File Geodatabase)数据后缀表达为.gdb,整体组织为文件夹,可以存储、查询和管理空间数据和⾮空间数据。在不使用DBMS的情况下能够扩展并存储大量数据。文件地理数据库可同时有多个用户使用,但一个数据只能有一个用户编辑。因此,一个文件地理数据库可以由多个编辑者访问,但必须编辑不同的数据。

1.2 个人地理数据库MDB

     个人地理数据库(Personal Geodatabase)数据后缀表达为.mdb,整体组织为文件,所有的数据集都存储于Microsoft Access数据文件内,在Microsoft Access数据文件中存储和管理。

二、gdb数据库格式介绍说明

image.png


     gdb数据存放在如上所示的目录中,除非你非常熟悉相关领域数据管理,否则不要轻易去编辑这些文件。

三、在Qgis中打开gdb数据,事先预览

     如果你没有测试数据,可以从以下网站下载演示数据,http://horizon2021.xyz/

    我们下载全国行政区划的gdb数据,解压后,将gdb文件夹拖到qgis中展示,可以看到以下空间信息。

    打开任意的图层属性表格,以分省为例:

image.png

四、使用Gdal读取解析gdb数据

      对于gdal常规操作等见之前的系列文章gis利器之Gdal(二)shp数据读取和windows下gdal的java开发环境搭建。这里不再赘述。读取gdb时,注意使用以下驱动

// 读取数据,这里以gdb文件为例StringstrDriverName="OpenFileGDB";
// 创建一个文件,根据strDriverName扩展名自动判断驱动类型org.gdal.ogr.DriveroDriver=ogr.GetDriverByName(strDriverName);
其它的信息跟读取shp文件是一样的。详细代码如下所示:@TestpublicvoidtestReadGdb() {
// 指定文件的名字和路径StringgdbFile="F:\\vector_data\\other\\中国行政区划数据.gdb\\中国行政区划数据.gdb";
// 注册所有的驱动ogr.RegisterAll();
// 为了支持中文路径,请添加下面这句代码gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
// 为了使属性表字段支持中文,请添加下面这句gdal.SetConfigOption("SHAPE_ENCODING", "CP936");
// 读取数据,这里以gdb文件为例StringstrDriverName="OpenFileGDB";
// 创建一个文件,根据strDriverName扩展名自动判断驱动类型org.gdal.ogr.DriveroDriver=ogr.GetDriverByName(strDriverName);
if (oDriver==null) {
System.out.println(strDriverName+" 驱动不可用!\n");
return;
    }
DataSourcedataSource=oDriver.Open(gdbFile, 0);
for(inti=0;i<dataSource.GetLayerCount();i++) {
LayerlayerIdx=dataSource.GetLayer(i);
System.out.println("图层名称:<==>"+layerIdx.GetName());
    }
Layerlayer=dataSource.GetLayer("分省");
StringlayerName=layer.GetName();
System.out.println("图层名称:"+layerName);
SpatialReferencespatialReference=layer.GetSpatialRef();
//System.out.println(spatialReference);System.out.println("空间参考坐标系:"+spatialReference.GetAttrValue("AUTHORITY", 0)
+spatialReference.GetAttrValue("AUTHORITY", 1));
double[] layerExtent=layer.GetExtent();
System.out.println("图层范围:minx:"+layerExtent[0] +",maxx:"+layerExtent[1] +",miny:"+layerExtent[2]
+",maxy:"+layerExtent[3]);
FeatureDefnfeatureDefn=layer.GetLayerDefn();
intfieldCount=featureDefn.GetFieldCount();
Map<String,String>fieldMap=newHashMap<String,String>();
for (inti=0; i<fieldCount; i++) {
FieldDefnfieldDefn=featureDefn.GetFieldDefn(i);
// 得到属性字段类型intfieldType=fieldDefn.GetFieldType();
StringfieldTypeName=fieldDefn.GetFieldTypeName(fieldType);
// 得到属性字段名称StringfieldName=fieldDefn.GetName();
fieldMap.put(fieldTypeName, fieldName);
    }
System.out.println(fieldMap);
longfeatureCount=layer.GetFeatureCount();
System.out.println("图层要素个数:"+featureCount);
Featurefeature2=null;
while((feature2=layer.GetNextFeature()) !=null) {
//System.out.println(feature2.GetGeometryRef().ExportToJson());System.out.println(feature2.GetFieldAsString("Shape_Area") +"\t"+feature2.GetFieldAsString("省区"));
  }
oDriver.delete();
gdal.GDALDestroyDriverManager();
}

控制台输出以下信息:

image.png

总结

     本文介绍了arcgis下gdb和mdb数据库文件,简单比较了两者的区别。文中提供了演示用的gdb数据的下载网址和数据目录展示,并采用qgis进行数据预览,最终给出了给予gdal的gdb数据解析完整代码。

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
5月前
|
开发者 iOS开发
如何使用 Instruments 工具来分析应用的性能?
如何使用 Instruments 工具来分析应用的性能?
88 2
|
存储 Java 定位技术
gis利器之Gdal(二)shp数据读取
本文首先简单介绍了空间数据shp数据的基本知识,其常见的文件组成形式。使用qgis软件对数据进行常规预览,最后重点介绍了使用gdal对矢量信息进行读取,​包括空间信息和属性信息
1259 0
gis利器之Gdal(二)shp数据读取
|
2月前
|
JSON JavaScript API
用Python编写小工具下载OSM路网数据
用Python编写小工具下载OSM路网数据
|
5月前
|
人工智能 数据可视化 定位技术
【工具使用】QGIS导入csv文件进行数据可视化
【工具使用】QGIS导入csv文件进行数据可视化
158 0
|
XML JSON 数据格式
< Python全景系列-4 > 史上最全文件类型读写库大盘点!什么?还包括音频、视频?
< Python全景系列-4 > 史上最全文件类型读写库大盘点!什么?还包括音频、视频?
83 0
|
数据采集 存储 SQL
如何使用Python和sqlite3构建一个轻量级的数据采集和分析平台
据采集和分析是当今时代的一项重要技能,它可以帮助我们从互联网上获取有价值的数据,并对其进行处理和挖掘,从而获得有用的信息和洞察。但是,数据采集和分析并不是一件容易的事情,它需要我们掌握各种工具和技术,如爬虫、数据库、编程语言、统计方法、可视化工具等。
131 0
如何使用Python和sqlite3构建一个轻量级的数据采集和分析平台
|
定位技术 API 数据库
GIS开发:开源gdal切片
GIS开发中开源gdal切片使用
409 0
|
JSON 关系型数据库 MySQL
Python3,csvkit功能竟如此强大,不仅可以转换csv格式文件,还能进行数据处理和分析。
Python3,csvkit功能竟如此强大,不仅可以转换csv格式文件,还能进行数据处理和分析。
37674 0
Python3,csvkit功能竟如此强大,不仅可以转换csv格式文件,还能进行数据处理和分析。
|
NoSQL 数据处理 C#
基于C#的ArcEngine二次开发52:GDB数据处理过程中与Name相关的操作
基于C#的ArcEngine二次开发52:GDB数据处理过程中与Name相关的操作
基于C#的ArcEngine二次开发52:GDB数据处理过程中与Name相关的操作
|
传感器 数据可视化 计算机视觉
Python传感器采集数据文件分析处理实验源码
Python传感器采集数据文件分析处理实验源码
499 0
Python传感器采集数据文件分析处理实验源码

相关实验场景

更多
下一篇
无影云桌面