一、地理围栏算法简介
地理围栏(Geo-fencing)是LBS的一种典型应用,就是用一个虚拟的栅栏围出一个虚拟地理边界。地理围栏更侧重于对区域边界的界定,不再是以某点为圆心向外等距离画圆,而是准确勾勒出小区、写字楼等特定坐标的实际形状、区域及面积。
1.1 地理围栏判断算法
围栏即一堆位置点,组成一个多边形。问题就可以抽象为判断一个点是否属于一个多边形区域内部。
目前最常见,比较高效的方法是射线法。主要是循环多边形的每条边进行求交运算,大部分边通过简单坐标比对直接排除。
1.2 射线法实现
射线法其实就是从判断点开始,向左边或者右边水平的做一条射线,判断该射线穿过多边形的次数,如果为奇数则认为该点在区域内部,如果为偶数则认为该点在区域外部。
实际上,点不需要与每一条边进行交点计算,一些特殊的边可以直接排除掉。
- 边与射线平行
- 边再射线的上边或下边
- 边在射线左边(右射线场景)
- 边的端点与射线相交
城市边界一般存储为geojson格式,关于geojson的介绍可以参考这篇文章: