Qgis(3.10)二次开发-库函数解读

这篇文章主要是用来记录一些在Qgis二次开发过程中,对于3.10版本的一些库函数,帮助文件的理解,方便自己梳理结构吧。

1 QgsLayerTreeModel class

帮助文件中对这个类的描述:

继承自 QAbstractItemModel这个QT中所有model的基类,并进行拓展。
The model listens to the changes in the layer tree and signals the changes as appropriate, so that any view that uses the model is updated accordingly.
Behavior of the model can be customized with flags. For example, whether to show legend or whether to allow changes to the layer tree.

我的理解:
这个模型监听图层树的变化并发出适当的信号signal,让所有和这个模型有关的视图都产生相应的更新。(属于QT Model-View结构里的Model,主要负责数据部分)
模型的行为可以通过Flags进行定制。


2 MapCanvas类下的与点相关的函数

为了显示地图上的坐标点,需要从Canva上获取到当前的坐标,看了下大佬们的文章,似乎QgsMapCanvas本身留有这样返回坐标的接口,但是为了更好地理解,打算捋一下这个类下面和点操作有关的函数。
主要包括:

  1. 用于发送信号的
  2. 普通的成员函数
signal:
// Emits current mouse position. 
void 	xyCoordinates (const QgsPointXY &p); 
// 这是个发送信号的函数,如果需要实现上述功能,可以通过connect将该函数和要更新的地方进行绑定实现

public Member Function:
// Gets map center, in geographical coordinates
QgsPointXY center() const; 
// set the center of the map canvas, in geographical coordinates. 
void setCenter( const QgsPointXY &center); 

// return last position of mouse cursor
QPoint QgsMapCanvas::mouseLastXY(); 
// 通过阅读源码,在画布的鼠标动作里,有根据不同动作返回的函数,
// 这里估计这个函数的用法,主要可以用于拖拽,画直线、按比例放大等需要两点操作的时候,
// 可以直接获取上一次点击的坐标,而不需要二次使用者自己去另外做上次坐标的存储了。


3 测量距离-面积的类qgsDistanceArea

官方介绍翻译与总结

  1. 一个通用的距离\面积计算器,可以用于椭球上的计算
  2. 可以用于QgsGeometry,也可以用于lists of points
  3. ellipsoid()决定了计算的算法,默认为基于笛卡尔坐标系
  4. setSourceCrs()必须在使用前设定好,设置参考坐标系
  5. 通常返回的单位是,但如果ellipsoid没有设定,则不一定是

单位相关

面积

  • QgsUnitTypes::AreaUnit–> 枚举类型enumerate
  • QgsDistanceArea::areaUnits() const:返回当前项目(project)计算返回的数值的单位

距离

  • QgsUnitTypes::DistanceUnit–> 枚举类型enumerate
  • QgsDistanceArea::lengthUnits() const:返回当前项目(project)计算返回的数值的单位

单位转换

  • double convertAreaMeasurement(double area, QgsUnitTypes::AreaUnit toUnits) const
    把算出的面积转换成给定单位。
  • double convertLengthMeasurement(double length, QgsUnitTypes::DistanceUnit toUnits) const
    把算出的长度转换成给定单位。
  • QgsUnitTypes::DistanceUnit QgsDistanceArea::lengthUnits() const
    返回当前object计算的长度的单位

计算的函数

方位角相关

double bearing(const QgsPointXY & p1,const QgsPointXY &p2,) const
计算bearing: 方位,以某点的正北为基准的描述。单位为弧度

QgsPointXY computeSpheroidProject(const QgsPointXY& p1, double distance = 1, double azimuth =M_PI_2)
给定点、方位角、距离,确定另一个点。
基于Vincenty’s formula

计算距离或面积

  • double measureArea(const QgsGeometry & geometry) const
    计算给定几何图形QgsGeometry的面积,对于几何集合,无表面的几何图形会被忽略。
  • double measureLength( const QgsGeometry &geometry) const
    测量几何图形QgsGeometry的长度,对于几何集合,无曲线的几何会被忽略。
  • double measureLine( const QVector<QgsPointXY> & points) const
    测量给定多点线段的长度
  • double measureLine( const QgsPointXY &p1, const QgsPointXY & p2) const
    测量给定两点的距离。p1开始点,p2结束点
  • double measureLineProjected( const QgsPointXY &p1, double distance =1, double azimuth = M_PI_2, QgsPointXY* projectedPoint = nullptr) const
    如果sourceCrs()geographic,测量给定点到以给定点、方位角、距离确定的点的距离。
    否则,调用computeSpheroidProject()
  • double measurePerimeter( const QgsGeometry& geometry) const
    测量多边形的周长,对于几何几何,非多边形的几何会被忽略。
  • double measurePolygon( const QVector<QgsPointXY> &points) const
    测量给定点描述的多边形的面积

椭球基准ellipsoid及Crs

  • bool setEllipsoid( const QString & ellipsoid)
    通过首字母缩略词设置椭球。
    常用的椭球的首字母,可以用QgsEllipsoidUtils::acronyms()获得。
  • bool setEllipsoid(double semiMajor, double semiMinor)
    通过半长轴半短轴设定椭球
  • void setSourceCrs( const QgsCoordinateReferenceSystem & crs, const QgsCoordinateTransformContext& context)
    设置参考坐标系
  • QgsCoordinateReferenceSystem courceCrs() const
    返回正在使用的参考坐标系
  • QString ellipsoid() const
    返回椭球基准的首字母缩略词(就是单词的首字母拼在一起那种)
  • QgsCoordinateReferenceSystem ellipsoidCrs() const
    返回椭球空间参考坐标Crs,(一般来自于现在看的图层)
  • double ellipsoidInverseFlattening() const
    返回椭球的反扁率(Inverse Flattening)
    i n v f = a a − b invf = \frac {a}{a-b} invf=aba
  • double ellipsoidSemiMajor() cosnt
    返回椭球的半长轴(Semi Major Axis)
  • double ellipsoidSemiMinor() const
    返回椭球的半短轴(Semi Minor Axis)
  • bool willUseEllipsoid() const
    返回计算是否使用椭球

面积\距离输出格式化

  • QString formatArea(double area, int decimals, QgsUnitTypes::AreaUnit unit, bool KeepBaseUnit = false)
    将给定的面积易于阅读的字符串(friendly string)输出
  • QString formatDistace(double distance, int decimals, QgsUnitTypes::DistanceUnit unit, bool keepBaseUnit = false)
    同上,但对象是距离

其他功能

  • QVector<QVector<QgsPointXY>> geodesicLine(const QgsPointXY & p1, const QgsPointXY & p2, double interval, bool breakLine = false) false
    插点功能:将给点的两个点p1,p2,,用在椭球上的最短路径相连,将路径中,以最大间距为参数interval进行补点。breakLine参数是用于在路径穿过了本初子午线(antimeridian),精度正负号翻转的情况时,是否将线段分为两段。

  • double latitudeGeodesicCrossesAntimeridian( const QgsPointXY & p1, const QgsPointXY & p2, double & fractionAlongLine) const
    计算穿过本初子午线时的纬度把给定两点连线穿过本初子午线的纬度计算出来。

  • QgsGeometry splitGeometryAtAntimeridian (const QgsGeometry & geometry) const
    把给定几何以本初子午线为分割线进行分割,返回的是个多部件(multi-part)的几何。



4 坐标系部分

4.1 QgsCoordinateReferenceSystem(即程序中常见的Crs)

包括
包括
CRS
GCS
PCS

定义Crs的方法
QgsCoordinateReferenceSystem::QgsCoordinateReferenceSystem ( const QString & definition )

Constructs a CRS object from a string definition using createFromString()
It supports the following formats:

  • “EPSG:” - handled with createFromOgcWms()
  • “POSTGIS:” - handled with createFromSrid()
  • “INTERNAL:” - handled with createFromSrsId()
  • “PROJ4:” - handled with createFromProj4()
  • “WKT:” - handled with createFromWkt()
    If no prefix is specified, WKT definition is assumed.

QgsCoordinateReferenceSystem::QgsCoordinateReferenceSystem ( long id, CrsType type = PostgisCrsId )

Constructor a CRS object using a PostGIS SRID, an EPSG code or an internal QGIS CRS ID.

Note
We encourage you to use EPSG code, WKT or Proj4 to describe CRS’s in your code wherever possible. Internal QGIS CRS IDs are not guaranteed to be permanent / involatile.
推荐使用方法1,因为qgis的id可能发生改变
Parameters
id The ID valid for the chosen CRS ID type
type One of the types described in CrsType

4.2 QgsCoordinateTransformContext

描述的是从坐标系变换间的关系
可以参考其成员函数进行理解

bool QgsCoordinateTransformContext::addCoordinateOperation	(	const QgsCoordinateReferenceSystem & 	sourceCrs,
															const QgsCoordinateReferenceSystem & 	destinationCrs,
															const QString & 	coordinateOperationProjString )		

该类内存储了多种从源坐标系目标坐标系的变换需要的内容。

  • 1
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值