gdal - ogr简单对象模型
ogr是gdal的一部分,主要是处理gis的矢量数据。
ogr的地理数据模型符合OGC的简单数据对象模型标准,如下图:
最顶层是Geometry类,下面的点(Point),曲线(Curve),表面(Surface)分别继承于它。然后geometry与投影相关的类成关联关系。
线串(LineString)继承于曲线(Curve),且线串(LineString)由点(Point)聚焦而成,一对连续的点决定一个线段。
线(Line)与环线(LinearRing)同时继承于线串(LineString)。
线(Line)是只有两个点的线串(LineString)。
环线(LinearRing)是一种特殊的线串(LineString),如下图所示:
a,b,c,d四个LineString中,只有c是LineRing,因为只有c是简单(即不自交)且闭合的。
表面(Surface) 是二维的地理对象。
多面体表面(PolyhedralSurfaces)与多边形(Polygon)承继与它。
多面体表面(PolyhedralSurfaces)是由多个简单表面(Surface)构成的。如下图所示:
多边形(Polygon)是一个平面表面,有一个外部边界及0或多个内部边界,每一个内部边界叫做多边形的一个洞。如下图所示:
而三角形(Triangle)继承于多边形(Polygon),三角形是由3个不同的,且非共同线顶点构成的,没有内部边界。
多曲线(MultiCurve)是有多个Curve构成的集合。如下图所示:
MultiCurve是一个抽象类,给子类定义了很多接口。且有以下性质:
MultiCurve当且仅当所有子Curve都是简单(无自交)才是简单的多曲线;两个子曲线的边界都是他们的交点。
MultiCurve的边界的确定采用除2原则:A Point is in the boundary of a MultiCurve if it is in the boundaries of an odd number of elements of the MultiCurve。
a的边界是{s1,e2},b的边界是{s1,e1},c的边界是空。
如果MultiCurve的子Curve都是闭合的,那它也是闭合的,此时边界总为空。MultiCurve是定义成拓扑闭合的。
MultiSurface是Surface的集合,但是PolyhedralSurface并不是MultiSurface。
因为它违反了MultiSurface的规则:子Polygon的边界相交于有限有点。
---------------------------------------------------------------------------------------
具体类的说明:
Geometry (ogr_geometry.h): geometry类(OGRGeometry等) 定义了所有矢量数据类(如下图),一些空间分析功能,wkt,wkb的转换,以及投影的引用。
OGRGeometryFactory类用来转换将wkb/wkt与geometry的对象互相转换。
OGRGeometry类中有一个OGRSpatialReference类的对象,用来定义投影的相关信息。
OGRSpatialReference(ogr_spatialref.h):)支持地理坐标系统,投影坐标系统。但纵坐标系统,地心坐标系统和复合(水平+垂直)坐标系统不支持。
坐标系统间的转换在OGRCoordinateTransformation类中调用了proj.4的东西。
OGRGeometry的成员文档:http://www.gdal.org/ogr/classOGRGeometry.html
OGRFeature(ogr_feature.h):OGRFeature类里描述了OGRGeometry的空间信息,属性信息,fid,以及类的标识。
OGRFeatureDefn类里描述了一个图层的字段信息,包括字段名称,字段类型,字段属性。
fid是空间数据的主键,定义成长整型,gml内是string型,oracle里的rowid是大于4bytes的.
OGRFeatureDefn::GetGeomType()).返回空间数据的类型(OGRwkbGeometryType),wkbUnknown的话则任意类型都可以。
OGRLayer (ogrsf_frmts.h):表示数据源中的一层空间数据,可以认为OGRLayer是从底层数据源读取数据的一个中继。
OGRLayer::GetNextFeature()可以随机或顺序读取 .
一个OGRLayer和一个OGRFeature是一一对应的。
OGRDataSource (ogrsf_frmts.h): 一个OGRDataSource对象表示一个文件或数据库,含有多个OGRLayer对象。
OGRSFDriver(ogrsf_frmts.h): OGRSFDriver翻译各种矢量数据类型,是打开各种数据对象的驱动。
所有的数据驱动在 OGRSFDriverRegistrar类中管理。
-----------------------------------------------------------
读取一个shp的步骤
1,
//注册数据驱动--ALL所有格式
OGRRegisterAll();
2,
//打开数据源
OGRDataSource *poDS = OGRSFDriverRegistrar::Open("E:\\exercise\\qt\\qmapcui-build-desktop\\debug\\ZW0817P.shp");
3,
//获取图层
OGRLayer *poLayer = poDS->GetLayer(0);
4,
//获取数据
OGRFeature *poFeature = poLayer->GetFieldAsString(0);
5,通过poFeature的各种函数就可以读出数据了。
6,关闭数据源。
OGRDataSource::DestroyDataSource(poDS);
转载于:https://www.cnblogs.com/zhanglibo0626/archive/2011/04/01/2002743.html
gdal - ogr简单对象模型相关推荐
- GDAL / OGR 学习手册 [02] :栅格数据读取
目录 一.栅格数据驱动 二.gdal.Open 三.gdal.Dataset 四.获取影像的基本信息 1. 获取影像元数据 2. 获取影像基本信息 一.栅格数据驱动 GDAL 通过数据驱动来识别各种类 ...
- Java环境下GDAL / OGR环境配置与入门
Java环境下GDAL / OGR环境配置与入门 0.概述 1.环境配置 1.1 开发环境下载 1.2 环境变量配置 1.3java工程配置 1.3.1新建Java工程 1.3.2添加GDAL的jar ...
- [Python] GDAL/OGR操作矢量数据(shp、GeoJSON)
GDAL项目旨于地理数据抽象模型对地理数据文件进行读写管理:而其项目下有两大类模块:GDAL和OGR OGR提供操作矢量数据的API,GDAL模块提供栅格数据的API [相关链接] 1.GDAL/OG ...
- gdal java shp_【GDAL/OGR】利用GDAL/OGR读取shp文件并转换为json文件(Java版)
前言: 对于GIS开发者来说,GDAL/OGR是最熟悉不过的开源GIS库了,GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间 ...
- java gdal postgresql_使用GDAL/OGR操作Postgresql数据库
GDAL(Geospatial Data AbstractionLibrary)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用抽象数据模型来表达所支持的各种文件格式.它还有一系列命 ...
- SimVLM:拒绝各种花里胡哨!CMUGoogle提出弱监督极简VLP模型,在多个多模态任务上性能SOTA...
关注公众号,发现CV技术之美 本文介绍论文『SimVLM: Simple Visual Language Model Pretraining with Weak Supervision』,由 CMU& ...
- GDAL/OGR 1.9.0获取shp文件中中文字段值和属性值乱码文件解决
GDAL/OGR 1.9.0又一个新的版本发布,但是又发现了一个对中文支持的问题,在之前的1.8.1版本开始,GDAL开始逐渐加入了对宽字节的支持,或者说是对各种编码的支持,GDAL在默认处理中,将所 ...
- TF-Lite极简参考-模型转换
TF-Lite极简参考-模型转换 <TF-Lite极简参考-模型转换> TensorFlow Lite 可以很方便的把基于TensorFlow训练的模型进行转换,然后推理,在Tenso ...
- C#环境下GDAL / OGR环境配置与入门
C#环境下GDAL.OGR环境配置与入门 0.概述 1.环境配置 2.类库介绍 3.代码实践 4. 总结 0.概述 由于需要进行一些Shapefile文件的读取和管理,但是ArcGIS的二次开发工具又 ...
最新文章
- Centos 7.X安装DB2 10.5
- 搭建无人值守安装服务器(CentOS)
- 【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )
- Spring Cloud一站式的微服务架构解决方案
- python使用rabbitMQ介绍五(话题模式)
- 如何在virtualbox中对虚拟机截图
- 在VC8里调用VBScript.dll的RegularExpression
- T-Sql(一)简单语法
- 优秀Python学习资源收集汇总
- 网络安全应急响应实施过程
- 超五类双绞线,六类双绞线,七类双绞线的细微区别
- 纹理压缩简介 DXT PVR ETC
- Springboot Web应用中服务器配置参数ServerProperties的加载
- vue通过子组件修改父组件prop的几种实现方式
- 星空云协同开发入门(一)
- Cygwin的简介以及使用方法
- 求解汽车加油问题C++
- 华为鸿蒙系统什么时候出售,华为智慧屏搭载鸿蒙预约发售 华为鸿蒙系统手机什么时候上市 华为鸿蒙系统是什么系统?...
- 新生儿黄疸警惕蚕豆病
- springboot-定时任务
热门文章
- mysql数据库设计与应用答案智慧树_智慧树_MySQL数据库设计与应用_完整免费答案...
- 努比亚z17s刷原生安卓_电脑运行手机APP,不会没关系,我推荐你使用显卡服务器运行安卓模拟器...
- 靶场练习第二十二天~vulnhub靶场之Momentum-2
- CMake学习使用(基于vscode)
- OLTP 系统和 OLAP 系统的核心设计思想
- TAFE的完整形式是什么?
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管
- Java里面的几种路径的区别
- php错误拦截机制,php拦截异常怎么写-PHP问题
- php的变量、传值、传址、销毁变量