跟踪地理围栏半径

时间:2015-02-18 06:53:52

标签: android locationlistener android-geofence

我已经为地理围栏创建了应用程序。

我实现了位置监听器,它向我发送当前的Lat和Long。

我有Lat Long数组,我从这个数组中创建了Geofence。

我想检查当前纬度是否在我的地理围栏区域内?

地理围栏代码: -

private void createGeofence(double latitude, double longitude, int radius,
            String geofenceType, String title) {

        Marker stopMarker = googleMap.addMarker(new MarkerOptions()
                .draggable(true)
                .position(new LatLng(latitude, longitude))
                .title(title)
                );

        googleMap.addCircle(new CircleOptions()
                .center(new LatLng(latitude, longitude)).radius(radius)
                .fillColor(Color.parseColor("#B2A9F6")));
    }
来自听众的Lat Long: -

@Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub


        Lat=location.getLatitude();
        Lng=location.getLongitude();    

        Geocoder geocoder;
        List<Address> addresses;
        geocoder = new Geocoder(this, Locale.getDefault());
        try {

             addresses = geocoder.getFromLocation(Lat, Lng, 1);
             address = addresses.get(0).getAddressLine(0);
             city = addresses.get(0).getAddressLine(1);
             country = addresses.get(0).getAddressLine(2);


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



        System.out.println("Lat Long is "+ Lat + " " + Lng);

    }

请为此提供帮助。

1 个答案:

答案 0 :(得分:1)

你可以使用harvesine公式:

    public static final double R = 6372.8; // In kilometers

    public static double haversine(double lat1, double lon1, double lat2, double lon2) {
      double dLat = Math.toRadians(lat2 - lat1);
      double dLon = Math.toRadians(lon2 - lon1);
      lat1 = Math.toRadians(lat1);
      lat2 = Math.toRadians(lat2);

      double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
      double c = 2 * Math.asin(Math.sqrt(a));
      return R * c;
    }

这将为您提供两个位置之间的距离。之后,您可以将该距离与地理围栏区域半径进行比较,以了解是否在该区域内。

注意:如果半径为米,则此距离将以千米为单位,然后将半径方法结果乘以1000,以便将其转换为米。

Reference