【问题标题】:How to compare latitude and longitude values in geofencing?如何比较地理围栏中的纬度和经度值?
【发布时间】:2019-04-04 04:33:31
【问题描述】:

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

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

【问题讨论】:

    标签: javascript java android openlayers geofencing


    【解决方案1】:

    最初您将有两个 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;
    }
    

    假设如果用户仅在距离地理围栏 1 公里范围内,您将允许他。 因此,只需在 CalculationByDistance(-,-) 上方调用,它就会告诉您用户是否靠近地理围栏。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我正在使用圆形地理围栏。我在开放层中编码。那我该怎么办?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 2014-01-18
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      相关资源
      最近更新 更多