百度地图和高德地图支持的地理围栏都是一个圆,通过指定一个中心和半径来定义地理围栏。但是很多时候,我们需要一个多边形,而不是圆形。比如一个园区,它肯定可以用多边形表示,但圆形可能误差就太大了。
先看看效果图,首先我们选择一些顶点来定义一个多边形。下面是选定五个顶点后的效果:
第六个顶点选定为起点。这样就确定了一个多边形区域。
这里通过点击模拟一个GPS经纬度。首先点击外围,通过判断经纬度是不是在多边形内确定是否已经进入围栏。首先模拟没有进入围栏。
再模拟进入围栏。
构建一个多边形地理围栏,需要注意两点:
在构建封闭多边形时,最后的顶点和起点需要容忍一定的误差。因为在地图上,几乎不可能点击到同一个经纬度两次。一个解决办法,就是将以起点为中心,半径为N(例如50)像素内的点击看做终点。
- 如何判断一个点在多边形内。经典的算法是射线法。射线法的原理很简单,如果在多边形内,那么由点出发的射线一定会与多边形有奇数个重合点。经典的实现参考http://alienryderflex.com/polygon/。