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简单对象模型相关推荐

  1. GDAL / OGR 学习手册 [02] :栅格数据读取

    目录 一.栅格数据驱动 二.gdal.Open 三.gdal.Dataset 四.获取影像的基本信息 1. 获取影像元数据 2. 获取影像基本信息 一.栅格数据驱动 GDAL 通过数据驱动来识别各种类 ...

  2. Java环境下GDAL / OGR环境配置与入门

    Java环境下GDAL / OGR环境配置与入门 0.概述 1.环境配置 1.1 开发环境下载 1.2 环境变量配置 1.3java工程配置 1.3.1新建Java工程 1.3.2添加GDAL的jar ...

  3. [Python] GDAL/OGR操作矢量数据(shp、GeoJSON)

    GDAL项目旨于地理数据抽象模型对地理数据文件进行读写管理:而其项目下有两大类模块:GDAL和OGR OGR提供操作矢量数据的API,GDAL模块提供栅格数据的API [相关链接] 1.GDAL/OG ...

  4. gdal java shp_【GDAL/OGR】利用GDAL/OGR读取shp文件并转换为json文件(Java版)

    前言: 对于GIS开发者来说,GDAL/OGR是最熟悉不过的开源GIS库了,GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间 ...

  5. java gdal postgresql_使用GDAL/OGR操作Postgresql数据库

     GDAL(Geospatial Data AbstractionLibrary)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用抽象数据模型来表达所支持的各种文件格式.它还有一系列命 ...

  6. SimVLM:拒绝各种花里胡哨!CMUGoogle提出弱监督极简VLP模型,在多个多模态任务上性能SOTA...

    关注公众号,发现CV技术之美 本文介绍论文『SimVLM: Simple Visual Language Model Pretraining with Weak Supervision』,由 CMU& ...

  7. GDAL/OGR 1.9.0获取shp文件中中文字段值和属性值乱码文件解决

    GDAL/OGR 1.9.0又一个新的版本发布,但是又发现了一个对中文支持的问题,在之前的1.8.1版本开始,GDAL开始逐渐加入了对宽字节的支持,或者说是对各种编码的支持,GDAL在默认处理中,将所 ...

  8. TF-Lite极简参考-模型转换

    TF-Lite极简参考-模型转换 <TF-Lite极简参考-模型转换>   TensorFlow Lite 可以很方便的把基于TensorFlow训练的模型进行转换,然后推理,在Tenso ...

  9. C#环境下GDAL / OGR环境配置与入门

    C#环境下GDAL.OGR环境配置与入门 0.概述 1.环境配置 2.类库介绍 3.代码实践 4. 总结 0.概述 由于需要进行一些Shapefile文件的读取和管理,但是ArcGIS的二次开发工具又 ...

最新文章

  1. Centos 7.X安装DB2 10.5
  2. 搭建无人值守安装服务器(CentOS)
  3. 【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )
  4. Spring Cloud一站式的微服务架构解决方案
  5. python使用rabbitMQ介绍五(话题模式)
  6. 如何在virtualbox中对虚拟机截图
  7. 在VC8里调用VBScript.dll的RegularExpression
  8. T-Sql(一)简单语法
  9. 优秀Python学习资源收集汇总
  10. 网络安全应急响应实施过程
  11. 超五类双绞线,六类双绞线,七类双绞线的细微区别
  12. 纹理压缩简介 DXT PVR ETC
  13. Springboot Web应用中服务器配置参数ServerProperties的加载
  14. vue通过子组件修改父组件prop的几种实现方式
  15. 星空云协同开发入门(一)
  16. Cygwin的简介以及使用方法
  17. 求解汽车加油问题C++
  18. 华为鸿蒙系统什么时候出售,华为智慧屏搭载鸿蒙预约发售 华为鸿蒙系统手机什么时候上市 华为鸿蒙系统是什么系统?...
  19. 新生儿黄疸警惕蚕豆病
  20. springboot-定时任务

热门文章

  1. mysql数据库设计与应用答案智慧树_智慧树_MySQL数据库设计与应用_完整免费答案...
  2. 努比亚z17s刷原生安卓_电脑运行手机APP,不会没关系,我推荐你使用显卡服务器运行安卓模拟器...
  3. 靶场练习第二十二天~vulnhub靶场之Momentum-2
  4. CMake学习使用(基于vscode)
  5. OLTP 系统和 OLAP 系统的核心设计思想
  6. TAFE的完整形式是什么?
  7. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管
  8. Java里面的几种路径的区别
  9. php错误拦截机制,php拦截异常怎么写-PHP问题
  10. php的变量、传值、传址、销毁变量