当前位置:   article > 正文

QT(5.12)+Qgis(3.10) 距离、面积测量_qt distancearea

qt distancearea

功能: 实现距离、面积的测量。

Qgis留下了专门的用于计算距离、面积的接口:QgsDistanceArea类。
这个类内部包括了许多与测量相关的函数,比较关键的点在于ellipsoid椭球体以及坐标系Rcs的设置,需要和给定的地图相符。

距离测量示例

先建立测量工具(这么理解吧)的实例。
然后设置坐标系为EPSG:4326以及变换的内部参数。
然后设置椭球体。这里取的WGS-84的椭球体,但是由于输入WGS-84的名称未成功,直接输入了半长轴和半短轴进行构造。
然后调用测量两点的函数,并转换单位为米
然后将结果格式化,打印。

	QgsDistanceArea* Measurer = new QgsDistanceArea();
    Measurer->setSourceCrs(QgsCoordinateReferenceSystem(QString("EPSG:4326")),QgsProject::instance()->transformContext());
//    Measurer->setSourceCrs(QgsProject::instance()->crs(),QgsProject::instance()->transformContext());

	// WGS-84的半长轴和半短轴,注释掉为笛卡尔坐标系,解除注释为椭球坐标系
    qDebug() << Measurer->setEllipsoid(6378137,6356752.3142); 
    
	QgsPointXY p1 = QgsPointXY(8.909,50.126);
	QgsPointXY p2 = QgsPointXY(8.762,49.676);

    double distance = Measurer->convertLengthMeasurement(Measurer->measureLine(p1, p2),
                                                         QgsUnitTypes::DistanceMeters);
	qDebug() << QgsDistanceArea::formatDistance(distance,5, QgsUnitTypes::DistanceMeters);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

测量面积示例

基本结构相同,只是调用的函数和传入的内容不同,传入的是QVector<QgsPoints>

	QgsDistanceArea* Measurer = new QgsDistanceArea();
    Measurer->setSourceCrs(QgsCoordinateReferenceSystem(QString("EPSG:4326")),QgsProject::instance()->transformContext());
    qDebug() << Measurer->setEllipsoid(6378137,6356752.3142); // WGS-84的半长轴和半短轴,注释掉为笛卡尔坐标系,解除注释为椭球坐标系

    QgsPointXY p1 = QgsPointXY(9.383,50.820);
    QgsPointXY p2 = QgsPointXY(9.516,50.546);
    QgsPointXY p3 = QgsPointXY(9.247,50.385);
    QgsPointXY p4 = QgsPointXY(9.027,50.766);
    QVector<QgsPointXY> points;
    points << p1 << p2 << p3 << p4;
    // 对应的面积,qgis中算出,笛卡尔坐标系是1500756463.112 m^2
    // 对应的面积,qgis中算出,椭球坐标系是953237044.762 m^2
    double area = Measurer->convertAreaMeasurement( Measurer->measurePolygon(points), QgsUnitTypes::AreaUnit::AreaSquareMeters);

    qDebug() << QgsDistanceArea::formatArea(area, 5, QgsUnitTypes::AreaSquareMeters);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/95259
推荐阅读
相关标签
  

闽ICP备14008679号