检查用户是否在GPS附近的路线检查点

Rod*_*tro 5 gps routes geolocation

情况如下:

我有一个用户将运行的预定GPS路线.该路线有一些检查点,用户应该通过所有这些检查站(将它们视为赛车游戏检查点,以防止用户采取快捷方式).我需要确保用户通过所有检查点.我想确定一个将在检查点半径内考虑的区域,但我不希望它只是一个径向区域,它应该是一个考虑路径形式的区域.不明白吗?我也没有.看看这张画得很糟糕的图片,以便更好地理解它: 路线示例

黑线表示预定路径,蓝色球表示检查点,蓝色多边形表示所需区域.绿线是一个更精确的用户,红线是一个不太准确的用户(一个醉酒的家伙可能会驾驶?).两条线都应该在多边形内部,但是完全跳过路线的用户不应该.

我已经在这里看到一个函数来检查用户是否在这样的多边形内,但我需要知道如何计算多边形.

有什么建议?

编辑:

我正在考虑使用简单的distanceTo()函数来绘制一个假想的圆圈并检查用户是否在那里.这很好,因为实现和理解非常简单,而且很糟糕,因为为了确保最敏感的用户在检查点通过,我需要一个很大的半径,使正确的用户比预期更快地进入检查点区域.

只是让你们更好地了解情况,这是一个应该用于交通(汽车或公共汽车)的应用程序,检查点应该是划分你的路线的地标或地点,例如,交通堵塞开始的地方或停止.

MrZ*_*der 2

假设您知道检查点的地理位置,您只需检查两者之间的距离即可。

使用distanceTo函数并设置用户需要距检查点多少米才能继续前进的阈值。

编辑

由于您想避免 distanceTo,所以这是我不久前编写的一个小函数,用于检查一个点是否在多边形中:

public boolean PIP(Point point, List<Point> polygon){
    boolean nodepolarity=false;
    int sides = polygon.size();
    int j = sides -1;
    for(int i=0;i<sides;i++){
        if((polygon.get(i).y<point.y && polygon.get(j).y>=point.y) ||(polygon.get(j).y<point.y && polygon.get(i).y>=point.y)){
            if (polygon.get(i).x+(point.y-polygon.get(i).y)/(polygon.get(j).y-polygon.get(i).y)*(polygon.get(j).x-polygon.get(i).x)<point.x) {
                nodepolarity=!nodepolarity; 
            }
        }
    j=i;
    }
    return nodepolarity; //FALSE=OUTSIDE, TRUE=INSIDE
}
Run Code Online (Sandbox Code Playgroud)

List<Point> polygon是构成多边形的点的列表。

这使用光线投射算法来确定光线穿过多边形的次数。

您需要做的就是在您需要的区域周围创建“边界”,并使用toPixels方法将 GeoPoints 转换为像素。

将这些点存储到点列表 <> 中,您应该已准备就绪。