OGRCircularString Class <ogrsf_frmts.h>
OGRCircularString
类是 OGR 几何库中的一个类,用于表示圆弧字符串(circular string)类型的几何图形。圆弧字符串是由一系列圆弧段组成的几何图形,每个圆弧段由三个点定义:起始点、中间点和终止点。这些圆弧段可以连接成一个闭合的圆弧字符串,也可以构成一个非闭合的曲线
Public Functions
OGRCircularString()
创建一个空的圆弧字符串
OGRCircularString(const OGRCircularString &other)
复制构造函数
OGRCircularString &operator=(const OGRCircularString &other)
赋值运算符
importFromWkb
virtual OGRErr importFromWkb(const unsigned char*, size_t, OGRwkbVariant, size_t &nBytesConsumedOut) override
从已知的二进制数据中指定几何图形
参数:
-
pabyData -- 二进制输入数据。
-
nSize -- pabyData 的大小(以字节为单位),如果不知道,则为 -1。
-
eWkbVariant -- 如果 wkbVariantPostGIS1,则对曲线几何代码进行特殊解释
-
nBytesConsumptiondOut -- 输出参数。消耗的字节数。
返回: OGRERR_NONE如果一切顺利,否则OGRERR_NOT_ENOUGH_DATA、OGRERR_UNSUPPORTED_GEOMETRY_TYPE或OGRERR_CORRUPT_DATA中的任何一个都可能被退回
exportToWkb
virtual OGRErr exportToWkb(OGRwkbByteOrder, unsigned char*, OGRwkbVariant = wkbVariantOldOgc) const override
将几何图形转换为众所周知的二进制格式
参数:
-
eByteOrder -- wkbXDR 或 wkbNDR 之一,分别表示 MSB 或 LSB 字节顺序。
-
pabyData -- 写入二进制表示的缓冲区。此缓冲区的大小必须至少为 OGRGeometry::WkbSize() 字节。
-
eWkbVariant -- 导出三维(或更多)几何图形时使用什么标准。默认的 wkbVariantOldOgc 是历史的 OGR 变体。wkbVariantIso 是 ISO SQL/MM 中定义的变体,并被 OGC 用于 SFSQL 1.2。
返回: 当前始终返回OGRERR_NONE
importFromWkt
virtual OGRErr importFromWkt(const char**) override
从已知文本数据中指定几何图形
参数:
ppszInput -- 指向源文本指针的指针。指针将更新为已使用文本之后的指针。
返回: OGRERR_NONE如果一切顺利,否则OGRERR_NOT_ENOUGH_DATA、OGRERR_UNSUPPORTED_GEOMETRY_TYPE或OGRERR_CORRUPT_DATA中的任何一个都可能被退回
exportToWkt
virtual std::string exportToWkt(const OGRWktOptions &opts = OGRWktOptions(), OGRErr *err = nullptr) const override
将循环字符串导出到 WKT
参数:
-
opts -- 输出选项。
-
err -- 指向错误代码的指针(如果需要)。
返回:
表示此循环字符串的 WKT 字符串
IsValid
virtual OGRBoolean IsValid() const override
测试几何图形是否有效
返回: 如果几何图形没有点,则为 TRUE,否则为 FALSE
getEnvelope
virtual void getEnvelope(OGREnvelope *psEnvelope) const override
计算并返回传递的 psEnvelope 结构中此几何图形的边界包络
参数:
psEnvelope -- 放置结果的结构
// 创建一个圆弧几何对象
OGRCircularString circularString;
// 添加一些点到圆弧
circularString.addPoint(0, 0);
circularString.addPoint(1, 1);
circularString.addPoint(2, 2);
// 创建一个用于存储外包络矩形的结构体
OGREnvelope envelope;
// 获取圆弧的外包络矩形
circularString.getEnvelope(&envelope);
// 打印外包络矩形的坐标信息
std::cout << "MinX: " << envelope.MinX << std::endl;
std::cout << "MinY: " << envelope.MinY << std::endl;
std::cout << "MaxX: " << envelope.MaxX << std::endl;
std::cout << "MaxY: " << envelope.MaxY << std::endl;
getEnvelope
virtual void getEnvelope(OGREnvelope3D *psEnvelope) const override
计算并返回传递的 psEnvelope 结构中此几何图形的边界包络 (3D)
参数:
psEnvelope -- 放置结果的结构
clone
virtual OGRCircularString *clone() const override
创建此对象的副本
返回: 具有与原始对象相同的几何和空间参考系统的新对象实例
get_Length
virtual double get_Length() const override
返回曲线的长度
返回: 曲线的长度,如果曲线尚未初始化,则为零
CurveToLine
virtual OGRLineString *CurveToLine(double dfMaxAngleStepSizeDegrees = 0, const char *const *papszOptions = nullptr) const override
参数:
-
dfMaxAngleStepSizeDegrees -- 沿弧的最大步长(以度为单位),使用默认设置为零。
-
papszOptions -- 选项作为以 null 结尾的字符串列表或 NULL。
返回: 近似曲线的线串
Value
virtual void Value(double, OGRPoint*) const override
沿曲线在给定距离处获取点
参数:
-
dfDistance -- 沿采样位置的曲线的距离。对于此曲线,此距离应介于 0 和 get_Length() 之间。
-
poPoint -- 要指定曲线位置的点
// 创建一个OGRPoint对象表示圆弧曲线的起点
OGRPoint startPoint(0.0, 0.0);
// 创建一个圆弧曲线对象,构建一个圆弧
OGRCircularString circularString;
circularString.addPoint(&startPoint);
circularString.addCircularArc(10.0, 0.0, 20.0);
// 调用Value函数计算圆弧上的点
double Distance = 15.0; // 假设给定一个长度
OGRPoint resultPoint;
circularString.Value(Distance, &resultPoint);
// 打印计算得到的点坐标
std::cout << "Point on circular arc at angle " << angle << ": " << resultPoint.getX() << ", " << resultPoint.getY() << std::endl;
get_Area
virtual double get_Area() const override
获取(闭合)曲线的面积
getGeometryType
virtual OGRwkbGeometryType getGeometryType() const override
获取几何类型
getGeometryName
Virtual const char *getGeometryName() const override
获取几何类型的 WKT 名称
返回:用于此几何类型的名称,采用众所周知的文本格式。返回的指针指向静态内部字符串,不应修改或释放
segmentize
virtual void segmentize(double dfMaxLength) override
修改几何图形,使其没有比给定距离更长的线段
参数:
dfMaxLength -- 分割后 2 点之间的最大距离
// 创建一个圆弧几何对象
OGRPoint point1(0, 0);
OGRPoint point2(5, 0);
OGRPoint point3(10, 0);
OGRCircularString circularString;
circularString.addPoint(&point1);
circularString.addPoint(&point2);
circularString.addPoint(&point3);
// 打印原始的圆弧几何对象
std::cout << "原始圆弧几何对象:" << std::endl;
char* wkt;
circularString.exportToWkt(&wkt);
std::cout << wkt << std::endl;
CPLFree(wkt);
// 使用最大长度为2.0的线段对圆弧几何对象进行分段
circularString.segmentize(2.0);
// 打印分段后的圆弧几何对象
std::cout << "分段后的圆弧几何对象:" << std::endl;
circularString.exportToWkt(&wkt);
std::cout << wkt << std::endl;
CPLFree(wkt)
hasCurveGeometry
virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear = FALSE) const override
如果此几何图形是或具有曲线几何图形,则返回此几何图形
线性几何类型:
- OGRPoint:点几何类型,表示一个点。
- OGRLineString:线几何类型,表示一条折线,由一系列连续的线段组成。
- OGRRing:环几何类型,是线性几何类型的特殊类型,表示闭合的线。环几何类型可以用于表示简单多边形的外环或内环。
曲线几何类型:
- OGRCircularString:圆弧几何类型,表示一个圆弧。
- OGRCompoundCurve:复合曲线几何类型,由多个线段和圆弧组成的复杂曲线。
- OGRCurvePolygon:曲线多边形几何类型,表示由曲线组成的多边形。曲线多边形由外环和零个或多个内环组成,这些环可以是线性环或圆弧环。
- 当
bLookForNonLinear
参数设置为FALSE
时,表示只查找线性的子几何对象,不查找曲线类型的子几何对象(包括圆弧、复合曲线等)。- 当
bLookForNonLinear
参数设置为TRUE
时,表示同时查找曲线类型和线性类型的子几何对象
参数:
bLookForNonLinear -- 将其设置为 TRUE 以检查几何图形是否为 CIRCULARSTRING 或包含 CIRCULARSTRING。
返回: 如果此几何图形是或具有曲线几何图形,则为 TRUE
OGRPoint point(10.0, 20.0);
//检查点是否具有曲线几何(非线性)。
if (point.hasCurveGeometry()) {
std::cout << "The point contains curve geometry." << std::endl;
} else {
std::cout << "The point does not contain curve geometry." << std::endl;
}
getLinearGeometry
virtual OGRGeometry *getLinearGeometry(double dfMaxAngleStepSizeDegrees = 0, const char *const *papszOptions = nullptr) const override
返回此几何图形的非曲线版本,可能是近似值
参数:
-
dfMaxAngleStepSizeDegrees -- 沿弧的最大步长(以度为单位),使用默认设置为零。
-
papszOptions -- 选项作为以 null 结尾的字符串列表。
返回: 新的几何图形文章来源:https://www.toymoban.com/news/detail-619268.html
OGRPoint p1(0, 0);
OGRPoint p2(1, 1);
OGRPoint p3(2, 0);
OGRCircularString cs;
cs.addPoint(&p1);
cs.addPoint(&p2);
cs.addPoint(&p3);
// 转换为线性几何对象
OGRGeometry* linearGeom = cs.getLinearGeometry();
在上面的例子中,一开始设置的点在 OGRCircularString
中表示一个圆弧段,可以用中心点、起始点、终止点和半径等信息来表示。但是当将 OGRCircularString
对象转换为线性几何对象时,圆弧段将被拆分成一组连续的直线段,这些直线段近似地组成了原始圆弧的形状。文章来源地址https://www.toymoban.com/news/detail-619268.html
到了这里,关于GDAL C++ API 学习之路 OGRGeometry 圆弧类 OGRCircularString的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!