forceToPolygon
static OGRGeometry *forceToPolygon(OGRGeometry*)
转换为多边形
参数:
poGeom - 输入几何 - 所有权传递给方法。
返回: 新几何图形
// 创建一个点几何对象
OGRPoint* point = new OGRPoint(10.0, 20.0);
// 使用 forceToPolygon 方法将点转换为多边形
OGRGeometry* polygon = OGRGeometryFactory::forceToPolygon(point);
// 检查是否成功转换为多边形
if (polygon != nullptr && polygon->getGeometryType() == wkbPolygon) {
// 执行其他操作...
// ...
forceToLineString
static OGRGeometry *forceToLineString(OGRGeometry*, bool bOnlyInOrder = true)
转换为线字符串
参数:
-
poGeom - 输入几何 - 所有权传递给方法。
-
bOnlyInOrder -- 标志,如果设置为 FALSE,则指示如果线串中的点顺序能够匹配另一个线串的末端,则点的顺序可能会颠倒。如果设置为 TRUE,则一个线串的开头必须与另一个线串的结尾匹配
返回:新几何图形
// 创建一个多边形几何对象
OGRPolygon polygon;
OGRLinearRing ring;
ring.addPoint(0, 1);
ring.addPoint(1, 1);
ring.addPoint(1, 0);
ring.addPoint(0, 0);
polygon.addRing(&ring);
//这段代码创建了一个 OGRPolygon 对象 polygon 和一个 OGRLinearRing 对象 ring。然后,通过调用 addPoint() 方法向 ring 添加一系列顶点坐标,定义了一个闭合的线性环。
//接下来,通过调用 addRing() 方法将 ring 添加到 polygon 中,形成一个多边形的几何形状。最后,polygon 对象表示了一个由四个顶点组成的矩形
// 将多边形几何对象强制转换为线几何对象
OGRGeometry* lineString = OGRGeometryFactory::forceToLineString(&polygon);
forceToMultiPolygon
static OGRGeometry *forceToMultiPolygon(OGRGeometry*)
转换为多多边形
返回:新几何图形
// 创建一个多边形对象
OGRPolygon* polygon = new OGRPolygon();
OGRLinearRing* ring = new OGRLinearRing();
ring->addPoint(0, 0);
ring->addPoint(0, 1);
ring->addPoint(1, 1);
ring->addPoint(1, 0);
ring->addPoint(0, 0);
polygon->addRingDirectly(ring);
// 将多边形对象转换为多多边形对象
OGRGeometry* multiPolygon = forceToMultiPolygon(polygon);
forceToMultiPoint
static OGRGeometry *forceToMultiPoint(OGRGeometry*)
转换为多点
返回:新几何图形
// 创建一个点对象
OGRPoint* point = new OGRPoint(10, 20);
// 将点对象转换为多点对象
OGRGeometry* multiPoint = forceToMultiPoint(point);
forceToMultiLineString
static OGRGeometry *forceToMultiLineString(OGRGeometry*)
转换为多线字符串
返回:新几何图形
OGRLineString* lineString = new OGRLineString();
lineString->addPoint(0, 0);
lineString->addPoint(1, 1);
lineString->addPoint(2, 2);
// 将线串对象转换为多线串对象
OGRGeometry* multiLineString = forceToMultiLineString(lineString);
forceTo
static OGRGeometry *forceTo(OGRGeometry *poGeom, OGRwkbGeometryType eTargetType, const char *const *papszOptions = nullptr)
转换为其他几何类型
参数:
-
poGeom - 输入几何 - 所有权传递给方法。
-
eTargetType -- 目标输出几何类型。
-
papszOptions -- 选项作为以 null 结尾的字符串列表或 NULL。
返回: 新几何图形
// 创建一个几何对象
OGRPoint* point = new OGRPoint(10, 20);
// 将几何对象转换为指定类型的几何对象
OGRGeometry* convertedGeom = forceTo(point, wkbPolygon);
removeLowerDimensionSubGeoms
static OGRGeometry *removeLowerDimensionSubGeoms(const OGRGeometry *poGeom)
从几何集合中删除不具有集合最大拓扑维数的子几何
从给定的几何对象中移除低维度的子几何对象。在几何对象的层次结构中,低维度的子几何对象指的是维度比父级几何对象低的子对象
例如,如果几何对象是一个多几何对象,包含点、线和面,那么点和线就是低维度的子几何对象,面是高维度的子几何对象。使用 removeLowerDimensionSubGeoms
函数可以移除点和线,只保留面
参数:
poGeom -- 输入几何
返回: 新的几何图形
// 创建一个多几何对象,包含点、线和面
OGRMultiGeometry* multiGeom = new OGRMultiGeometry();
multiGeom->addGeometry(new OGRPoint(0, 0));
multiGeom->addGeometry(new OGRLineString({{1, 1}, {2, 2}}));
multiGeom->addGeometry(new OGRPolygon());
// 移除低维度的子几何对象
OGRGeometry* resultGeom = removeLowerDimensionSubGeoms(multiGeom);
organizePolygons
static OGRGeometry *organizePolygons(OGRGeometry **papoPolygons, int nPolygonCount, int *pbResultValidGeometry, const char **papszOptions = nullptr)
根据几何组织面
参数:
-
papoPolygons - 几何指针数组 - 都应该是OGRPolygons或OGRCurvePolygons。传递几何图形的所有权,但不传递数组本身的所有权。
-
nPolygonCount -- papoPolygons 中的项目数
-
pbIsValidGeometry -- 如果检测到无效结果,则值可能设置为 FALSE。有效性检查因使用的方法而异,并且仅限于将内环链接到外环所需的检查,因此 TRUE 的结果并不意味着 OGRGeometry::IsValid() 返回 TRUE。
-
papszOptions -- 用于传递选项的字符串列表
返回: 单个生成的几何图形(OGRPolygon,OGRCurvePolygon,OGRMultiPolygon,OGRMultiSurface或OGRGeometryCollection)。 在 nPolygonCount 为 0 的情况下返回 POLYGON EMPTY
意义:
organizePolygons
函数的作用是对一组多边形进行组织,将重叠的多边形进行合并,并将非重叠的多边形保持不变。
多边形组织的目的是消除重叠的部分,以便更方便地进行空间分析和处理。通过将重叠的多边形合并为一个更大的多边形,可以简化空间操作和查询,减少重复计算,并提高处理效率。
// 假设有两个多边形对象
OGRPolygon polygon1;
OGRPolygon polygon2;
// 将两个多边形对象存储在数组中
OGRGeometry* polygons[] = { &polygon1, &polygon2 };
// 定义变量来存储结果的有效性
int resultValidGeometry;
// 调用 organizePolygons 函数进行多边形的组织
OGRGeometry* organizedGeometry = OGRGeometryFactory::organizePolygons(polygons, 2, &resultValidGeometry);
haveGEOS
static bool haveGEOS()
测试是否启用了 GEOS 如果 OGR 中内置了 GEOS 支持,则此静态方法返回 TRUE,否则返回 FALSE
返回: 如果可用,则为 TRUE,否则为 FALSE
bool hasGEOS = OGRGeometry::haveGEOS();
if (hasGEOS) {
// GEOS 已安装
// 执行相关操作
} else {
// GEOS 未安装
// 执行其他操作
}
transformWithOptions
static OGRGeometry *transformWithOptions(const OGRGeometry *poSrcGeom, OGRCoordinateTransformation *poCT, char **papszOptions, const TransformWithOptionsCache &cache = TransformWithOptionsCache ())
变换几何图形
参数:
-
poSrcGeom -- 源几何
-
poCT -- 坐标转换对象,或 NULL。
-
papszOptions -- 选项。包括 WRAPDATELINE=YES 和 DATELINEOFFSET=。
-
缓存 -- 缓存。如果在调用之间持续存在,可能会提高性能
返回:(新)转换的几何图形
// 创建源几何对象
OGRPoint srcPoint(10.0, 20.0);
// 创建坐标转换对象
OGRSpatialReference* srcSRS = new OGRSpatialReference();
OGRSpatialReference* tgtSRS = new OGRSpatialReference();
OGRCoordinateTransformation* transform = OGRCreateCoordinateTransformation(srcSRS, tgtSRS);
// 定义转换选项
char* options[] = { "OPTION1=VALUE1", "OPTION2=VALUE2", nullptr };
// 进行几何转换
OGRGeometry* transformedGeom = OGRGeometry::transformWithOptions(&srcPoint, transform, options);
approximateArcAngles
static OGRGeometry *approximateArcAngles(double dfX, double dfY, double dfZ, double dfPrimaryRadius, double dfSecondaryAxis,double dfRotation, double dfStartAngle,
double dfEndAngle, double dfMaxAngleStepSizeDegrees, const bool bUseMaxGap = false)
描弧到线串 根据中心点、半径、起始角度和结束角度(所有角度(以度为单位)将圆弧描边到线串
参数:
-
dfCenterX -- Center X
-
dfCenter Y -- 中心 Y
-
dfZ -- 中心 Z
-
dfPrimaryRadius -- 椭圆的 X 半径。
-
dfSecondaryRadius -- 椭圆的 Y 半径。
-
dfRotation -- 椭圆顺时针旋转。
-
dfStartAngle -- 与弧上第一个点的角度(X 正的顺时针方向)
-
dfEndAngle -- 与弧上最后一个点的角度(X 正顺时针方向)
-
dfMaxAngleStepSizeDegrees -- 沿弧的最大步长(以度为单位),使用默认设置为零。
-
buseMaxGap -- 可选:是否遵守OGR_ARC_MAX_GAP。
返回: 表示圆弧近似的OGRLineString几何体。
double dfX = 0.0;
double dfY = 0.0;
double dfZ = 0.0;
double dfPrimaryRadius = 10.0;
double dfSecondaryAxis = 5.0;
double dfRotation = 0.0;
double dfStartAngle = 0.0;
double dfEndAngle = 90.0;
double dfMaxAngleStepSizeDegrees = 5.0;
bool bUseMaxGap = false;
OGRGeometry* poGeom = OGRGeometryFactory::approximateArcAngles(dfX, dfY, dfZ, dfPrimaryRadius, dfSecondaryAxis, dfRotation, dfStartAngle, dfEndAngle, dfMaxAngleStepSizeDegrees, bUseMaxGap);
GetCurveParameters
static int GetCurveParameters(double x0, double y0, double x1, double y1, double x2, double y2, double &R, double &cx, double &cy, double &alpha0, double &alpha1, double &alpha2)
返回圆弧的参数 角度以弧度返回,具有三角约定(逆时针)
参数:
-
x0 -- 第一个点的 x
-
y0 -- 第一个点的 y
-
x1 -- x 为中间点
-
y1 -- y 的中间点
-
x2 -- x 最终点
-
y2 -- 最终点的 y
-
R -- 半径(输出)
-
cx -- 弧心的 x(输出)
-
cy -- 弧心的 y(输出)
-
alpha0 -- 中心和第一点之间的角度,以弧度为单位(输出)
-
alpha1 -- 中心点和中间点之间的角度,以弧度为单位(输出)
-
alpha2 -- 中心点和终点之间的角度,以弧度为单位(输出)
返回: 如果点未对齐并定义圆弧,则为 TRUE
double x0 = 0.0;
double y0 = 0.0;
double x1 = 1.0;
double y1 = 1.0;
double x2 = 2.0;
double y2 = 0.0;
double R, cx, cy, alpha0, alpha1, alpha2;
int result = OGRGeometryFactory::GetCurveParameters(x0, y0, x1, y1, x2, y2, R, cx, cy, alpha0, alpha1, alpha2);
curveToLineString
static OGRLineString *curveToLineString(double x0, double y0, double z0, double x1, double y1, double z1, double x2, double y2, double z2, int bHasZ,
double dfMaxAngleStepSizeDegrees, const char *const *papszOptions = nullptr)
将圆弧圆转换为近似线串 圆弧由第一点、中间点和最后点定义
参数:
-
x0 -- 第一个点的 x
-
y0 -- 第一个点的 y
-
z0 -- 第一点的 z
-
x1 -- x 为中间点
-
y1 -- y 的中间点
-
Z1 -- 中间点的Z
-
x2 -- x 最终点
-
y2 -- 最终点的 y
-
Z2 -- 终点的 z
-
bHasZ -- 如果必须考虑 z 则为 TRUE
-
dfMaxAngleStepSizeDegrees -- 沿弧的最大步长(以度为单位),使用默认设置为零。
-
papszOptions -- 选项作为以 null 结尾的字符串列表或 NULL。识别的选项:
-
ADD_INTERMEDIATE_POINT=隐身/是/否(默认为隐身)。确定是否以及如何在线串中输出中间点。如果设置为 STEALTH,则不会添加显式中间点,但其属性以低有效中间点编码,OGRGeometryFactory::curveFromLineString() 可以解码它们。这是在 OGR 中往返的最佳折衷方案,也是使用 PostGIS ST_LineToCurve() 时获得更好的结果。如果设置为 YES,则中间点将显式添加到线串中。如果设置为 NO,则不显式添加中间点。
返回: 转换后的几何图形(调用方的所有权)
double x0 = 0.0, y0 = 0.0, z0 = 0.0;
double x1 = 1.0, y1 = 1.0, z1 = 0.0;
double x2 = 2.0, y2 = 0.0, z2 = 0.0;
int bHasZ = 0;
double dfMaxAngleStepSizeDegrees = 1.0;
OGRLineString* lineString = OGRGeometryFactory::curveToLineString(x0, y0, z0, x1, y1, z1, x2, y2, z2, bHasZ, dfMaxAngleStepSizeDegrees);