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