gdal获取最小外接矩形

news2024/12/29 9:36:32

        地理信息系统中常用最小外接矩形(MBR)表示一个地理要素的大致位置,地理系统中的许多操作,例如空间查询,空间检索,都需要用最小外接矩形建立RTree,以提升运算速度。

        gdal中使用OGREnvelope定义最小外接矩阵,该类通过MinX,MaxX,MinY,MaxY四个成员变量表示矩阵的最小X坐标,最大X坐标,最小Y坐标,最大Y坐标,其形成的外接矩形为{(MinX, MinY), (MinX, MaxY), (MaxX, MaxY), (MaxX, MinY)}。

        gdal获取最小外接矩形的接口为void OGRGeometry::getEnvelope( OGREnvelope * psEnvelope )。在gdal中,几何图形都从OGRGeometry派生,所有几何图形都支持getEnvelope接口。

        下图是polyon,multipolygon的最小外接示意图(红色边框为最小外接矩阵):

        实现代码如下:

#include <gdal.h>
#include <ogrsf_frmts.h>
#include <ogr_geometry.h>
#include <cstdio>
#include <vector>

int main(int argc, char **argv)
{
    OGRPoint A(-5.76,4.35);
    OGRPoint B(-7.36,1.65);
    OGRPoint C(-3.6,-0.47);
    OGRPoint D(1.68,1.65);
    OGRPoint E(-3.06,0.71);
    OGRPoint F(-2.74,4.31);
    std::vector<OGRPoint> points1{A, B, C, D, E, F, A};
    OGRLinearRing ring1;
    for (auto &point : points1) {
        ring1.addPoint(&point);
    }
    OGRPolygon poly1;
    poly1.addRing(&ring1);
    
    OGREnvelope en;
    poly1.getEnvelope(&en);
    printf("%f, %f, %f, %f \n", en.MinX, en.MinY, en.MaxX, en.MaxY);
    
    printf("P: %f, %f\n", en.MinX, en.MinY);
    printf("Q: %f, %f\n", en.MinX, en.MaxY);
    printf("R: %f, %f\n", en.MaxX, en.MaxY);
    printf("S: %f, %f\n", en.MaxX, en.MinY);
    
    
    OGRPoint G(-5.74264,-4.92212);
    OGRPoint H(-8.0497,-7.86299);
    OGRPoint I(-3.08064,-10.44894);
    OGRPoint J(2.6997,-7.48271);
    OGRPoint K(0.36729,-5.91086);
    
    OGRPoint L(-4.09473,-6.95031);
    OGRPoint M(-3.48628,-8.11652);
    OGRPoint N(-0.5454,-7.9137);
    OGRPoint O(-1.6609,-6.26579);
    
    std::vector<OGRPoint> points2{G, H, I, J, K, G};
    OGRLinearRing ring2;
    for (auto &point : points2) {
        ring2.addPoint(&point);
    }
    OGRPolygon poly2;
    poly2.addRing(&ring2);
    
    std::vector<OGRPoint> points3{L, M, N, O, L};
    OGRLinearRing ring3;
    for (auto &point : points3) {
        ring3.addPoint(&point);
    }
    OGRPolygon poly3;
    poly3.addRing(&ring3);
    
    OGRMultiPolygon mploy;
    mploy.addGeometry(&poly2);
    mploy.addGeometry(&poly3);
    mploy.getEnvelope(&en);
    printf("%f, %f, %f, %f \n", en.MinX, en.MinY, en.MaxX, en.MaxY);
    
    printf("T: %f, %f\n", en.MinX, en.MinY);
    printf("U: %f, %f\n", en.MinX, en.MaxY);
    printf("V: %f, %f\n", en.MaxX, en.MaxY);
    printf("W: %f, %f\n", en.MaxX, en.MinY);
    
    return 0;
}

        对于点,MinX=MaxX=x,MinY=MaxY=y,所以,对于OGRPoint,调用getEnvelope,返回值为{x, y, x, y}(对应{Minx, MinY, MaxX, MaxY})。

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

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

相关文章

Linux Debian12系统gnome桌面环境默认提供截屏截图工具gnome-screenshot

一、简介&#xff1a; 在Debian12中系统gnome桌面环境默认提供一个截图捕获工具screenshot,可以自定义区域截图、屏幕截图、窗口截图和录制视频&#xff0c;截图默认保存在“~/图片/截图”路径下。 可以在应用程序中搜索screenshot,如下图&#xff1a; 也可以在桌面右上角找到…

使用JGit拉取代码提示未授权not authorized

原因&#xff1a;2021年8月13日后不支持密码登录&#xff0c;需要使用token验证 调用时候需要先去git仓库创建个人令牌 需要在安全中心创建个人token&#xff0c;使用token名称作为账号&#xff0c;使用token作为密码。 另&#xff1a; Github克隆仓库的三种方式对比&#xff…

数据结构实验2:队列的应用

目录 一、实验目的 二、实验原理 1.1 队列的基本操作 1.1.1 队列的定义 1.1.2 队列的初始化 1.1.3 入队操作 1.1.4 出队操作 1.1.5 检查队列是否为空 1.1.6 返回队列的长度 2.1队列的运用 三、实验内容 问题描述 代码 截图 分析 一、实验目的 1、理解并掌握队列…

基于Python爬虫的B站弹幕可视化

介绍 这是一个基于Python的B站弹幕可视化项目&#xff0c;主要使用了python django、requests、jieba等库。该项目实现了以下功能&#xff1a; 1. 爬取Bilibili视频弹幕数据&#xff1a;通过爬虫获取视频的标题、视频总时长、封面图&#xff0c;视频地址以及所有弹幕数据等。 …

C#.Net学习笔记——CLR核心机制

一、CLR基本介绍 &#xff08;1&#xff09;C(Common) L&#xff08;Language&#xff09; R&#xff08;Runtime&#xff09; IL的运行环境 &#xff08;2&#xff09;从下图可以看到&#xff0c;我们的计算机会先把我们写的语言&#xff0c;编写成IL语言&#xff0c;再给计…

伺服电机:伺服电机的控制模式

一、伺服电机基本的控制模式 在AC伺服系统中&#xff0c;对编码器所发出的脉冲信号或伺服电机的电流进行检测&#xff0c;将检测结果反馈给伺服驱动器&#xff0c;伺服驱动器根据检测结果和相应的控制指令&#xff0c;对伺服电机进行相应的控制&#xff0c;根据指令的不同&…

LeetCode(704)二分查找⭐

给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释: 9 出现…

html+css 文本样式常用属性集合和总结

文本样式 text-transform transform 的意思是使变形 值描述none默认。定义带有小写字母和大写字母的标准的文本capitalize文本中的每个单词以大写字母开头uppercase定义仅有大写字母lowercase定义无大写字母&#xff0c;仅有小写字母inherit规定应该从父元素继承 text-trans…

邮政快递单号查询入口,对快递单号进行提前签收分析

一款优秀的快递单号筛选软件能够给你的工作和生活带来极大的便利。通过合理选择和使用该软件&#xff0c;你将能够轻松管理、高效筛选快递单号&#xff0c;提升工作效率和生活品质。不妨试试我们的【快递批量查询高手】&#xff0c;让你的物流管理更加智能、便捷&#xff01; …

UDP 和 TCP 、HTTP、HTTPS、SOCKS5协议的不同之处及应用场景

UDP 和 TCP、HTTP、HTTPS、SOCKS5 协议的不同之处及应用场景&#xff1a; UDP (User Datagram Protocol)&#xff1a; 不同之处&#xff1a;UDP 是无连接的&#xff0c;不保证数据包的顺序到达或完整性&#xff0c;也没有流量控制和拥塞控制机制。它尽可能快地将数据包从源主机…

Linux--好玩的进度条

前言 先来看看我们想要达到的进度条效果&#xff0c;具体代码会在文章最后面放出。 一、创建文件及Makefile 我们需要实现声明的定义的分离&#xff0c;因此创建如下三个文件。 process.h prcess.c main.c。 touch process.h process.c main.c 同时还需要创建Makefi…

钡铼技术推出注塑机OPC UA网关,助力注塑机行业转型升级

前言 “工欲善其事&#xff0c;必先利其器”&#xff0c;塑料行业也是一样&#xff0c;注塑机就是塑料行业最重要的“器”之一。 “ OPC UA 如果你的注塑应用支持OPC UA无疑会有广泛的适配性。 OPC UA作为工业4.0中一个重要的通信协议&#xff08;IEC 62541&#xff09;&am…

MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 当谈论MySQL高可用性解决方案时&#xff0c;从…

密码学(三)

文章目录 前言一、Software Attestation Overview二、Authenticated Key Agreement三、The Role of Software Measurement 前言 本文来自 Intel SGX Explained 请参考&#xff1a; 密码学&#xff08;一&#xff09; 密码学&#xff08;二&#xff09; 一、Software Attesta…

kubernetes Adminssion Webhook 准入控制器 (ImagePolicyWebhook)

开头语 写在前面&#xff1a;如有问题&#xff0c;以你为准&#xff0c; 目前24年应届生&#xff0c;各位大佬轻喷&#xff0c;部分资料与图片来自网络 介绍 原理 流程 Admission Webhook 准入控制器Vebhook是准入控制插件的一种&#xff0c;用于拦截所有向APISERVER发送的…

企业提升客户体验的实用技巧与策略

什么是客户体验&#xff1f;通俗点说&#xff0c;他是客户和企业在互动过程中收获的感受和印象。这个过程包括接触、预购、购买、使用、售后整个阶段。 联想到我们自己购买产品的过程&#xff0c;对一家店或者品牌的感受&#xff0c;绝不仅仅从产品的功能体验感和质量上获得的…

如何在Android Glide中结合使用CenterCrop和自定义圆角变换(图片部分圆角矩形)

如何在Android Glide中结合使用CenterCrop和自定义圆角变换&#xff08;图片部分圆角矩形&#xff09; 在Android开发中&#xff0c;使用Glide加载图片时&#xff0c;我们经常需要对图片进行特定的处理&#xff0c;比如裁剪和圆角变换&#xff0c;特别是一些设计稿&#xff0c;…

【51单片机】点亮第一个LED灯(含创建文件等基础操作)

51单片机现在不仅是电子信息专业学生的必修课&#xff0c;也是进入嵌入式领域的踏脚石。 本系列将会按照江科大的视频进行&#xff0c;也算是相当于一个笔记&#xff0c;进行巩固 实现第一个LED灯的点亮其实并不复杂&#xff0c;重要的是有一些准备工作比较繁琐&#xff0c;就…

关于“Python”的核心知识点整理大全63

目录 20.2.11 使用 Git 跟踪项目文件 1. 安装Git 2. 配置Git 3. 忽略文件 .gitignore 注意 4. 提交项目 20.2.12 推送到 Heroku 注意 20.2.13 在 Heroku 上建立数据库 20.2.14 改进 Heroku 部署 1. 在Heroku上创建超级用户 注意 注意 20.2.11 使用 Git 跟踪项目文件…

两种方式实现mysql截取年月日

select date_format(now(), %Y-%m-%d) select substring(now(), 1, 10)