GDAL C++ API 学习之路 (6) OGRGeometry 几何类 OGRGeometry

Simplify

virtual OGRGeometry *Simplify(double dTolerance) const

简化几何图形

参数:

dTolerance -- 简化的距离容差。

返回: 简化的几何图形或 NULL(如果发生错误)

   // 创建一个多边形对象OGRLinearRing ring;ring.addPoint(0, 0);ring.addPoint(0, 4);ring.addPoint(2, 4);ring.addPoint(2, 2);ring.addPoint(4, 2);ring.addPoint(4, 0);ring.addPoint(0, 0);OGRPolygon polygon;polygon.addRing(&ring);// 输出原始多边形的点数std::cout << "Original polygon points count: " << polygon.getNumPoints() << std::endl;// 进行简化OGRGeometry* simplifiedGeometry = polygon.Simplify(1.0);// 输出简化后的多边形的点数cout << "Simplified polygon points count: " << simplifiedGeometry->getNumPoints() << endl;

SimplifyPreserveTopology

OGRGeometry *SimplifyPreserveTopology(double dTolerance) const

简化几何图形,同时保留拓扑

参数:

dTolerance -- 简化的距离容差。

返回: 简化的几何图形或 NULL(如果发生错误)

    // 创建一个多边形对象OGRLinearRing ring;ring.addPoint(0, 0);ring.addPoint(0, 4);ring.addPoint(2, 4);ring.addPoint(2, 2);ring.addPoint(4, 2);ring.addPoint(4, 0);ring.addPoint(0, 0);OGRPolygon polygon;polygon.addRing(&ring);// 输出原始多边形的点数std::cout << "Original polygon points count: " << polygon.getNumPoints() << std::endl;// 进行简化,并保持拓扑结构OGRGeometry* simplifiedGeometry = polygon.SimplifyPreserveTopology(1.0);// 输出简化后的多边形的点数std::cout << "Simplified polygon points count: " << simplifiedGeometry->getNumPoints() << std::endl;// 释放简化后的几何对象的内存delete simplifiedGeometry;

DelaunayTriangulation

virtual OGRGeometry *DelaunayTriangulation(double dfTolerance, int bOnlyEdges) const

返回几何顶点的 Delaunay 三角测量

参数:

  • dfTolerance -- 可选的捕捉容差,用于提高鲁棒性

  • bOnlyEdge——如果为 TRUE,将返回一个 MULTILINESTRING,否则它将返回一个包含三角形多边形的 GEOMETRYCOLLECTION。

返回: 如果发生错误,则由 Delaunay 三角测量或 NULL 生成的几何图形

 // 创建一组点OGRPoint points[4];points[0].setX(0);points[0].setY(0);points[1].setX(0);points[1].setY(10);points[2].setX(10);points[2].setY(10);points[3].setX(10);points[3].setY(0);// 创建一个几何对象集合并添加点OGRGeometryCollection collection;for (int i = 0; i < 4; i++) {collection.addGeometry(&points[i]);}// 对点进行 Delaunay 三角剖分OGRGeometry* triangulatedGeometry = collection.DelaunayTriangulation(0.0, 0);// 输出三角剖分结果的类型if (triangulatedGeometry != nullptr) {OGRwkbGeometryType geomType = triangulatedGeometry->getGeometryType();std::cout << "Triangulated geometry type: " << OGRGeometryTypeToName(geomType) << std::endl;// 释放三角剖分结果的内存delete triangulatedGeometry;} else {std::cout << "Failed to perform Delaunay triangulation." << std::endl;}

Polygonize

Virtual OGRGeometry *Polygonize() const

多边形化一组稀疏边        

将创建并返回一个新的几何对象,其中包含重新组装的多边形集合:如果输入集合不对应于多线字符串,或者由于拓扑不一致而无法将边重新组装为多边形时,将返回 NULL

返回: 现在由调用方拥有的新分配的几何图形,或失败时为 NULL

// 创建一组线要素OGRLineString lineStrings[3];lineStrings[0].addPoint(0, 0);lineStrings[0].addPoint(0, 10);lineStrings[1].addPoint(0, 10);lineStrings[1].addPoint(10, 10);lineStrings[2].addPoint(10, 10);lineStrings[2].addPoint(10, 0);// 创建一个几何对象集合并添加线要素OGRGeometryCollection collection;for (int i = 0; i < 3; i++) {collection.addGeometry(&lineStrings[i]);}// 对几何对象进行多边形化处理OGRGeometry* polygonizedGeometry = collection.Polygonize();// 输出多边形化处理结果的类型if (polygonizedGeometry != nullptr) {OGRwkbGeometryType geomType = polygonizedGeometry->getGeometryType();std::cout << "Polygonized geometry type: " << OGRGeometryTypeToName(geomType) << std::endl;// 释放多边形化处理结果的内存delete polygonizedGeometry;} else {std::cout << "Failed to polygonize the geometries." << std::endl;}

Distance3D

virtual double Distance3D(const OGRGeometry *poOtherGeom) const 

返回两个几何图形之间的 3D 距离

距离表示为与几何坐标相同的单位

返回:  两个几何形状之间的距离

// 创建两个点
OGRPoint point1(0, 0, 0);
OGRPoint point2(3, 4, 5);// 计算两点之间的三维空间距离
double distance3D = point1.Distance3D(&point2);cout << "3D Distance between point1 and point2: " << distance3D << endl;

 

swapXY

virtual void swapXY()

交换 x 和 y 坐标

// 创建一个点对象
OGRPoint point(10, 20);// 打印交换前的坐标
std::cout << "Before swap: X=" << point.getX() << ", Y=" << point.getY() << std::endl;// 调用 swapXY 函数交换 X 和 Y 坐标
point.swapXY();// 打印交换后的坐标
std::cout << "After swap: X=" << point.getX() << ", Y=" << point.getY() << std::endl;

投影

inline OGRPoint *toPoint()

向下投射到 OGRPoint*

意味着事先检查 wkbFlatten(getGeometryType()) == wkbPoint

有很多种不同的投影,但总的是高纬转低维

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

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

相关文章

CNN复习

个人的对于CNN总结的一些知识点 对于每一个卷积层来说&#xff0c;其out_channel就是卷积核的个数&#xff1a; 对每个输入的图片&#xff08;就是每一个&#xff08;C,H,W&#xff09;的矩阵&#xff0c;一共有batch_size个&#xff09;&#xff0c;卷积核从第0到第in_channe…

表单验证:输入的字符串以回车分隔并验证是否有

公司项目开发时&#xff0c;有一个需求&#xff0c;需要对输入的字符串按回车分隔并验证是否有重复项&#xff0c;效果如下&#xff1a; 表单代码&#xff1a; <el-form-item label"IP地址条目&#xff1a;" prop"ipAddressEntry"><el-inputtype&…

Vue中TodoList案例_静态

MyHeader.vue <template><div class"todo-header"><input type"text" placeholder"请输入你的任务名称&#xff0c;按回车键确认"></div> </template><script> export default {name: "MyHeader"…

Vue 中input 点击复制其内容

Element UI中el-input 组件 &#xff0c;一般使用情况&#xff1a; <el-input type"text" id"put" v-model"value" ></el-input> el-input 添加点击事件,这样添加点击事件是无效的&#xff1a; <el-input click"copy&quo…

Linux Shell 脚本编程学习之【第3章 正则表达式 (第一部分)】

第3章 正则表达式 1 正则表达式基础1.1 *符号1.2 “.”符号1.3 “^”符号1.4 “$”符号1.5 “[]”符号1.6 “\”符号1.7 “\<\>”符号1.8 “\{\}”符号 2 正则表达式扩展2.1 “?”符号2.2 “”符号2.3“()”符合和“ | ”符号 3 通配&#xff08;Globbing&#xff09; 1…

生产环境Session解决方案、Session服务器之Redis

目录 一、服务器配置 二、安装nginx 三、安装配置Tomcat&#xff1a; 四、配置session Session服务器之Redis Redis与Memcached的区别 安装部署redis 一、服务器配置 IP地址 主机名 软件包列表 192.168.100.131 huyang1 nginx 192.168.100.133 huyang3 JDK Tomca…

微信小程序上,实现图片右上角数字显示

微信小程序上&#xff0c;实现图片右上角数字显示 直接上代码&#xff1a; 样式代码index.wxss如下&#xff1a; .circle_rednum {position: absolute;color: white;font-size: 13px;background-color: #EC2F43;width: 23px;height: 23px;line-height: 23px;left: 80%;top: …

【docker】docker部署tomcat

目录 1.1 搜索tomcat镜像1.2 拉取tomcat镜像1.3 创建容器&#xff0c;设置端口映射、目录映射1.4 测试 1.1 搜索tomcat镜像 docker search tomcat1.2 拉取tomcat镜像 docker pull tomcat1.3 创建容器&#xff0c;设置端口映射、目录映射 # 在/root目录下创建tomcat目录用于存…

数据库备份还原-mysqldump、mydumper、xtrabackup、压缩

数据库备份&#xff0c;数据库为school&#xff0c;素材如下 一、创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARC…

Linux中常用的指令

ls ls [选项] [目录或文件] 功能&#xff1a;对于目录&#xff0c;列出该目录下所有的子目录和文件&#xff1b;对于文件&#xff0c;列出该文件的文件名和其他属性 常用选项&#xff1a; -a:列出目录下的所有文件&#xff0c;包括以.开头的隐藏文件 -l:列出文件的详细信息。…

单片机第一季:零基础11——实时时钟DS1302

目录 1&#xff0c;DS1302 时钟芯片介绍 2&#xff0c;BCD码介绍 3&#xff0c;涉及到的寄存器 3.1&#xff0c;控制寄存器 3.2&#xff0c;日历/时钟寄存器 3.3&#xff0c;DS1302 的读写时序 4&#xff0c;相关代码 这一章我们来学习DS1302 时钟芯片&#xff0c…

测牛学堂:软件测试之andorid app性能测试面试知识点总结(二)

APP性能测试指标之FPS 如果经常玩游戏的同学应该听过FPS。 FPS本来是图像领域中的概念&#xff0c;是指画面每秒传输的帧数。每秒钟帧数越多&#xff0c;所显示的动作就会越流畅。 但是因为功耗的限制&#xff0c;一般60fps就是跑满的效果了。 我们测试的话&#xff0c;一般…

如何在Windows上恢复已删除的文件?

大多数人在无意中删除了一些重要文件后无法恢复。这些文件被暂时删除&#xff0c;直到我们清空回收站才会消失。你可以通过右键单击回收站中的文件并选择还原选项来轻松恢复这些文件。但是&#xff0c;如果你清理回收站删除了文件怎么办&#xff1f;或者不小心使用Shift Delet…

Pytorch nn.Linear的基本用法与原理详解

1. 参考 Pytorch nn.Linear的基本用法与原理详解_iioSnail的博客-CSDN博客 [机器学习]深度学习初学者大疑问之nn.Linear(a,b)到底代表什么?_五阿哥爱跳舞的博客-CSDN博客

Rola-IP系统崩溃怎么办?亚马逊、沃尔玛、速卖通等测评该如何应对?(详解篇)

近期做测评的卖家遇到了一个大问题&#xff0c;罗拉IP&#xff08;rola-ip&#xff09;的突然关闭&#xff0c;给用户带来了诸多不便&#xff0c;这种跑路行为让用户损失惨重。身为IP提供商&#xff0c;跑路不仅伤害了用户的信任&#xff0c;也影响了用户的项目和工作。 许多用…

观察者模式(java)

目录 结构 案例 代码实现 抽象观察者 抽象主题类 具体观察者 具体主题类 测试类 优缺点 优点 缺点 结构 在观察者模式中有如下角色&#xff1a; Subject&#xff1a;抽象主题&#xff08;抽象被观察者&#xff09;&#xff0c;抽象主题角色把所有观察者对象保存在一个…

Mysql数据库用户操作

# Mysql数据库用户操作 ## 1.1创建用户 shell create user ‘nz’ identified by ‘123456’ # hzm&#xff1a;用户账号&#xff0c;123456&#xff1a;密码 create user ‘nz’’%’ identified by ‘123456’ #所有ip都可用账号 create user ‘nz’’localhost’ identifi…

zabbix通过JMX监控tomcat运行情况

第三阶段基础 时 间&#xff1a;2023年7月20日 参加人&#xff1a;全班人员 内 容&#xff1a; zabbix通过JMX监控tomcat 目录 zabbix通过JMX监控tomcat 一、配置java网关 二、修改zabbix服务端配置文件 三、安装tomcat 四、Zabbix-web端配置 zabbix通过JMX监控tomc…

苹果11手机设置手机跟踪功能

苹果11手机设置手机跟踪功能&#xff0c;就算是手机丢了&#xff0c;也能通过查询手机定位在哪里。 第一步&#xff1a;点击Apple ID进入详情 第二步&#xff1a;点击“查找” 第三步&#xff1a; 第四步&#xff1a; 到了这步&#xff0c;就算是设置成功。 下面需要到官方查询…