gdal ogr简单对象模型

摘要:
Ogr是gdal的一部分,主要处理gis的矢量数据。ogr的地理数据模型符合OGC的简单数据对象模型标准,如下图所示:顶层是Geometry类,下面的点、曲线和曲面继承自它。多面体曲面和多边形继承它。根据除以2的原则确定多曲线的边界:在多曲线的奇数个元素的边界中识别多曲线边界中的点。OGRGeometryFactory类用于将wkb/wkt和几何图形的对象相互转换。OGRGeometry的成员文件:http://www.gdal.org/ogr/classOGRGeometry.htmlOGRFeature:OGRFeature该类描述OGRGeometry的空间信息、属性信息、fid和类标识。OGRDataSource:OGRDataSource对象表示文件或数据库,并包含多个OGRLayer对象。

ogr是gdal的一部分,主要是处理gis的矢量数据。

ogr的地理数据模型符合OGC的简单数据对象模型标准,如下图:

gdal ogr简单对象模型第1张

最顶层是Geometry类,下面的点(Point),曲线(Curve),表面(Surface)分别继承于它。然后geometry与投影相关的类成关联关系。

线串(LineString)继承于曲线(Curve),且线串(LineString)由点(Point)聚焦而成,一对连续的点决定一个线段。

线(Line)与环线(LinearRing)同时继承于线串(LineString)。

线(Line)是只有两个点的线串(LineString)。

环线(LinearRing)是一种特殊的线串(LineString),如下图所示:

gdal ogr简单对象模型第2张

a,b,c,d四个LineString中,只有c是LineRing,因为只有c是简单(即不自交)且闭合的。

表面(Surface) 是二维的地理对象。

多面体表面(PolyhedralSurfaces)与多边形(Polygon)承继与它。
多面体表面(PolyhedralSurfaces)是由多个简单表面(Surface)构成的。如下图所示:

gdal ogr简单对象模型第3张

多边形(Polygon)是一个平面表面,有一个外部边界及0或多个内部边界,每一个内部边界叫做多边形的一个洞。如下图所示:

gdal ogr简单对象模型第4张

而三角形(Triangle)继承于多边形(Polygon),三角形是由3个不同的,且非共同线顶点构成的,没有内部边界。

多曲线(MultiCurve)是有多个Curve构成的集合。如下图所示:gdal ogr简单对象模型第5张

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的转换,以及投影的引用。

gdal ogr简单对象模型第6张

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);

免责声明:文章转载自《gdal ogr简单对象模型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python Django 前后端数据交互 之 HttpRequest、HttpResponse、render、redirectjs实现日期显示的一些操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

华为 HG526 破解实录(一)Cfg文件加解密工具

几天前,我去中国电信安装E169软件包,并发送了一个华为HG526无线路由猫和一个中兴xxx网络机顶盒(尚未开始制造麻烦)。当然,无线路由猫一如既往地被阉割了。搜索之后,我开始了我的快攻之旅。1.打开catdrop管理页面,使用telecomadmin和nE7jA%5m登录;2.将U盘插入猫。3.开放式管理=˃设备管理、备份配置。4.打开U盘,放下ctce8...

uniapp 实现动态切换全局主题色

要求:要在开发的应用程序中切换主题颜色,如果只需要一种主题颜色,但不需要切换,则可以使用uniappSCSS文件文档思想:预先在公共css中定义所需的主题颜色。这里只是一个定义两种颜色的参考文档的示例,可以从中获得想法。您可以使用css属性选择器动态设置数据xx以动态更改主题颜色。最初,您希望将一个变量直接混合到mixin中,以实现主题颜色的全局控制,忽略了...

vue.js(3)

vue中有两种类型的组件:默认组件[全局组件]和单文件组件5.1.1默认组件vue。组成部分varvm=newVue6.Vue自动化工具需要提前安装和准备一些组件开发工具,以便在了解常见组件后继续学习单文件组件。因此,我们需要首先在系统中构建vue CLI工具。官方网站:https://cli.vuejs.org/zh/VueCLI需要Node.js8.9或...

谷歌浏览器中预览海康大华等监控视频的思路与方法

本人近些年来对海康,大华,宇视等视频厂商做过一些视频对接的开发,但始终存在一个问题,在谷歌浏览器中如何进行视频监控的预览。本文将主要解决在谷歌,火狐等非IE浏览器中预览视频监控问题,给广大开发者提供一个思路方法。现在谷歌浏览器中现已不支持ActiveXObject的创建及调用,这是由于chrome浏览器在45版本后不再提供对npapi插件的支持。这种方式基本...

【译】颜色空间 REC.709 vs sRGB的

但转换函数(gamma)不同。让我们先定义颜色空间。颜色模型和颜色空间非常混乱。RGB颜色模型表示所有颜色都可以通过RGB的线性组合获得,而颜色空间是指能够解析数值的颜色模型。颜色空间的定义包含以下信息。颜色空间可以基于RGB模型检测颜色,因此使用三原色来表示所有颜色似乎是合理的。三原色的颜色坐标与sRGB相同。...

Linux下PHP的完全卸载

如果要完全卸载PHP,则不能直接使用yum remove命令。相反,您需要检查有多少rpm数据包可用,然后按依赖顺序逐个卸载它们。许多在线查询都是关于“rpm-qa|grepphp”的,它用于检查哪些rpm数据包可用,然后按依赖顺序卸载它们。按命令查看[root@localhosttest]#rpm qa|grepphpphp-cli-5.3.3-22.el...