web-dev-qa-db-ja.com

AndroidのAddress / Locationオブジェクトから通りの名前を取得する

現在地のストリート名を取得しようとしていますが、取得できないようです。

このメソッドを使用してアドレスを取得します。

_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)を印刷すると、郵便番号、都市、国のみが表示されます。

現在の位置のストリート名を取得するにはどうすればよいですか?

16
Galip

getAddressLineを使ってみましたか?この方法の詳細については こちら を参照してください

このようなことを行う必要があります(テストされていません):

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

あなたのコードでこのようなことを試してください

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();

それは私のために動作します:-)頑張ってください;-)

9
user2896152

getFromLocationも機能しませんでした。あなたが取ることができるいくつかのステップがあります。

1。まず最初にgradleに入り、最新のplay services libを使用していることを確認してください。

2。過剰に指定しないでください。結果が得られなかったのは、住所に多くの情報が必要だったからです。郵便番号を削除すると、毎回結果が出ました。

3。オンラインAPIを試してください: http://maps.google.com/maps/api/geocode/json?address=192%20McEwan%20Dr%20E,%20Caledon,%20ON&sensor=false 単にあなたと一緒にそこにアドレスします。

幸運を

1
mossman252

完全な住所(市+通り)がある場合は、

address.getAddressLine(0)

あなたは通りの名前と番号を見つけます。

1
Umberto

私は非常に似た問題を抱えていましたが、国名を使用すると、これは私が最終的に使用した関数です:

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';
 }

あなたはこれを適応させて、大騒ぎせずに通りの名前を出すことができるはずです。

この回答に触発された

0
jsims281