assignSpatialReference
virtual void assignSpatialReference(const OGRSpatialReference *poSR)
为此对象分配空间参考
参数:
poSR - 应用新的空间参考系统
getSpatialReference
inline const OGRSpatialReference *getSpatialReference(void) const
返回对象的空间参考系统
返回: 对空间参考对象的引用。该对象可以与许多几何对象共享,不应修改
// 创建一个点对象
OGRPoint point(1.0, 2.0);
// 创建一个空间参考对象
OGRSpatialReference* spatialRef = new OGRSpatialReference();
spatialRef->importFromEPSG(4326); // 设置空间参考为 WGS84
// 将点对象与空间参考对象关联
point.assignSpatialReference(spatialRef);
// 获取点对象的空间参考
const OGRSpatialReference* assignedSR = point.getSpatialReference();
// 输出空间参考的名称
char* srName = nullptr;
assignedSR->exportToWkt(&srName);
printf("Assigned spatial reference: %s\n", srName);
// 释放内存
CPLFree(srName);
delete spatialRef;
transform
virtual OGRErr transform(OGRCoordinateTransformation *poCT) = 0
对几何图形应用任意坐标变换
参数:
poCT -- 要应用的转换。
返回: OGRERR_NONE成功或错误代码
transformTo
OGRErr transformTo(const OGRSpatialReference *poSR)
将几何转换为新的空间参考系统 此方法会将几何图形的坐标从其当前空间参考系统转换为新的目标空间参考系统。通常这意味着重新投影矢量,但它可能包括基准面偏移和单位变化
参数:
poSR -- 要变换到的空间参考系统。
返回: OGRERR_NONE成功或错误代码
// 创建一个点对象
OGRPoint point(1.0, 2.0);
// 创建一个源空间参考对象
OGRSpatialReference* srcSpatialRef = new OGRSpatialReference();
srcSpatialRef->importFromEPSG(4326); // 设置源空间参考为 WGS84
// 将点对象与空间参考对象关联
point.assignSpatialReference(srcSpatialRef);
// 创建一个目标空间参考对象
OGRSpatialReference* targetSpatialRef = new OGRSpatialReference();
targetSpatialRef->importFromEPSG(3857); // 设置目标空间参考为 Web Mercator
// 将点对象从源空间参考转换到目标空间参考
OGRErr result = point.transformTo(targetSpatialRef);
segmentize
virtual void segmentize(double dfMaxLength)
修改几何图形,使其没有超过给定距离的线段。 此方法会根据需要修改几何以添加中间顶点,以便 2 个连续顶点之间的最大长度小于 dfMaxLength
参数:
dfMaxLength -- 分割后 2 点之间的最大距离
// 创建一个线段对象
OGRLineString line;
line.addPoint(0, 0);
line.addPoint(1, 1);
// 对线段对象进行分段处理,最大分段长度为 0.1
line.segmentize(0.1);
Equals
virtual OGRBoolean Equals(const OGRGeometry*) const = 0
返回: 如果等效,则为 TRUE,否则为 FALSE
Intersects
virtual OGRBoolean Intersects(const OGRGeometry*) const
判断几何图形是否相交
参数:
poOtherGeom -- 另一个要测试的几何图形。
返回: 如果几何相交,则为 TRUE,否则为 FALSE
// 创建两个几何对象
OGRPoint point(0, 0);
OGRPolygon polygon;
OGRLinearRing ring;
ring.addPoint(1, 1);
ring.addPoint(1, 2);
ring.addPoint(2, 2);
ring.addPoint(2, 1);
ring.addPoint(1, 1);
polygon.addRing(&ring);
// 判断两个几何对象是否相交
OGRBoolean intersects = point.Intersects(&polygon);
if (intersects) {
printf("几何对象相交\n");
} else {
printf("几何对象不相交\n");
}
Disjoint
virtual OGRBoolean Disjoint(const OGRGeometry*) const
测试脱节性 测试此几何图形和传递到方法中的其他几何图形是否不相交
参数:
poOtherGeom -- 要与此几何进行比较的几何图形。
返回: 如果它们是不相交的,则为 TRUE,否则为 FALSE
// 创建两个几何对象
OGRPoint point1(0, 0);
OGRPoint point2(1, 1);
// 判断两个几何对象是否不相交
OGRBoolean disjoint = point1.Disjoint(&point2);
if (disjoint) {
printf("几何对象不相交\n");
} else {
printf("几何对象相交\n");
}
Touches
virtual OGRBoolean Touches(const OGRGeometry*) const
测试触摸 测试此几何图形和传递到方法中的另一个几何图形是否接触
参数:
poOtherGeom -- 要与此几何进行比较的几何图形。
返回: 如果它们在接触,则为 TRUE,否则为 FALSE
// 创建两个几何对象
OGRPoint point(0, 0);
OGRLineString linestring;
linestring.addPoint(0, 0);
linestring.addPoint(1, 1);
// 判断几何对象是否相接触
OGRBoolean touches = point.Touches(&linestring);
Crosses
virtual OGRBoolean Crosses(const OGRGeometry*) const
测试交叉 测试此几何图形和传递到方法中的另一个几何图形是否交叉
参数:
poOtherGeom -- 要与此几何进行比较的几何图形。
返回: 如果它们交叉,则为 TRUE,否则为 FALSE
// 创建两个几何对象
OGRLineString linestring1;
linestring1.addPoint(0, 0);
linestring1.addPoint(2, 2);
OGRLineString linestring2;
linestring2.addPoint(1, 0);
linestring2.addPoint(1, 2);
// 判断几何对象是否相交交叉
OGRBoolean crosses = linestring1.Crosses(&linestring2);
Within
virtual OGRBoolean Within(const OGRGeometry*) const
测试遏制性 测试实际几何对象是否在传递的几何图形中
参数:
poOtherGeom -- 要与此几何进行比较的几何图形。
返回: 如果 poOtherGeom 在此几何图形中,则为 TRUE,否则为 FALSE
// 创建两个几何对象
OGRPoint point(2, 2);
OGRPolygon polygon;
polygon.addRing(point.getX(), point.getY() - 1, point.getX() + 1, point.getY(), point.getX(), point.getY() + 1, point.getX() - 1, point.getY());
// 判断几何对象是否在另一个几何对象内部
OGRBoolean within = point.Within(&polygon);
Contains
virtual OGRBoolean Contains(const OGRGeometry*) const
测试遏制性 测试实际几何对象是否包含传递的几何图形
参数:
poOtherGeom -- 要与此几何进行比较的几何图形。
返回: 如果 poOtherGeom 包含此几何图形,则为 TRUE,否则为 FALSE
// 创建两个几何对象
OGRPolygon polygon;
polygon.addRing(0, 0, 0, 3, 3, 3, 3, 0, 0, 0); // 外环
polygon.addRing(1, 1, 1, 2, 2, 2, 2, 1, 1, 1); // 内环
OGRPoint point(1.5, 1.5);
// 判断几何对象是否包含另一个几何对象
OGRBoolean contains = polygon.Contains(&point);
Overlaps
virtual OGRBoolean Overlaps(const OGRGeometry*) const
测试重叠 测试此几何图形和传入方法的其他几何图形是否重叠,即它们的交集具有非零区域
参数:
poOtherGeom -- 要与此几何进行比较的几何图形。
返回: 如果它们重叠,则为 TRUE,否则为 FALSE
// 创建两个几何对象
OGRPolygon polygon1;
polygon1.addRing(0, 0, 0, 3, 3, 3, 3, 0, 0, 0); // 多边形1
OGRPolygon polygon2;
polygon2.addRing(2, 2, 2, 4, 4, 4, 4, 2, 2, 2); // 多边形2
// 判断两个几何对象是否有重叠
OGRBoolean overlaps = polygon1.Overlaps(&polygon2);
Boundary
Virtual OGRGeometry *Boundary() const
计算边界 将创建并返回一个新的几何对象,其中包含调用该方法的几何的边界
返回: 现在由调用方拥有的新分配的几何图形,或失败时为 NULL
// 创建一个多边形对象
OGRPolygon polygon;
polygon.addRing(0, 0, 0, 3, 3, 3, 3, 0, 0, 0);
// 获取多边形对象的边界
OGRGeometry* boundary = polygon.Boundary();
// 判断边界对象的几何类型
if (boundary->getGeometryType() == wkbLineString) {
printf("多边形的边界是一个线串\n");
} else if (boundary->getGeometryType() == wkbMultiLineString) {
printf("多边形的边界是一个多线串\n");
} else {
printf("多边形的边界不是一个线串或多线串\n");
}
// 释放边界对象的内存
OGRGeometryFactory::destroyGeometry(boundary);