河南网站备案所需资料,舟山建设网站,wordpress视频文件大小设置,dedecms的网站系统设计结论文章目录 整体架构QGis库官方文档编译生成的库 core地图和图层矢量图层(Vector layers)图层要素符号图层要素要素渲染(feature renderer)符号(symbol) 坐标映射数据源(data provider) Raster layers图层符号数据源坐标映射 core库其他有用类 guiQgsMapCanvasQgsMapToolQgsLayer… 文章目录 整体架构QGis库官方文档编译生成的库 core地图和图层矢量图层(Vector layers)图层要素符号图层要素要素渲染(feature renderer)符号(symbol) 坐标映射数据源(data provider) Raster layers图层符号数据源坐标映射 core库其他有用类 guiQgsMapCanvasQgsMapToolQgsLayerTreeView/QgsLayerTreeModelQgsMapCanvasItem其他有用的gui类 analysisQgsProcessingProviderQgsProcessingAlgorithmQgsProcessingRegistryQgsProcessingContextQgsProcessingFeedbackQgsProcessingAlgRunnerTask 整体架构
QGis库官方文档
下表是官方文档中的模块说明
库文档说明coreThe CORE library contains all basic GIS functionality核心库guiThe GUI library is build on top of the CORE library and adds reusable GUI widgets基于CORE库的增加了可复用的界面组件analysisThe ANALYSIS library is built on top of CORE library and provides high level tools for carrying out spatial analysis on vector and raster data集成了一些算法如缓冲区的生成3DThe 3D library is build on top of the CORE library and Qt 3D framework3D库plugin classesContains classes related to implementation of QGIS plugins组件库 如data provider, 一些算法都是采用插件机制实现的QgsQuickThe QgsQuick library is built on top of the CORE library and Qt Quick/QML framework基于CORE库可用于QMLserverThe SERVER library is built on top of the CORE library and adds map server components to QGIS服务端组件
其中3DQgsQuick和server库需要在编译之前进行配置配置项分别为WITH_3D WITH_QUICK和WITH_SERVER具体编译配置方法见开发环境搭建章节
编译生成的库
实际编译生成的库如下图
库说明appQGis Desktop程序库属于应用层并没有这个库的官方文档native不同平台之间特有的功能python用于使用python特性test单元测试库core核心库gui小组件库analysis算法库
其中core为基础库其他库都依赖core以下详细说明core、gui和analysis三个库
core
core库是qgis系统中的基础类包含所有基本的GIS功能而该库的很大一部分功能是用于处理矢量(vector)和栅格(raster)地理空间数据并在地图中显示这些类型的数据。在讲解vector和raster之前先介绍一下地图图层概念
地图和图层
地图由多个图层组成一个层绘制在另一个层的上层qgis支持多种类型的图层 Annotaion layer: 表示包含一组地理参考注释的地图层例如标记、直线、多边形或文本项。在qgis desktop中可以添加对应类型的annotaion Group layer: 由一组子层组成的地图层 Mesh Layer: 表示支持在结构化或非结构化网格上显示数据的网格层。多用于存储气候气象数据、水文数据、洋流数据等 Plugin Layer: Base class for plugin layers. 插件实现自定义图层 PointCloud Layer: 点云图层 Vector Tile Layer: 矢量瓦片图层 Raster Layer: 栅格图层 Vector Layer: 矢量图层 其中矢量图层和栅格图层是最常用的我们将重点研究这两个图层下图是矢量图层和栅格图层叠加显示效果图
矢量图层(Vector layers) 矢量数据通常用点、线、多边形等基本几何对象描述。矢量格式的地理空间数据通常从**矢量数据源(data provider)**读取常见的矢量数据源有.shp文件、数据库、内存、webservice等等如下图QGis添加矢量图层示例 矢量层本身由QgsVectorLayer类表示。矢量层包括很多模块如下图所示 下面重点讲解以下模块
symbology: 图层要素符号proj: 坐标映射providers: 数据源
图层要素符号
图层要素 矢量格式具有许多要素(features)矢量图层属性表每一行都代表一个要素 以jilin_city.shp为例在QGis中添加图层后打开属性表(Attribute Table)如下图所示 可以看到矢量属性表有9行代表9个要素这9个要素以符号的形式显示在地图上使用QGis的地图工具:Identify Feature工具查看属性如下图 可以看到要素(feature)的属性包含了idGeometry以及附件属性QgsFeature类用于表示要素。每个要素都有以下属性
id: feature idGeometry: 要素的地理信息表示要素是地图上点、线、多边形等。Attributes: 要素的附加属性例如一个城市要素可能具有total_area、population、elevation等属性。属性值可以是字符串、整数或浮点数。
要素渲染(feature renderer)
上边已经看到了jilin_city.shp中的要素(feature)渲染为一个点在QGis中提供了多种渲染方式如下图
而QgsFeatureRenderer类是这些渲染方式的父类见如下类图
以后的章节我们一一讲解各个渲染类
符号(symbol)
设置渲染器之后需要设置符号以单一符号渲染器为例可设置的符号类别如下图 QgsSymbol是符号的父类见下图的类图 QgsFillSymbol,QgsLineSymbol和QgsMarkerSymbol分别对应三种几何图形面、线和点的符号
坐标映射 在GIS软件中空间坐标依据坐标系的不同分为地理坐标和投影坐标。地理坐标是将地球比作一个类椭球体描述一个点在球面上的位置。但是在地图制图过程中往往需要在一个平面无论是纸质地图还是电子地图上展示地物这时需要解决地球球面与地图平面之间的矛盾因此需要对地球进行投影经过投影后的坐标称为投影坐标因此投影坐标是建立在地理坐标之上的。 为了解决地球椭球面和地图平面之间的矛盾需要将地球椭球面进行投影经过投影以后的坐标系称为投影坐标系。投影后的平面坐标系一定会出现变形我们只能在等距、等积和等角之间进行取舍。因此在不同应用场景下大量的投影坐标系应运而生。 各个国家或地区建立了能够基本符合自己国家或地区的地球椭球面或者根据精度需要及特定应用场景构建了不同的地球椭球面。根据构建的地球椭球面的参数不同地理坐标系也层出不穷。我国的地理坐标系经历了从北京1954坐标系BJZ54到西安1980坐标系XI’AN-80再到2000国家大地坐标系CGCS2000的发展过程。 由于地理坐标系和投影坐标系众多如果仅通过参数对这些坐标系进行整理与应用则过于麻烦因此需要通过标准化组织将这些坐标系归档整理。对于石油的探查和开采来讲坐标系的不同会显著影响开采精度因此欧洲石油调查组织European Petroleum Survey GroupEPSG整合了绝大多数常用的坐标系并为每个坐标系设置了一个编码例如“EPSG:4326”和“EPSG:3785”分别表示WGS 1984坐标系和WGS 1984 Web墨卡托投影坐标系。 QGis矢量图层会显示坐标系如下图
数据源(data provider)
类QgsVectorDataProvider代表Vector Layer的数据源类图如下 数据源包含的数据在QGis中以表格形式展示如下图
Raster layers 光栅格式的地理空间数据本质上是位图图像其中图像中的每个像素都对应于地球表面的特定部分。 栅格数据采用某种数据类型的数值阵列存储数据阵列中的每个数值称为一个像元Pixel。由于数据阵列本身不存在空间信息因此需要元数据进行界定。 栅格数据的元数据包括空间坐标系、数据类型等。 光栅图层本身由QgsRasterLayer类表示。每个光栅图层包括
symbology: 图层要素符号proj: 坐标映射Data provider: 数据源
图层符号
Raster Layer有多种渲染方式QgsRasterRenderer是Raster图层渲染的父类如下图 在QGis中设置不同渲染器
Multiband color 如果光栅数据具有多个波段则通常会将带组合以生成所需的颜色。例如一个波段可能表示颜色的红色分量另一个波段可以表示绿色分量还有一个波段则可能表示蓝色分量。Paletted/Unique values 如果光栅数据只有一个波段则像素值可以用作调色板的索引。调色板将每个像素值映射到特定的颜色。Singleband gray 如果光栅数据只有一个波段但没有提供调色板。像素值可以直接用作灰度值也就是说越大的数字越亮越小的数字越暗。或者像素值可以通过伪彩色算法来计算要显示的颜色。Singleband pseudocolor 多波段数据可以使用调色板绘制多波段光栅数据源或者将其绘制为灰度或伪彩色图像。Hillshade 多用于显示高程数据Contours 显示轮廓
数据源
类QgsRasterDataProvider代表Raster Layer的数据源类图如下
成员函数identify用于查看raster图层数据
QgsRasterIdentifyResult QgsRasterDataProvider::identify ( const QgsPointXY point,
QgsRaster::IdentifyFormat format,const QgsRectangle boundingBox QgsRectangle(),
int width 0,int height 0,int dpi 96 )后边章节会逐一介绍相关类和函数
坐标映射
坐标参考系Coordinate Reference SystemCRS界定了栅格数据所处的投影坐标系或地理坐标系。
core库其他有用类
类说明QgsProject代表当前项目,包含一系列属性如地图图层及其样式、布局、注释、画布等QgisQgis类提供全局常量供整个应用程序使用QgsGeometry代表几何特征是feature的空间表示QgsGeometry对象本质上是笛卡尔/平面几何。QgsCurve曲线类型的抽象基类QgsPoint点类型QgsSurface曲面类型QgsRectangle矩形QgsEllipse椭圆形QgsDistanceArea距离、面积测算类
gui
GUI库构建在CORE库之上并添加了可重用的GUI小部件
QgsMapCanvas 地图视图也称为地图画布用于显示地图控件QGIS主窗体的地图区域就是一个地图视图。QGIS支持多地图视图即可以在保留地图区域的基础上以面板的形式增加地图视图或3D地图视图。QGIS多个地图视图采用同一个图层控制面板控制因此一般用于显示同一个地图主题的不同四至范围数据或以3D形式展示数据。 QgsMapcanvas类是一个用于在画布上显示所有GIS数据类型的类。是QGraphicsView的子类 包括以下功能
当前显示的地图图层的列表。这可以使用layers()方法访问。获取地图使用的地图单位米、英尺、度等。可以通过调用mapUnits())方法来获取。显示范围即当前显示在画布中的地图区域。地图的范围将随着用户放大和缩小以及在地图上平移而改变。当前映射范围可以通过调用extent()方法来获得。当前地图工具可以使用setMapTool()设置使用mapTool()获取当前工具设置地图背景色使用canvasColor()获取坐标转换将地图坐标转换为窗口坐标
QgsMapTool
地图视图控制可以使用地图浏览工具栏
QgsMapTool是地图工具类基类用于和用户交互、操作地图、处理鼠标事件。类图如下
QgsLayerTreeView/QgsLayerTreeModel
QgsLayerTreeView类扩展了QTreeView提供图层管理功能并提供了一些附加功能。如下图
QgsMapCanvasItem
QgsMapCanvasItem是可以直接画在map canvas的item的基类Map Canvas Item显示优先级高于图层。类图如下
QgsVertexMarker: 这将绘制一个图标“X”、“”或小方框以地图上的给定点为中心。QgsRubberBand: 这将在地图上绘制任意几何类型。它在用户绘制时提供视觉反馈。QgsAnnotationItem: 在地图上添加标注的基类其子类如下图
其他有用的gui类
类说明QgsMapTip鼠标悬停时显示的提示信息QgsColorDialog颜色选择框QgsBlendModeComboBoxQgsBrushStyleComboBoxQgsColorRampComboBoxQgsPenCapStyleComboBoxQgsPenJoinStyleComboBox以上QComboBox用户界面小部件提示用户输入各种绘图选项QgsScaleComboBox选择缩放等级
analysis
analysis库建立在CORE库之上为对矢量和光栅数据进行空间分析提供了高级工具QGis中算法多集中在Processing Toolbox中如下图
QgsProcessingProvider
QgsProcessingProvider类通常提供一组相关算法类图如下
QgsProcessingAlgorithm
QgsProcessingAlgorithm类代表一种算法通常由QgsProcessingRegistry进行创建之后可以运行算法获取结果
QgsProcessingRegistry
QgsProcessingRegistry类用于注册算法处理的各个组件包括providers, algorithms,input,output and various parameters. 以clip算法为例使用QgsProcessingRegistry创建算法类
const QString id native:clip;
QVariantMap conf;
conf.insert(QStringLiteral(INPUT),layer-id());
conf.insert(QStringLiteral(OVERLAY),jilin_dist.shp);
QgsProcessingOutputLayerDefinition value( TEMPORARY_OUTPUT );
conf.insert(QStringLiteral(OUTPUT),value);
auto algorithm QgsApplication::processingRegistry()-createAlgorithmById(id,conf);QgsProcessingContext
QgsProcessingContext用于算法运行时
QgsProcessingFeedback
QgsProcessingFeedback用于接收算法运行时的反馈
QgsProcessingAlgRunnerTask
QgsProcessingAlgRunnerTask是在线程中运行算法的类类图如下