圆 最小外包矩形_GIS中最小外包矩形(MBR) | 学步园

最小外包矩形(MBR)在GIS中用于加速图形包含判断、空间索引和查询。本文介绍了MBR的重要性和使用场景,并提供了一个稳定版的C++实现,包括构造函数、相交判断、面积计算等功能,有助于提高空间操作效率。
摘要由CSDN通过智能技术生成

在GIS中,我们会经常碰到最小外包矩形,MBR。最小外包矩形就是包围图元,并且平行于X轴和Y轴的最小外界矩形。到底这个矩形有什么用,设想一下,一个几何体有很多顶点,我们要判断一个图形是否包含另一个图形,就要一个个点点判断,这样为大大延长处理的时间。那如果是针对矩形的判断将会见的很多。又比如在空间索引中,作为几何体图形的近似可以加快索引处理的时间。在空间查询中,例如要查找离我当前位置周围最近的几个餐厅。如果没有做空间所以,当然也行,暴力法一个个测试,直到找出所有符合条件的餐厅。有了这个MBR作为索引数据的近似,那么查询的速度也会加快,只不过在创建索引的时候要花一些时间而已。

既然这个MBR如此重要,本人在之前的代码上不断改进,终于拿出一个比较稳定的版本的最小外包矩形的代码。在此奉献给大家,希望各位也能提出代码中的问题。

头文件如下:

#include

#include

using namespace std;

class GEOMETRY_API GeoEnvelope

{

public:

//默认构造函数

GeoEnvelope();

//带参数的构造函数

GeoEnvelope(double minX,double maxX,double minY,double maxY);

//拷贝构造函数

GeoEnvelope(const GeoEnvelope& envelope);

//用两个坐标点初始化

GeoEnvelope(GeoCoordinate *coord1,GeoCoordinate *coord2);

virtual ~GeoEnvelope(void);

//判断两个最小外包矩形是否相交(计算出在内还在外)

int InterSects(const GeoEnvelope & otherEvp);

// 判断矩形是否为空

bool IsNull(void) const;

// 获取最小外包矩形的宽度

double GetWidth(void);

// 获取最小外界矩形的高度

double GetHeight(void);

// 获得矩形的中心点坐标

GeoCoordinate * Center() const;

//测试是否包含另一个MBR

bool Contains(const GeoEnvelope &env);

//判断一个点是否在该矩形中

bool Contains(const GeoCoordinate &pt);

//判断一个点是否在矩形内

bool IsPointInRect(double x,double y);

//计算两个矩形相交的部分

GeoEnvelope* Intersection(const GeoEnvelope& env);

//计算到另一个MBR的距离

double DistanceTo(GeoEnvelope &env);

//计算面积

double Area();

//计算周长

double Perimeter();

//是否包含这个点

bool Contains(double x, double y) const;

//静态函数

//判断p1,p2构成的矩形和q1,q2构成的矩形是否相交

static bool Intersects(G

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值