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

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

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);

测量面积示例

基本结构相同,只是调用的函数和传入的内容不同,传入的是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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值