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

黑线表示预定路径,蓝色球表示检查点,蓝色多边形表示所需区域.绿线是一个更精确的用户,红线是一个不太准确的用户(一个醉酒的家伙可能会驾驶?).两条线都应该在多边形内部,但是完全跳过路线的用户不应该.
我已经在这里看到一个函数来检查用户是否在这样的多边形内,但我需要知道如何计算多边形.
有什么建议?
编辑:
我正在考虑使用简单的distanceTo()函数来绘制一个假想的圆圈并检查用户是否在那里.这很好,因为实现和理解非常简单,而且很糟糕,因为为了确保最敏感的用户在检查点通过,我需要一个很大的半径,使正确的用户比预期更快地进入检查点区域.
只是让你们更好地了解情况,这是一个应该用于交通(汽车或公共汽车)的应用程序,检查点应该是划分你的路线的地标或地点,例如,交通堵塞开始的地方或停止.
假设您知道检查点的地理位置,您只需检查两者之间的距离即可。
使用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 转换为像素。
将这些点存储到点列表 <> 中,您应该已准备就绪。
| 归档时间: |
|
| 查看次数: |
1737 次 |
| 最近记录: |