区块链技术博客
www.b2bchain.cn

QGIS实用技巧(一):基础功能求职学习资料

本文介绍了QGIS实用技巧(一):基础功能求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

  • 前言
  • GPS坐标与控件坐标相互转换
  • 方位角计算
  • GPS距离计算

前言

GIS 里面一般有许多基础功能,本章总结一些常用的。然后在 QGIS 里面是如何用代码实现。

GPS坐标与控件坐标相互转换

QGIS 里面的 2D 画布控件类是 QgsMapCanvas。一般使用时,基于此类派生做相应的实现即可。

而有时需要将用到将 GPS 坐标与控件坐标进行相互转换。

假设派生类是 CMapCanvas (class CMapCanvas : public QgsMapCanvas)

  • GPS坐标转控件坐标

代码如下:

QPointF CMapCanvas::mapToPixel(const QPointF &p) {     return getCoordinateTransform()->transform(p.x(), p.y()).toQPointF(); }
  • 控件坐标转GPS坐标

代码如下:

QPointF CMapCanvas::pixelToMap(const QPointF &p) {     return getCoordinateTransform()->toMapPoint(p.x(), p.y()).toQPointF(); }

方位角计算

方位角是正北方是 0 度,顺时针开始计算,范围是 0-360。

qDegreesToRadiansqRadiansToDegrees 函数定义在 qmath.h 头文件里面(下同)。

qreal Calculate::getAzimuth(const QPointF& startPnt, const QPointF& endPnt) {     auto lat = log( tan( qDegreesToRadians(endPnt.y()) / 2 + M_PI / 4 ) / tan( qDegreesToRadians(startPnt.y()) / 2 + M_PI / 4) );     auto lon = ( qDegreesToRadians(endPnt.x()) - qDegreesToRadians(startPnt.x()) );      double a = qRadiansToDegrees(atan2( lon , lat ));     return (a < 0) ? 360+a : a; }

有了两个点之间的方位角后,三个点之间的夹角就是基于其中一点(原点)的两个方位角之差的绝对值了,通过与180度对比来判断大弧还是小弧角度,然后要大弧还是小弧角度则由大家自己去处理了。

GPS距离计算

有时候需要计算两个经纬度直接的距离,比如测距什么的。代码如下(返回值的单位是KM):

double getDistanceKm(const QPointF &a, const QPointF &b)

  • 前言
  • GPS坐标与控件坐标相互转换
  • 方位角计算
  • GPS距离计算

前言

GIS 里面一般有许多基础功能,本章总结一些常用的。然后在 QGIS 里面是如何用代码实现。

GPS坐标与控件坐标相互转换

QGIS 里面的 2D 画布控件类是 QgsMapCanvas。一般使用时,基于此类派生做相应的实现即可。

而有时需要将用到将 GPS 坐标与控件坐标进行相互转换。

假设派生类是 CMapCanvas (class CMapCanvas : public QgsMapCanvas)

  • GPS坐标转控件坐标

代码如下:

QPointF CMapCanvas::mapToPixel(const QPointF &p) {     return getCoordinateTransform()->transform(p.x(), p.y()).toQPointF(); }
  • 控件坐标转GPS坐标

代码如下:

QPointF CMapCanvas::pixelToMap(const QPointF &p) {     return getCoordinateTransform()->toMapPoint(p.x(), p.y()).toQPointF(); }

方位角计算

方位角是正北方是 0 度,顺时针开始计算,范围是 0-360。

qDegreesToRadiansqRadiansToDegrees 函数定义在 qmath.h 头文件里面(下同)。

qreal Calculate::getAzimuth(const QPointF& startPnt, const QPointF& endPnt) {     auto lat = log( tan( qDegreesToRadians(endPnt.y()) / 2 + M_PI / 4 ) / tan( qDegreesToRadians(startPnt.y()) / 2 + M_PI / 4) );     auto lon = ( qDegreesToRadians(endPnt.x()) - qDegreesToRadians(startPnt.x()) );      double a = qRadiansToDegrees(atan2( lon , lat ));     return (a < 0) ? 360+a : a; }

有了两个点之间的方位角后,三个点之间的夹角就是基于其中一点(原点)的两个方位角之差的绝对值了,通过与180度对比来判断大弧还是小弧角度,然后要大弧还是小弧角度则由大家自己去处理了。

GPS距离计算

有时候需要计算两个经纬度直接的距离,比如测距什么的。代码如下(返回值的单位是KM):

double getDistanceKm(const QPointF &a, const QPointF &b)

  • 前言
  • GPS坐标与控件坐标相互转换
  • 方位角计算
  • GPS距离计算

前言

GIS 里面一般有许多基础功能,本章总结一些常用的。然后在 QGIS 里面是如何用代码实现。

GPS坐标与控件坐标相互转换

QGIS 里面的 2D 画布控件类是 QgsMapCanvas。一般使用时,基于此类派生做相应的实现即可。

而有时需要将用到将 GPS 坐标与控件坐标进行相互转换。

假设派生类是 CMapCanvas (class CMapCanvas : public QgsMapCanvas)

  • GPS坐标转控件坐标

代码如下:

QPointF CMapCanvas::mapToPixel(const QPointF &p) {     return getCoordinateTransform()->transform(p.x(), p.y()).toQPointF(); }
  • 控件坐标转GPS坐标

代码如下:

QPointF CMapCanvas::pixelToMap(const QPointF &p) {     return getCoordinateTransform()->toMapPoint(p.x(), p.y()).toQPointF(); }

方位角计算

方位角是正北方是 0 度,顺时针开始计算,范围是 0-360。

qDegreesToRadiansqRadiansToDegrees 函数定义在 qmath.h 头文件里面(下同)。

qreal Calculate::getAzimuth(const QPointF& startPnt, const QPointF& endPnt) {     auto lat = log( tan( qDegreesToRadians(endPnt.y()) / 2 + M_PI / 4 ) / tan( qDegreesToRadians(startPnt.y()) / 2 + M_PI / 4) );     auto lon = ( qDegreesToRadians(endPnt.x()) - qDegreesToRadians(startPnt.x()) );      double a = qRadiansToDegrees(atan2( lon , lat ));     return (a < 0) ? 360+a : a; }

有了两个点之间的方位角后,三个点之间的夹角就是基于其中一点(原点)的两个方位角之差的绝对值了,通过与180度对比来判断大弧还是小弧角度,然后要大弧还是小弧角度则由大家自己去处理了。

GPS距离计算

有时候需要计算两个经纬度直接的距离,比如测距什么的。代码如下(返回值的单位是KM):

double getDistanceKm(const QPointF &a, const QPointF &b)

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » QGIS实用技巧(一):基础功能求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们