1

我需要获取当前 gps 位置的最近位置的位置或地址以显示在谷歌地图上。目前我能够在地图上显示一些位置,但这些位置是硬编码的,我需要在绘制地图之前获取所有最近的位置。

有什么建议吗?

4

2 回答 2

1

首先获取您当前的位置,然后获取您拥有的每个位置的纬度和经度,并使用 Location 类的distanceToLattitude & Longitude方法找出每个地方与当前位置的距离,然后找出与列表的最小距离。

于 2013-05-03T06:01:36.243 回答
1

这是方法,您如何实现它。

        LocationManager locationManager = (LocationManager) context
                    .getSystemService(Context.LOCATION_SERVICE);
        LocationListener locationListener = new LocationListener() {
            @Override
        public void onStatusChanged(String provider, int status,
                Bundle extras) {
        }

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onProviderDisabled(String provider) {
        }

        @Override
        public void onLocationChanged(Location location) {
            Double l1 = location.getLatitude();
            Double l2 = location.getLongitude();
            address = GetAddress(l1, l2);               
        }
    };
    locationManager.requestLocationUpdates(
            LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);  

private String GetAddress(Double lat, Double lon) {
    Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);
    String ret = "";
    List<Address> addresses = null;
    try {
        addresses = geocoder.getFromLocation(lat, lon, 1);
        if (!addresses.equals(null)) {
            Address returnedAddress = addresses.get(0);
            StringBuilder strReturnedAddress = new StringBuilder("\n");
            for (int i = 0; i < returnedAddress.getMaxAddressLineIndex(); i++) {
                strReturnedAddress
                        .append(returnedAddress.getAddressLine(i)).append(
                                "\n");
            }
            ret = "Around: " + strReturnedAddress.toString();
        } else {
            ret = "No Address returned!";
        }
    } catch (IOException e) {
        e.printStackTrace();
        ret = "Location: https://maps.google.co.in/maps?hl=en&q=" + lat
                + "," + lon;
    } catch (NullPointerException e) {
        e.printStackTrace();
        ret = lat + "," + lon;
    }
    return ret;
}

并且还在 AndroidManifest 中添加这些权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
于 2013-05-03T06:18:16.007 回答