Qgis开发11-地理实体抽象
来源:互联网 发布:mac怎么玩美服lol 编辑:程序博客网 时间:2024/05/19 18:46
Qgis地理实体抽象
sf2gis@163.com
2014年8月25日
2014年9月4日添加对属性的相关描述
1 概述
地理实体抽象是指点、线、面及其组合而成的,用于描述实际地物的数据结构。
其中包含几何实体和属性数据。
GIS中进行几何操作,以各种实体类为基础进行操作。
在OGC中,地理实体可以由WKT表示。在Qgis中使用GEOS和WKT两种方式表示,并在逐步将GEOS全部转化为WKT表示。在内存中,以WKB格式存储。
WKT:使用文本存储几何对象。
WKB:使用结构进行存储。
属性数据一般与几何数据分开存储,两者通过相应的id进行联系,属性数据在QGIS中使用QVector进行存储。
WKT与WKB参见:..\wkb与wkt.docx
参考:http://www.gaia-gis.it/gaia-sins/spatialite-cookbook/html/wkt-wkb.html
2 原理
点、线、面等几何类型,具有相似的功能,点组成线、线组成面、部分组成整体。不同的几何类型之间还要进行分析。在处理上,可以使用独立的类表示,但要为每种类构造各自操作。可以使用一个相同的操作类,以各种数据类型为参数,统一进行操作。
Qgis就使用了一个统一的操作类QgsGeometry。
3 方法
QGIS中的将所有的类型,以QgsVector<T>为模板,以QgsPoint为基础进行组织实现,QgsRectangle单独实现。
QgsVector<T>:向量抽象,实现通用功能,如向量-*/,旋转等操作。在QgsPoint.h中实现。
QgsPoint:点抽象,实现点的功能。如:距离,方位角,运算,测试与线的关系等。
QgsRectangle:矩形抽象,实现缩放,测试(包含等),合并,融合等。
/** polyline is represented as a vector of points */
typedef QVector<QgsPoint> QgsPolyline;
/** polygon: first item of the list is outer ring, innerrings (if any) start from second item */
typedef QVector<QgsPolyline> QgsPolygon;
/** a collection of QgsPoints that share a common collectionof attributes */
typedef QVector<QgsPoint> QgsMultiPoint;
/** a collection of QgsPolylines that share a commoncollection of attributes */
typedef QVector<QgsPolyline>QgsMultiPolyline;
/** a collection of QgsPolygons that share a commoncollection of attributes */
typedef QVector<QgsPolygon>QgsMultiPolygon;
QgsGeometry:所有实体的抽象,用于将上述所有实现进行几何操作的统一平台。并与GEOS库交互,进行几何分析功能。
4 带有属性的地理实体抽象QgsFeature
QgsFeature用于抽象一个带有属性的地理实体,由其联系几何和属性两部分。几何部分由QgsGeometry抽象。属性部分由QgsFields和QgsAttributes抽象。
QgsField:属性名抽象,可以操作属性名的各个成员。
QgsFields:是QgsField的集合操作类,。
QgsFeatureIds:QgsFeatureId的集合。
QgsFeatureId:用于唯一标准一个QgsFeature的id。当前是64位Int。
QgsFeatureMap: typedef QMap<QgsFeatureId,QgsFeature> QgsFeatureMap;
QgsGeometryMap: typedef QMap<QgsFeatureId,QgsGeometry> QgsGeometryMap;
QgsAttributes:QVector<QVarient>,表示属性的值。
QgsAbstractFeatureIterator: QgsFeature迭代器的虚基类,由DataProvider驱动实现。用于进行元素获取。
QgsFeatureIterator:QgsFeature迭代器的包装类,用于操作QgsAbstractFeatureIterator。
QgsAbstractFeatureSource:由驱动实现,提供元素获取。
QgsAbstractFeatureFromSource<T>:抽象模板,继承QgsAbstractFeatureIterator,操作QgsAbstractFeatureSource。用于获取驱动(T),并进行读写开关操作(QgsAbstractFeatureIterator)。
QgsVectorLayerFeatureIterator:QgsFeature迭代器的矢量图层实现,每个矢量图层必须实现本类。
5 相关类
5.1 QgsGeometry
参见:Qgis相关类参考.docx
- Qgis开发11-地理实体抽象
- Qgis开发1:总则
- qgis 插件开发
- Qgis开发17-日志
- QGIS python开发手册
- Qgis开发2-工程组织
- Qgis开发8-显示GUI
- Qgis开发10-缓冲区分析
- python开发qgis插件之一
- Android开发基础 -- 实体类 和 抽象类 详解
- qgis
- 实体对象的抽象
- 在QGIS下开发python插件
- Qgis开发4-地图交互工具
- Qgis开发6-临时图形-QgsRubberBand
- Qgis开发9-显示当前鼠标坐标
- Qgis开发12-读取矢量元素
- Qgis开发13-矢量空间分析
- Leetcode 细节实现 Set Matrix Zeroes
- zoj 3017 - Extreme Gameplay
- 那么其实就是一种倒退
- 那一定是事半功倍的
- 一点站长论坛发外链
- Qgis开发11-地理实体抽象
- 地址的一些思考
- getRequestDispatcher
- 让你的资源成为你的资本
- 我们做SEO的就是要讲究原则
- 02 Android基础理论
- 出奇是与你博客正题相关的
- stackoverflow:Why are structures typedef'ed to their own names? [duplicate]
- const char*, char const*, char*const的区别