3

私はジオコーダー、gcd、および逆ジオコーディングするこのコード行を持っています

List<Address> addresses = gcd.getFromLocation(latitude, longitude, 1);
                    if(addresses != null) {
                        Address returnedAddress = addresses.get(0);

                        for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
                       strReturnedAddress = (returnedAddress.getAddressLine(i)).toString();

strReturnedAddress は次のようなものを返します

10453 セントラル ブロンクス、ニューヨーク シティ、NY

ニューヨーク市という都市名だけが必要です。

ジオコードの出力は変更される可能性があるため、文字列の一部を削除するのは非常に困難です。必要なのは、都市を特定するためのジオコードだけです。

http://developer.android.com/reference/android/location/Geocoder.htmlを確認しましたが、答えが見つかりませんでした。

4

3 に答える 3

5

自分で解決策を見つけたのは素晴らしいことです。

ただし、以下のアプローチを使用することをお勧めします。これは、アドレス リストを反復処理する代わりに Location API を利用するため、より単純です。

Geocoder geocoder;
List<Address> addresses;
geocoder = new Geocoder(this, Locale.getDefault());
addresses = geocoder.getFromLocation(latitude, longitude, 1);

String address = addresses.get(0).getAddressLine(0);
String city = addresses.get(0).getAddressLine(1);
String country = addresses.get(0).getAddressLine(2);

このコードは別のユーザーによって提供されていますが、私はこの正確なアプローチを自分で実装し、有用であることがわかりました.

お役に立てれば。

于 2013-07-10T21:27:39.873 に答える
1

私は自分で解決策を見つけたので、困っている他の人が将来参照できるように共有しています.

住所が定義されたら、必要な作業は都市名の address.getLocality() だけです。

この例では、

Address returnedAddress = addresses.get(0);
for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
                       strReturnedAddress = (returnedAddress.getLocality().toString();
于 2013-07-10T21:19:04.260 に答える
0
public class Locationfinder extends Activity implements LocationListener{   
     private TextView latituteField,longitudeField, Address;
      private LocationManager locationManager;
      private String provider;
    List<Address> mAddresses;
       double lat,lng;
       public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            latituteField = (TextView) findViewById(R.id.TextView02);
            longitudeField = (TextView) findViewById(R.id.TextView04);
            Address=(TextView)findViewById(R.id.TextView03);

            locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

            Criteria criteria = new Criteria();
            provider = locationManager.getBestProvider(criteria, false);
            Location location = locationManager.getLastKnownLocation(provider);

            // Initialize the location fields
            if (location != null) {

              onLocationChanged(location);
            } else {
              latituteField.setText("Location not available");
              longitudeField.setText("Location not available");
            }
       }

       protected void onResume() {
            super.onResume();
            locationManager.requestLocationUpdates(provider, 400, 1, this);
          }

//         Remove the locationlistener updates when Activity is paused 
          @Override
          protected void onPause() {
            super.onPause();
            locationManager.removeUpdates(this);
          }

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub

        lat = (double) (location.getLatitude());
         lng = (double) (location.getLongitude());
        System.out.println("lat1: " + lat +"    " +"lng1" +lng);
        latituteField.setText(String.valueOf(lat));
        longitudeField.setText(String.valueOf(lng));

       Geocoder gcd = new Geocoder(getApplicationContext(),
               Locale.getDefault());
       try {


                 mAddresses = gcd.getFromLocation(lat,lng, 1);

           String address = mAddresses.get(0).getAddressLine(0);
              String city = mAddresses.get(0).getAddressLine(1);
              String country = mAddresses.get(0).getAddressLine(2);

              Address.setText("Address:- " + address + "city :" +city + "country : "+ country);


       } catch (IOException e) {
         e.printStackTrace();
         latituteField.setText("Location not available");
          longitudeField.setText("Location not available");
       }
    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "Disable GPS " + provider,
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "Enable GPS " + provider,
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

}
于 2013-09-25T10:27:02.863 に答える