Qt+Qgis二次开发:地理实体抽象
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(是QgsField的集合操作类)抽象。属性值由QgsAttributes抽象。
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迭代器的矢量图层实现,每个矢量图层必须实现本类。
Qt+Qgis二次开发:地理实体抽象的更多相关文章
- Qt Qgis 二次开发——鼠标点击识别矢量要素
Qt Qgis 二次开发--鼠标点击识别矢量要素 介绍: 识别矢量要素需要用到QGis的一个工具类:QgsMapToolIdentifyFeature 一个QgsMapTool的子类的子类,官方文档描 ...
- Qt+QGIS二次开发:开发环境搭建(超级详细)
原文链接: 1.qgis二次开发环境搭建(超级详细) 2.QGIS开发教程(1)——QGIS开发准备工作 3.QGIS(2.18.15 源码)+Qt(5/5.9.3)+VS2015(X64)编译
- Qt+QGIS二次开发:自定义类实现查询矢量数据的属性字段值(图查属性)
在GIS领域,有两种重要的查询操作,图查属性和属性查图. 本文主要介绍如何在QGIS中通过从QgsMapToolIdentify中派生自定义类实现查询矢量数据的属性字段值(图查属性). 重点参考资料: ...
- Qt+QGis二次开发:矢量图层的显示样式
原文链接:QGis二次开发基础 -- 矢量图层的显示样式
- Qt+QGis二次开发:加载栅格图层和矢量图层
一.加载栅格图像 加载栅格图像的详细步骤在下面代码里: //添加栅格数据按钮槽函数 void MainWindow::addRasterlayers() { //步骤1:打开文件选择对话框 QStri ...
- Qt+QGis二次开发:打开S-57格式(*.000)电子海图数据,并设置多边形要素的显示风格
不过多的废话了,直接上源码: addChartlayers()方法时“打开海图”按钮的triggered()信号所绑定的槽函数. //添加海图数据小按钮槽函数 void MainWindow::add ...
- Qt+QGis二次开发:创建临时图层并添加要素
开发环境:Win10 + VS2010 + Qt 4.8.6 + QGis 2.14.4 其实本文实现的功能类似于QGis中“添加文本数据图层”的一个简化版,本文不会涉及到对话框的使用,不通过与用户互 ...
- Qt+QGIS二次开发:读取矢量元素及其属性
1 概述矢量图层内矢量元素组成,矢量图层的加载由驱动实现,驱动必须实现对矢量图层内元素的读写操作功能. 2 原理矢量元素包含几何和属性两部分组成.几何部分用于提供图形相关内容.属性部分提供与几何相关 ...
- Qt+QGIS二次开发:QGIS中使用QgsRubberBand类创建临时图形
1 概述 临时图形Rubberband主要用于高亮显示.交互绘制等情况下.2 原理 临时图形是在一个底色透明的图层(顶层)上,添加已有的几何元素或者创建一个几何元素(临时图形),可以设置相应的样式, ...
随机推荐
- 微信小程序支付最容易犯的坑notify_url(支付回调)
最近做了微信小程序支付,支付成功之后发现notify_url回调地址竟然没有访问. 检查了无数次代码,下单结果里面的回调地址看了又看,都没有错啊. 把回调地址复制出来到浏览器上面,外网也是可以访问的啊 ...
- slf4j日志的使用
slf4j(simple logging facade for Java)是Java的简单的日志门面,它不是具体的日志解决方案,它只服务于各种各样slf4j-logo的日志系统.这里的slf4j-lo ...
- 【Java】用注解实现分发器
在C/S中,客户端会向服务器发出各种请求,而服务器就要根据请求做出对应的响应.实际上就是客户机上执行某一个方法,将方法返回值,通过字节流的方式传输给服务器,服务器找到该请求对应的响应方法,并执行,将结 ...
- 微信小程序request同步请求
今天在搞微信小程序的时候顺手用了async,await死活不起作用,后来查了一下子,竟然不支持,那没办法就换了一种实现wx.request同步请求的方案 祭出promise来搞一搞,下面直接贴代码,简 ...
- CSS布局设置
一 盒模型 盒模型 在CSS中,"box model"这一术语是用来设计和布局时使用,然后在网页中基本上都会显示一些方方正正的盒子.我们称为这种盒子叫盒模型. 盒模型有两种:标准模 ...
- 使用CSS兄弟选择器完成复杂垂直边距(vertical margins)的设计
-------------------sibling选择器如何在完成复杂设计要求的同时,保持CSS可读 这是web前端开发过程中开始简单逐步变的复杂的例子之一:将一篇文章中的所有元素应用垂直边距(ve ...
- “一切都是消息”--iMSF(即时消息服务框架)之【发布-订阅】模式
MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately)消息,所以iMSF就是 immediately Message S ...
- JMeter 参数化之利用JDBCConnectionConfiguration从数据库读取数据并关联变量
参数化之利用DBC Connection Configuration从数据库读取数据并关联变量 by:授客 QQ:1033553122 1. 下载mysql jar包 下载mysql jar包 ...
- SQLServer Management Studio登录框中的“服务器名”填写
SQL Server Management Studio登录框中的“服务器名”填写 by:授客 QQ:1033553122 打开MSSQL Management Studio,如图,登录框中怎么填写? ...
- [Winform-WebBrowser]-在html页面中js调用winForm类方法
在winform项目中嵌入了网页,想通过html页面调用后台方法,如何实现呢?其实很简单,主要有三部: 1.在被调用方法类上加上[ComVisible(true)]标签,意思就是当前类可以com组件的 ...