从获取的坐标中获取位置名称

20

我的现状:目前我的应用程序只告诉我当前位置的坐标。

我的需求:从通过GPS获取的坐标中获取位置名称,以便我能知道自己所在的确切位置。(位置的名称)


1
你是否在寻找如何根据给定的纬度和经度获取位置名称的方法? - Samuel
请查看如何编程谷歌安卓 - Adil Soomro
1
你的问题与我几个月前发布的问题相同。请查看此链接https://dev59.com/0G025IYBdhLWcg3wKSmP或查看我的下面的答案... - Krishna
@Krishna 是的,我看到了,但是对你的问题给出的答案不是那么简单,所以我决定发表我的意见。 - Noman
@Noman.. 我们几乎都说了同样的话。 Google地图API工具包中的Geocoder类提供位置详细信息,例如地点名称、地址等。 - Samuel
显示剩余2条评论
3个回答

34

这里是获取经纬度并获取地址的完整代码:

LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
String provider = locationManager.getBestProvider(new Criteria(), true);

Location locations = locationManager.getLastKnownLocation(provider);
List<String>  providerList = locationManager.getAllProviders();
if(null!=locations && null!=providerList && providerList.size()>0){                 
double longitude = locations.getLongitude();
double latitude = locations.getLatitude();
Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());                 
try {
    List<Address> listAddresses = geocoder.getFromLocation(latitude, longitude, 1);
    if(null!=listAddresses&&listAddresses.size()>0){
        String _Location = listAddresses.get(0).getAddressLine(0);
    }
} catch (IOException e) {
    e.printStackTrace();
}

}

2
有时候这种反向地理编码技术无法提供任何地址。那么,每当我需要时如何每次获取经纬度的地址? - Atul Bhardwaj
1
是的,有时它不会返回地址。为此,您可以实现备份机制,例如当您无法获取地址时再次请求以获取地址,或者您可以使用Google API来获取地址。 - Vineet Shukla
请使用以下权限:<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> - Adnan Abdollah Zaki
我一直得到位置为空! - mumair

7

你可以使用位于android.location.Geocoder包中的GeoCoderJavaDocs提供了完整的解释。以下是可能适用的示例。

 List<Address> list = geoCoder.getFromLocation(location
                .getLatitude(), location.getLongitude(), 1);
        if (list != null & list.size() > 0) {
            Address address = list.get(0);
            result = address.getLocality();
            return result;
< p > result将返回位置的名称。

结果将返回位置名称。

6

在这里,我只需要传入纬度和经度到这个函数中,然后你就可以得到与这个纬度和经度相关的所有信息。

public void getAddress(double lat, double lng) {
    Geocoder geocoder = new Geocoder(HomeActivity.mContext, Locale.getDefault());
    try {
        List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
        Address obj = addresses.get(0);
        String add = obj.getAddressLine(0);
        GUIStatics.currentAddress = obj.getSubAdminArea() + ","
                + obj.getAdminArea();
        GUIStatics.latitude = obj.getLatitude();
        GUIStatics.longitude = obj.getLongitude();
        GUIStatics.currentCity= obj.getSubAdminArea();
        GUIStatics.currentState= obj.getAdminArea();
        add = add + "\n" + obj.getCountryName();
        add = add + "\n" + obj.getCountryCode();
        add = add + "\n" + obj.getAdminArea();
        add = add + "\n" + obj.getPostalCode();
        add = add + "\n" + obj.getSubAdminArea();
        add = add + "\n" + obj.getLocality();
        add = add + "\n" + obj.getSubThoroughfare();

        Log.v("IGA", "Address" + add);
        // Toast.makeText(this, "Address=>" + add,
        // Toast.LENGTH_SHORT).show();

        // TennisAppActivity.showDialog(add);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
    }
}

我希望你能找到答案的解决方案。


1
我该如何获取我的位置的确切位置?它只提供城市值,我想要城市内的位置名称。 - Apoorv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接