【问题标题】:Tracking in Geofence radious地理围栏半径跟踪
【发布时间】:2015-02-18 06:53:51
【问题描述】:

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

我实现了位置监听器,它向我发送当前的纬度和经度。

我有 Lat Long 数组,我从这个数组创建了地理围栏。

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

地理围栏代码:-

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")));
    }

Listener 的 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);

    }

请帮忙。

【问题讨论】:

    标签: android locationlistener android-geofence


    【解决方案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;
        }
    

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

    注意:如果您的半径是米,那么这个距离将以公里为单位,然后只需将 hasrsine 方法的结果乘以 1000 即可将其转换为米。

    Reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 2018-10-22
      相关资源
      最近更新 更多