我已经在开放层中编写了地理围栏代码。地理围栏必须在网站中完成。我可以在网站上创建地理围栏。我也知道地理围栏中心的纬度和经度。但是我在那个圆上没有任何其他点的经度和纬度。
现在我有一个Android应用程序,即用户。每当应用程序位于“地理保护区域”中时,它都应检查并显示一条消息“我在地理保护区域中”。因此,我应该如何比较用户当前的位置以及应该与我比较什么。 我正在使用PostgreSQL数据库。 我希望如果用户在地理围栏区域中,则应显示“我在地理围栏区域中”
答案 0 :(得分:0)
最初,您将有两个LatLng点。首先是地理围栏中心,其次是用户当前位置。 在要检查用户是否在地理围栏区域之前,必须确定从地理围栏中心的半径允许允许多少公里来检测该用户是否在范围内。
然后将两个点都比较为:
public int CalculationByDistance(LatLng StartP, LatLng EndP) {
int Radius = 6371;// radius of earth in Km
double lat1 = StartP.latitude;
double lat2 = EndP.latitude;
double lon1 = StartP.longitude;
double lon2 = EndP.longitude;
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+ Math.cos(Math.toRadians(lat1))
* Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2)
* Math.sin(dLon / 2);
double c = 2 * Math.asin(Math.sqrt(a));
double valueResult = Radius * c;
double km = valueResult / 1;
DecimalFormat newFormat = new DecimalFormat("####");
int kmInDec = Integer.valueOf(newFormat.format(km));
return kmInDec;
}
假设用户仅在距Geofence 1公里范围内,则允许该用户。 因此,只需在CalculationByDistance(-,-)上方调用它,它就会告诉您用户位于非地理围栏附近。
答案 1 :(得分:0)
请使用一些算法来计算您是否在边界内。 边界可以是任何形状,例如多边形。
请检查多边形点(PIP)之类的算法,以了解您是否在地理围栏内。