OGRLinearRing class <ogrsf_frmts.h>
OGRLinearRing
是 OGR 库中的一个类,它是一个线性环(Linear Ring)的几何对象,用于表示封闭的线性路径。线性环是由一系列连续的线段组成,首尾相连形成闭合的环。线性环常用于构建多边形几何体,多边形的边界由线性环构成
Public Functions
OGRLinearRing()
构造 函数
OGRLinearRing(const OGRLinearRing &other**)**
复制构造函数
OGRLinearRing(OGRLinearRing*****)
构造 函数
OGRLinearRing &operator=(const OGRLinearRing &other**)**
赋值运算符
Virtual const char *getGeometryName() const override
获取几何类型的 WKT 名称
返回: 用于此几何类型的名称,采用众所周知的文本格式。返回的指针指向静态内部字符串,不应修改或释放
clone
virtual OGRLinearRing *clone() const override
创建此对象的副本
返回: 具有与原始对象相同的几何和空间参考系统的新对象实例
isPointInRing
OGRBoolean isPointInRing(const OGRPoint *pt, int bTestEnvelope = TRUE) const
返回点是否在环内
参数:
-
点 -- 点
-
bTestEnvelope -- 如果必须先检查环包络内是否存在该点,则设置为 TRUE。
返回: 对或错
// 创建一个 OGRLinearRing 对象,表示一个线性环
OGRLinearRing ring;
ring.addPoint(0, 0);
ring.addPoint(0, 1);
ring.addPoint(1, 1);
ring.addPoint(1, 0);
ring.addPoint(0, 0);
// 创建一个 OGRPoint 对象,表示要检测的点的坐标 (0.5, 0.5)
OGRPoint point(0.5, 0.5);
// 判断点是否在线性环的内部
OGRBoolean isInRing = ring.isPointInRing(&point);
if (isInRing) {
printf("Point is inside the ring.\n");
} else {
printf("Point is not inside the ring.\n");
}
isPointOnRingBoundary
OGRBoolean isPointOnRingBoundary(const OGRPoint *pt, int bTestEnvelope = TRUE) const
返回点是否在环边界上
参数:
-
点 -- 点
-
bTestEnvelope -- 如果必须先检查环包络内是否存在该点,则设置为 TRUE。
返回: 对或错
// 创建一个 OGRLinearRing 对象,表示一个线性环
OGRLinearRing ring;
ring.addPoint(0, 0);
ring.addPoint(0, 1);
ring.addPoint(1, 1);
ring.addPoint(1, 0);
ring.addPoint(0, 0);
// 创建一个 OGRPoint 对象,表示要检测的点的坐标 (0.5, 0.5)
OGRPoint point(0.5, 0.5);
// 判断点是否在线性环的边界上
OGRBoolean isOnBoundary = ring.isPointOnRingBoundary(&point);
if (isOnBoundary) {
printf("Point is on the ring boundary.\n");
} else {
printf("Point is not on the ring boundary.\n");
}
transform
virtual OGRErr transform(OGRCoordinateTransformation *poCT) override
对几何图形应用任意坐标变换
此方法会将几何图形的坐标从其当前空间参考系统转换为新的目标空间参考系统。通常这意味着重新投影矢量,但它可能包括基准面偏移和单位变化
参数:
poCT -- 要应用的转换。
返回: OGRERR_NONE成功或错误代码
// 创建一个 OGRPoint 对象,表示原始点的坐标 (30, 40)
OGRPoint originalPoint(30, 40);
// 创建源和目标的空间参考系统
OGRSpatialReference sourceSRS;
OGRSpatialReference targetSRS;
sourceSRS.SetWellKnownGeogCS("WGS84"); // 使用 WGS84 作为源 CRS
targetSRS.SetWellKnownGeogCS("EPSG:4326"); // 使用 EPSG:4326 作为目标 CRS
// 创建坐标转换对象
OGRCoordinateTransformation *transformer = OGRCreateCoordinateTransformation(&sourceSRS, &targetSRS);
if (transformer) {
// 对原始点进行坐标转换
OGRErr err = originalPoint.transform(transformer);
if (err == OGRERR_NONE) {
// 打印转换后的点坐标
double x = originalPoint.getX();
double y = originalPoint.getY();
printf("Transformed Point: (%f, %f)\n", x, y);
} else {
printf("Error during coordinate transformation!\n");
}
// 释放坐标转换对象
OCTDestroyCoordinateTransformation(transformer);
} else {
printf("Failed to create coordinate transformation!\n");
}