1.简介
QgsGeometry类是QGIS中的一个核心类,用于表示和处理地理要素的几何形状。它提供了许多方法和函数,用于创建、修改和分析地理要素的几何形状。 QgsGeometry类的主要作用如下:
- 表示和存储地理要素的几何形状:QgsGeometry可以表示点、线、面等不同类型的几何形状。它可以存储几何坐标信息,并提供了访问和修改几何形状的方法。
- 进行几何操作:QgsGeometry类提供了丰富的几何操作方法,如计算两个几何对象之间的距离、判断几何对象是否相交、计算几何对象的缓冲区等。这些操作可以用于空间分析和地理信息处理等应用中。
- 空间关系判断:QgsGeometry类提供了用于判断几何对象之间空间关系的方法,如判断一个点是否在一个多边形内部、判断两个几何对象是否相邻等。这些方法可以用于空间查询和空间过滤等应用中。
- 几何形状的转换和投影:QgsGeometry类提供了方法用于几何形状的转换和投影。可以将一个几何对象从一个坐标系统转换为另一个坐标系统,或者进行几何形状的缩放、旋转等操作。 总之,QgsGeometry类是QGIS中用于处理地理要素几何形状的重要类。它可以帮助开发者进行地理信息处理、空间分析和空间查询等功能的实现。
2.常用方法
//添加环
OperationResult addRing (const QVector< QgsPointXY > &ring)//返回面积
double area () const//以二维点的形式返回几何图形的内容
QgsPointXY asPoint () const//以多边形形式返回几何图形的内容
QgsPolygonXY asPolygon () const//以折线形式返回几何图形的内容
QgsPolylineXY asPolyline () const//返回几何体的边界框
QgsRectangle boundingBox () const//是否包含点
bool contains (const QgsPointXY *p) const//如果该几何图形完全包含另一个几何图形,返回true
bool contains (const QgsGeometry &geometry) const//是否相交
bool crosses (const QgsGeometry &geometry) const//返回此几何图形与另一个几何图形之间的最小距离
double distance (const QgsGeometry &geom) const//测试这个几何是否与另一个几何完全相等
bool equals (const QgsGeometry &geometry) const
一些静态方法
//从一个QgsPointXY对象创建一个新的几何体。
static QgsGeometry fromPointXY (const QgsPointXY &point) SIP_HOLDGIL//从一个QgsPolygon创建一个新的几何体
static QgsGeometry fromPolygonXY (const QgsPolygonXY &polygon)//从一个QgsPolyline创建一个新的几何体
static QgsGeometry fromPolyline (const QgsPolyline &polyline)//从一个QPointF 创建一个新的几何体
static QgsGeometry fromQPointF (QPointF point) SIP_HOLDGIL
3.代码示例
// 创建一个点QgsPointXY point(10.0, 20.0);QgsGeometry geometry = QgsGeometry::fromPointXY(point);// 获取几何形状类型QgsWkbTypes::Type geometryType = geometry.wkbType();qDebug() << "Geometry type:" << QgsWkbTypes::displayString(geometryType);// 获取点的坐标QgsPointXY point2 = geometry.asPoint();qDebug() << "Point coordinates:" << point2.x() << "," << point2.y();// 创建一个线QgsPoint startPoint(10.0, 20.0);QgsPoint endPoint(30.0, 40.0);QgsGeometry line = QgsGeometry::fromPolyline(QVector<QgsPoint>() << startPoint << endPoint);// 计算线的长度double length = line.length();qDebug() << "Line length:" << length;// 判断点是否在线上bool pointOnLine = line.contains(&QgsPointXY(20.0, 30.0));qDebug() << "Point on line:" << (pointOnLine ? "Yes" : "No");
4.相关参考
Qgis二次开发-QgsAnnotationItem(添加文字、图片标注(支持svg、png、jpg等常用图片格式))_Mr.codeee的博客-CSDN博客
Qgis二次开发-QgsMapTool地图交互工具详解_Mr.codeee的博客-CSDN博客