判断点是否在多边形范围内(大数据量测试可用,准确度和效率都高)

1前言

网络上面有不少判断点在多边形范围内的算法和文章,但是我实际用几个G GIS测试数据运行发现其算法都存在一点问题,得出的点不是准确的,本文给出了一种精度高的算法,仅供大家学习!

2正文

本文通过3207个点来进行测试点是否在多边形范围内的效率,为了提高判断的准确性所有的点都是使用gis系统中地理经纬度坐标。算法的C++测试源码也会在本文中提供。
在这里插入图片描述

                                在arcgis中使用gp工具得到的结果示意图

程序中范围点用bound数组表示,从上图中绿色部分获得,boundx[]部分为x坐标,boundy[]部分为y坐标

//bound数组
	class JuidePointinside
{
   
public:
	bool OK = false;
	//在构造函数中先判断pt点是否在范围边界内,如果不在就没有必要进行后续的详细判断
	JuidePointinside(Point pt) 
	{
   
		_pt = pt;
		if (pt.x < xmin || pt.x > xmax || pt.y < ymin || pt.y > ymax)
		{
   
			OK = false;
		}
		else
		{
   
			OK = true;
		}
	};
	//检测点q是否在pr直线上
	bool onSegment(Point p, Point q, Point r)
	{
   
		if (q.x <= max(p.x, r.x) && q.x 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值