从Android中的地址/位置对象获取街道名称

时间:2010-11-23 14:12:21

标签: android google-maps geolocation

我正在尝试获取当前位置的街道名称,但我似乎无法得到它。

我使用此方法检索地址:

public Address getAddressForLocation(Context context, Location location) throws IOException {

        if (location == null) {
            return null;
        }
        double latitude = location.getLatitude();
        double longitude = location.getLongitude();
        int maxResults = 1;

        Geocoder gc = new Geocoder(context, Locale.getDefault());
        List<Address> addresses = gc.getFromLocation(latitude, longitude, maxResults);

        if (addresses.size() == 1) {
            return addresses.get(0);
        } else {
            return null;
        }
    }

然后我可以做类似的事情。 address.getLocality()address.getPostalCode()

但我想要的是街道名称。就像在“Potterstreet 12”中一样。当我打印AddressLine(0)和AddressLine(1)时,我只获得邮政编码,城市和国家。

如何检索我目前所处位置的街道名称?

5 个答案:

答案 0 :(得分:14)

您是否尝试过使用getAddressLine? 有关此方法的详细信息,请参阅here

这样的事情应该做(未经测试):

for (int i = 0; i < addresses.getMaxAddressLineIndex(); i++) {
 Log.d("=Adress=",addresses.getAddressLine(i));
}

答案 1 :(得分:9)

在你的代码中尝试这样的事情

String cityName=null;              
Geocoder gcd = new Geocoder(getBaseContext(),Locale.getDefault());               
List<Address>  addresses;    
try {    
   addresses = gcd.getFromLocation(location.getLatitude(), location  
                   .getLongitude(), 1);    
   if (addresses.size() > 0) 
        StreetName=addresses.get(0).getThoroughfare();
        String s = longitude+"\n"+latitude +  
        "\n\nMy Currrent Street is: "+StreetName; 
         Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();

它对我有用:-)祝你好运; - )

答案 2 :(得分:1)

getFromLocation也不适合我。您可以采取几个步骤。

1.首先进入gradle并确保使用最新的游戏服务库。

不要说明,我没有结果的原因是因为我的地址中有很多信息。当我删除邮政编码时,我每次都得到结果。

3.尝试在线api:  http://maps.google.com/maps/api/geocode/json?address=192%20McEwan%20Dr%20E,%20Caledon,%20ON&sensor=false 只需用你的地址替换那里的地址。

祝你好运

答案 3 :(得分:0)

我有一个非常类似的问题,但是使用国家名称,这是我最终使用的功能:

function getCountry(results) {
    var geocoderAddressComponent,addressComponentTypes,address;
    for (var i in results) {
      geocoderAddressComponent = results[i].address_components;
      for (var j in geocoderAddressComponent) {
        address = geocoderAddressComponent[j];
        addressComponentTypes = geocoderAddressComponent[j].types;
        for (var k in addressComponentTypes) {
          if (addressComponentTypes[k] == 'country') {
            return address.long_name;
          }
        }
      }
    }
   return 'Unknown';
 }

你应该能够适应这一点,以便毫不费力地获得街道名称。

Inspired by this answer

答案 4 :(得分:-3)

Geocoder gcd = new Geocoder(this, Locale.getDefault());
List<Address> addresses = 
                gcd.getFromLocation(currentLatitude, currentLongitude,100);
if (addresses.size() > 0 && addresses != null) {
                StringBuilder result = new StringBuilder();
                myaddress.setText(addresses.get(0).getFeatureName()+"-"+addresses.get(0).getLocality()+"-"+addresses.get(0).getAdminArea()+"-"+addresses.get(0).getCountryName());
}
  • getfeaturename()返回Streetname
  • getlocality()返回城市
  • getadminarea()返回州

那就是全部..!