如何比较地理围栏中的纬度和经度值?

问题描述 投票:1回答:2

我在开放层中编写了地理围栏代码。地理围栏必须在网站上完成。我可以在网站上创建一个地理围栏。我也知道地理围栏中心的纬度和经度。但是我没有那个圈子上任何其他点的纬度和经度。

现在我有一个Android应用程序,它是用户。每当应用程序位于地理围栏区域时,它应检查并显示“我在地理围栏区域”的消息。那么我应该如何比较用户当前位置和我应该比较什么。我正在使用PostgreSQL数据库。我希望如果用户在地理围栏区域,它应该显示“我在地理围栏区域”

javascript java android openlayers geofencing
2个回答
0
投票

最初你会有两个LatLng点。首先是Geofencing中心,第二个是用户当前位置。在您想要检查用户是否在地理围栏区域之前,您需要确定从半径的地理围栏中心允许的公里数,以检测用户是否已进入范围。

然后将这两点比较为:

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 KM范围内,你会允许他。所以只需调用CalculationByDistance( - , - )就可以了,它会告诉你用户附近没有地理位置。


0
投票

请使用一些算法来计算您是否在边界内。边界可以是任何形状,例如多边形。

请检查像多边形点(PIP)这样的算法,以确定您是否在地理围栏内。

© www.soinside.com 2019 - 2024. All rights reserved.