GDAL C++ API 学习之路 OGRGeometry 线类 OGRLineString

OGRLineString class        "ogr_geometry.h"

OGRLineString 类是 OGR 库中的一个几何对象类,用于表示线段或折线。它由多个坐标点组成,并且在坐标点之间形成线段。OGRLineString 可以包含 2D、3D 或 3D+M 坐标点,其中 M 表示额外的度量值,例如时间或速度

Public Functions

OGRLineString()

创建一个空线串

OGRLineStringconst OGRLineString &other)

复制构造函数

OGRLineString &operator=const OGRLineString &other)

赋值运算符

clone

virtual OGRLineString *clone() const override

创建此对象的副本

OGRLineString lineString;// 添加两个坐标点构成线段
lineString.addPoint(0.0, 0.0);
lineString.addPoint(10.0, 10.0);// 克隆 OGRLineString 对象
OGRLineString* clonedLineString = lineString.clone();

CurveToLine

virtual OGRLineString *CurveToLine(double dfMaxAngleStepSizeDegrees = 0, const char *const *papszOptions = nullptr) const override

从曲线几何返回线串

参数:

  • dfMaxAngleStepSizeDegrees -- 沿弧的最大步长(以度为单位),使用默认设置为零。

  • papszOptions -- 选项作为以 null 结尾的字符串列表或 NULL。

返回: 近似曲线的线串

OGRLineString lineString;// Add points to the lineString (this could be a curve)
lineString.addPoint(0, 0);
lineString.addPoint(1, 1);
lineString.addPoint(2, 0);// Convert curve to line
OGRLineString* convertedLine = lineString.CurveToLine();// Output the converted line's points
for (int i = 0; i < convertedLine->getNumPoints(); ++i) {double x, y;convertedLine->getPoint(i, &x, &y);std::cout << "Point " << i << ": (" << x << ", " << y << ")" << std::endl;
}// Release memory
delete convertedLine;

getCurveGeometry

virtual OGRGeometry *getCurveGeometry(const char *const *papszOptions = nullptr) const override

返回此几何图形的曲线版本

参数:

papszOptions -- 选项作为以 null 结尾的字符串列表。暂时未使用。必须设置为 NULL。

返回: 新的几何图形

// 创建一个线性曲线对象OGRLineString linearRing;linearRing.addPoint(0, 0);linearRing.addPoint(1, 0);linearRing.addPoint(1, 1);linearRing.addPoint(0, 1);linearRing.addPoint(0, 0);// 获取线性曲线的几何对象OGRGeometry* curveGeometry = linearRing.getCurveGeometry();// 输出几何对象的类型if (curveGeometry != nullptr) {OGRwkbGeometryType geomType = curveGeometry->getGeometryType();const char* typeName = OGRGeometryTypeToName(geomType);printf("Curve geometry type: %s\n", typeName);// 释放内存OGRGeometryFactory::destroyGeometry(curveGeometry);} else {printf("Failed to get curve geometry.\n");}

get_Area

virtual double get_Area() const override

获取(闭合)曲线的面积

返回: 要素的面积(以使用的空间参考系统的平方单位表示)

// 创建一个多边形对象OGRLinearRing ring;ring.addPoint(0, 0);ring.addPoint(1, 0);ring.addPoint(1, 1);ring.addPoint(0, 1);ring.addPoint(0, 0);OGRPolygon polygon;polygon.addRing(&ring);// 获取多边形对象的面积double area = polygon.get_Area();// 输出面积printf("Polygon area: %f\n", area);

getGeometryType

virtual OGRwkbGeometryType getGeometryType() const override

返回:

几何类型类型

    // 创建一个点对象OGRPoint point(10.0, 20.0);// 获取点对象的几何类型OGRwkbGeometryType geomType = point.getGeometryType();// 输出几何类型switch (geomType) {case wkbPoint:printf("Geometry Type: Point\n");break;case wkbLineString:printf("Geometry Type: LineString\n");break;case wkbPolygon:printf("Geometry Type: Polygon\n");break;// 更多几何类型的处理...default:printf("Unknown Geometry Type\n");break;}

getGeometryName

Virtual const char *getGeometryName() const override

获取几何类型的 WKT 名称

返回: 用于此几何类型的名称,采用众所周知的文本格式。返回的指针指向静态内部字符串,不应修改或释放

// 创建一个点对象OGRPoint point(10.0, 20.0);// 获取几何对象的名称const char* geometryName = point.getGeometryName();// 输出几何对象的名称printf("Geometry Name: %s\n", geometryName);

isClockwise

virtual int isClockwise() const override

如果环具有顺时针绕组(或小于 2 磅),则返回 TRUE

返回: 如果顺时针为真,否则为假

/ 创建一个多边形对象OGRLinearRing ring;ring.addPoint(0, 0);ring.addPoint(0, 1);ring.addPoint(1, 1);ring.addPoint(1, 0);ring.addPoint(0, 0);OGRPolygon polygon;polygon.addRing(&ring);// 判断多边形顶点排列方向int clockwise = polygon.isClockwise();// 输出判断结果if (clockwise > 0) {printf("Polygon is clockwise.\n");} else if (clockwise < 0) {printf("Polygon is counterclockwise.\n");} else {printf("Vertices are collinear or not a valid polygon.\n");}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/17760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端-mac初始化配置

新电脑设置&#xff1a; Mac三指拖动&#xff1a;https://support.apple.com/zh-cn/HT204609 选取苹果菜单  >“系统设置”&#xff08;或“系统偏好设置”&#xff09;。点按“辅助功能”。点按“指针控制”&#xff08;或“鼠标与触控板”&#xff09;。点按“触控板选…

ISO 7637-2 5a/5b抛负载测试保护用TVS二极管,如何选型号?

在国际标准ISO 16750-2颁布之前&#xff0c;全球各大汽车零部件制造商一直采用的是ISO 7637-2标准。ISO 16750-2国际标准发行之后&#xff0c;汽车抛负载浪涌测试中ISO 7637-2 5A和5B测试标准被ISO 16750-2测试标准取代。查看ISO 16750-2和ISO 7637-2国际标准文档资料对比会发现…

13个ChatGPT类实用AI工具汇总

在ChatGPT爆火后&#xff0c;各种工具如同雨后春笋一般层出不穷。以下汇总了13种ChatGPT类实用工具&#xff0c;可以帮助学习、教学和科研。 01 / ChatGPT for google/ 一个浏览器插件&#xff0c;可搭配现有的搜索引擎来使用 最大化搜索效率&#xff0c;对搜索体验的提升相…

多线程(JavaEE初阶系列6)

目录 前言&#xff1a; 1.什么是线程池 2.标准库中的线程池 3.实现线程池 结束语&#xff1a; 前言&#xff1a; 在上一节中小编带着大家了解了一下Java标准库中的定时器的使用方式并给大家实现了一下&#xff0c;那么这节中小编将分享一下多线程中的线程池。给大家讲解一…

MySQL主从复制配置

Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。 (1)首先确保主从服务器上的Mysql版本相同 (2)在主服务器上,创建一个充许从数据库来访问的用户slave,密码为:123456 ,然后使用REPLICATION SLAV…

NoSQL-Redis集群

NoSQL-Redis集群 一、集群&#xff1a;1.单点Redis带来的问题&#xff1a;2.解决&#xff1a;3.集群的介绍&#xff1a;4.集群的优势&#xff1a;5.集群的实现方式&#xff1a; 二、集群的模式&#xff1a;1.类型&#xff1a;2.主从复制&#xff1a; 三、搭建主从复制&#xff…

在CentOS 7上挂载硬盘到系统的步骤及操作

目录 1&#xff1a;查询未挂载硬盘2&#xff1a;创建挂载目录3&#xff1a;检查磁盘是否被分区4&#xff1a;格式化硬盘5&#xff1a;挂载目录6&#xff1a;检查挂载状态7&#xff1a;设置开机自动挂载总结&#xff1a; 本文介绍了在CentOS 7上挂载硬盘到系统的详细步骤。通过确…

代码随想录算法训练营第二十八天 | Leetcode随机抽题检测

Leetcode随机抽题检测--使用题库&#xff1a;Leetcode热题100 1 两数之和未看解答自己编写的青春版重点题解的代码日后再次复习重新写 49 字母异位词分组未看解答自己编写的青春版重点题解的代码日后再次复习重新写 128 最长连续序列未看解答自己编写的青春版重点关于 left 和 …

C语言每日一题:12《数据结构》相交链表。

题目&#xff1a; 题目链接 思路一&#xff1a; 1.如果最后一个节点相同说明一定有交点。 2.使用两个循环获取一下长度&#xff0c;同时可以获取到尾节点。 3。注意初始化lenA和lenB为1&#xff0c;判断下一个节点是空是可以保留尾节点的。长度会少一个&#xff0c;尾节点没有…

Excel将单元格中的json本文格式化

打开Excel文件并按下ALT F11打开Visual Basic for Applications&#xff08;VBA&#xff09;编辑器。 输入下面的代码 Sub FormatJSONCells()Dim cell As RangeDim jsonString As StringDim json As ObjectDim formattedJSON As String 循环遍历选定的单元格范围For Each ce…

根据前序和中序遍历序列构造二叉树 (递归+迭代两种方法实现)

给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,null,15,7]源代码如下…

【虚拟数字人】SadTalker简易部署教程

视频教程在这里&#xff1a; sadtalker数字人创建简易教程 项目基于SadTalkers实现视频唇形合成的Wav2lip。通过以视频文件方式进行语音驱动生成唇形&#xff0c;设置面部区域可配置的增强方式进行合成唇形&#xff08;人脸&#xff09;区域画面增强&#xff0c;提高生成唇形的…

使用Qt中的QDir类进行目录操作

文章目录 概述QDir类的基本功能获取当前目录创建目录列出目录内容筛选目录内容筛选特定命名文件 复制文件和目录删除文件和目录 应用场景总结 概述 Qt是一个跨平台的C应用程序开发框架&#xff0c;其中提供了许多方便的类来处理文件和目录操作。其中&#xff0c;QDir类是用于处…

修改conda环境缓存默认路径

前言&#xff1a;conda环境占用的内存太大了&#xff0c;每次建立一个新的虚拟环境都要加5个G差不多。所以想要修改默认的路径 问题1&#xff1a;找不到.condarc文件夹 创建condarc文件命令 conda config --add channels r 修改conda环境缓存默认路径 打开.condarc 添加 en…

xinput1_4.dll丢失怎么办?这几个方法都能解决

xinput1_4.dll是一个动态链接库文件&#xff08;DLL&#xff09;&#xff0c;它是Microsoft DirectX的一部分&#xff0c;用于处理游戏控制器输入。当你的电脑提示xinput1_4.dll文件丢失时&#xff0c;意味着与这个文件相关的游戏或应用程序无法正常运行。 当你的电脑提示xinp…

iPhone 8 Plus透明屏应用范围详解

iPhone 8 Plus是苹果公司于2017年推出的一款智能手机&#xff0c;它采用了全新的玻璃机身设计&#xff0c;支持无线充电&#xff0c;并且搭载了更强大的A11仿生芯片。 而透明屏则是一种新型的屏幕技术&#xff0c;可以使手机屏幕呈现出透明的效果。 透明屏是一种将屏幕背后的元…

mysql进阶-用户密码的设置和管理

一、修改密码 1.1 修改自己的密码 方式一&#xff1a; 推荐使用 alter user user() identified by 新密码;方式二&#xff1a; set password 新密码;演示 [rootVM-4-6-centos /]# mysql -uzhang3 -pZhangSan123456 mysql: [Warning] Using a password on the command line…

基于深度学习的裂纹图像分类研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

11、springboot项目启动时对容器中的bean进行延迟初始化

springboot项目启动时对容器中的bean进行延迟初始化 预初始化&#xff1a; Spring Boot在启动应用时&#xff0c;会启动Spring容器&#xff0c;当启动Spring容器时&#xff0c;Spring会自动初始化容器中所有的singleton Bean——这是默认行为 预初始化的好处&#xff1a; 1、项…

MATLAB编程实践12、13

生命游戏 游戏的宇宙是无限可扩展的二维矩形网格&#xff0c;群体是那些标注为存活的网格的集合。群体可以依照称为代的离散时间步距进化。在每一步中&#xff0c;每个网格的命运由它周围最近的8个网格邻居的活度决定&#xff0c;规则如下&#xff1a; 如果一个存活的网格有两个…