赞
踩
功能: 实现距离、面积的测量。
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);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。