博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gdal - ogr简单对象模型
阅读量:2503 次
发布时间:2019-05-11

本文共 2239 字,大约阅读时间需要 7 分钟。

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 (): geometry类(等) 定义了所有矢量数据类(如下图),一些空间分析功能,wkt,wkb的转换,以及投影的引用。

类用来转换将wkb/wkt与geometry的对象互相转换。

OGRGeometry类中有一个类的对象,用来定义投影的相关信息。

():)支持地理坐标系统,投影坐标系统。但纵坐标系统,地心坐标系统和复合(水平+垂直)坐标系统不支持。

坐标系统间的转换在类中调用了proj.4的东西。

  

的成员文档:

 

OGRFeature():OGRFeature类里描述了OGRGeometry的空间信息,属性信息,fid,以及类的标识。

类里描述了一个图层的字段信息,包括字段名称,字段类型,字段属性。

fid是空间数据的主键,定义成长整型,gml内是string型,oracle里的rowid是大于4bytes的.

).返回空间数据的类型(OGRwkbGeometryType),wkbUnknown的话则任意类型都可以。

 

OGRLayer ():表示数据源中的一层空间数据,可以认为OGRLayer是从底层数据源读取数据的一个中继。

OGRLayer::GetNextFeature()可以随机或顺序读取 .

 

一个OGRLayer和一个OGRFeature是一一对应的。

 

(): 一个对象表示一个文件或数据库,含有多个OGRLayer对象。

 

 

 

(): 翻译各种矢量数据类型,是打开各种数据对象的驱动。

所有的数据驱动在 类中管理。

 

-----------------------------------------------------------

读取一个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);

转载地址:http://ealgb.baihongyu.com/

你可能感兴趣的文章
学习笔记_vnpy实战培训day06
查看>>
回测引擎代码分析流程图
查看>>
Excel 如何制作时间轴
查看>>
股票网格交易策略
查看>>
matplotlib绘图跳过时间段的处理方案
查看>>
vnpy学习_04回测评价指标的缺陷
查看>>
ubuntu终端一次多条命令方法和区别
查看>>
读书笔记_量化交易如何建立自己的算法交易01
查看>>
设计模式04_抽象工厂
查看>>
设计模式05_单例
查看>>
设计模式06_原型
查看>>
设计模式07_建造者
查看>>
设计模式08_适配器
查看>>
设计模式09_代理模式
查看>>
设计模式10_桥接
查看>>
满屏的指标?删了吧,手把手教你裸 K 交易!
查看>>
不吹不黑 | 聊聊为什么要用99%精度的数据回测
查看>>
量化策略回测TRIXKDJ
查看>>
量化策略回测唐安奇通道
查看>>
量化策略回测DualThrust
查看>>