Как получить полный адрес от широты и долготы?
Я хочу получить следующие значения от широты и долготы в android
- Адрес
- Город / Состояние
- Zip
- Полный Адрес
Как этого добиться?
17 ответов:
Geocoder geocoder; List<Address> addresses; geocoder = new Geocoder(this, Locale.getDefault()); addresses = geocoder.getFromLocation(latitude, longitude, 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5 String address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() String city = addresses.get(0).getLocality(); String state = addresses.get(0).getAdminArea(); String country = addresses.get(0).getCountryName(); String postalCode = addresses.get(0).getPostalCode(); String knownName = addresses.get(0).getFeatureName(); // Only if available else return NULL
для получения дополнительной информации о доступных деталей, посмотри Android-Location-Address
попробуй это мой друг
private String getCompleteAddressString(double LATITUDE, double LONGITUDE) { String strAdd = ""; Geocoder geocoder = new Geocoder(this, Locale.getDefault()); try { List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1); if (addresses != null) { Address returnedAddress = addresses.get(0); StringBuilder strReturnedAddress = new StringBuilder(""); for (int i = 0; i <= returnedAddress.getMaxAddressLineIndex(); i++) { strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n"); } strAdd = strReturnedAddress.toString(); Log.w("My Current loction address", strReturnedAddress.toString()); } else { Log.w("My Current loction address", "No Address returned!"); } } catch (Exception e) { e.printStackTrace(); Log.w("My Current loction address", "Canont get Address!"); } return strAdd; }
есть последний трюк, чтобы получить адрес от Lat-Long (Гео-координаты). Вы можете просто нажать google-maps веб-сервис, передавая широту и долготу. Это просто веб-сервис GET-метода.
он вернет ответ JSON, который можно легко проанализировать, чтобы получить адрес. URL для этого:
http://maps.googleapis.com/maps/api/geocode/json?latlng=32,75&sensor=true
вы можете заменить 32,75 сширота,длинной.
города & страны не всегда попадают в адресную строку 1 и строку 2...
пример здесь
и
Geocoder geocoder = new Geocoder(context, Locale.getDefault()); List<Address> addresses = geocoder.getFromLocation(latitude,longitude, 1); String city = addresses.get(0).getLocality(); String state = addresses.get(0).getAdminArea(); String zip = addresses.get(0).getPostalCode(); String country = addresses.get(0).getCountryName();
в onCreate()..
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 0, this); Criteria criteria = new Criteria(); String bestProvider = locationManager.getBestProvider(criteria, true); Location location = locationManager.getLastKnownLocation(bestProvider); if (location == null) { Toast.makeText(getApplicationContext(), "GPS signal not found", 3000).show(); } if (location != null) { Log.e("locatin", "location--" + location); Log.e("latitude at beginning", "@@@@@@@@@@@@@@@" + location.getLatitude()); onLocationChanged(location); }
написать код в onLocationChanged ()
@Override public void onLocationChanged(Location location) { Geocoder geocoder; List<Address> addresses; geocoder = new Geocoder(this, Locale.getDefault()); latitude = location.getLatitude(); longitude = location.getLongitude(); Log.e("latitude", "latitude--" + latitude); try { Log.e("latitude", "inside latitude--" + latitude); addresses = geocoder.getFromLocation(latitude, longitude, 1); if (addresses != null && addresses.size() > 0) { String address = addresses.get(0).getAddressLine(0); String city = addresses.get(0).getLocality(); String state = addresses.get(0).getAdminArea(); String country = addresses.get(0).getCountryName(); String postalCode = addresses.get(0).getPostalCode(); String knownName = addresses.get(0).getFeatureName(); locationTxt.setText(address + " " + city + " " + country); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
вы ищете термин геокодирование.
короткий рассказ вам нужно сделать:
Geocoder geocoder = new Geocoder(this, Locale.getDefault()); List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
чтобы сделать больше, вы должны прочитать на Геокодере здесь.
просто используйте этот метод и передайте свой lat, long.
public static void getAddress(Context context, double LATITUDE, double LONGITUDE) { //Set Address try { Geocoder geocoder = new Geocoder(context, Locale.getDefault()); List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1); if (addresses != null && addresses.size() > 0) { String address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() String city = addresses.get(0).getLocality(); String state = addresses.get(0).getAdminArea(); String country = addresses.get(0).getCountryName(); String postalCode = addresses.get(0).getPostalCode(); String knownName = addresses.get(0).getFeatureName(); // Only if available else return NULL Log.d(TAG, "getAddress: address" + address); Log.d(TAG, "getAddress: city" + city); Log.d(TAG, "getAddress: state" + state); Log.d(TAG, "getAddress: postalCode" + postalCode); Log.d(TAG, "getAddress: knownName" + knownName); } } catch (IOException e) { e.printStackTrace(); } return; }
вы можете использовать следующий код, чтобы получить адрес.
import java.io.IOException; import java.util.List; import java.util.Locale; import android.app.AlertDialog; import android.app.Service; import android.content.Context; import android.content.DialogInterface; import java.io.IOException; import java.util.List; import java.util.Locale; import android.app.AlertDialog; import android.app.Service; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.location.Address; import android.location.Geocoder; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.os.IBinder; import android.provider.Settings; public class GPSService extends Service implements LocationListener { // saving the context for later use private final Context mContext; // if GPS is enabled boolean isGPSEnabled = false; // if Network is enabled boolean isNetworkEnabled = false; // if Location co-ordinates are available using GPS or Network public boolean isLocationAvailable = false; // Location and co-ordinates coordinates Location mLocation; double mLatitude; double mLongitude; // Minimum time fluctuation for next update (in milliseconds) private static final long TIME = 30000; // Minimum distance fluctuation for next update (in meters) private static final long DISTANCE = 20; // Declaring a Location Manager protected LocationManager mLocationManager; public GPSService(Context context) { this.mContext = context; mLocationManager = (LocationManager) mContext .getSystemService(LOCATION_SERVICE); } /** * Returs the Location * * @return Location or null if no location is found */ public Location getLocation() { try { // Getting GPS status isGPSEnabled = mLocationManager .isProviderEnabled(LocationManager.GPS_PROVIDER); // If GPS enabled, get latitude/longitude using GPS Services if (isGPSEnabled) { mLocationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, TIME, DISTANCE, this); if (mLocationManager != null) { mLocation = mLocationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); if (mLocation != null) { mLatitude = mLocation.getLatitude(); mLongitude = mLocation.getLongitude(); isLocationAvailable = true; // setting a flag that // location is available return mLocation; } } } // If we are reaching this part, it means GPS was not able to fetch // any location // Getting network status isNetworkEnabled = mLocationManager .isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (isNetworkEnabled) { mLocationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, TIME, DISTANCE, this); if (mLocationManager != null) { mLocation = mLocationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (mLocation != null) { mLatitude = mLocation.getLatitude(); mLongitude = mLocation.getLongitude(); isLocationAvailable = true; // setting a flag that // location is available return mLocation; } } } // If reaching here means, we were not able to get location neither // from GPS not Network, if (!isGPSEnabled) { // so asking user to open GPS askUserToOpenGPS(); } } catch (Exception e) { e.printStackTrace(); } // if reaching here means, location was not available, so setting the // flag as false isLocationAvailable = false; return null; } /** * Gives you complete address of the location * * @return complete address in String */ public String getLocationAddress() { if (isLocationAvailable) { Geocoder geocoder = new Geocoder(mContext, Locale.getDefault()); // Get the current location from the input parameter list // Create a list to contain the result address List<Address> addresses = null; try { /* * Return 1 address. */ addresses = geocoder.getFromLocation(mLatitude, mLongitude, 1); } catch (IOException e1) { e1.printStackTrace(); return ("IO Exception trying to get address:" + e1); } catch (IllegalArgumentException e2) { // Error message to post in the log String errorString = "Illegal arguments " + Double.toString(mLatitude) + " , " + Double.toString(mLongitude) + " passed to address service"; e2.printStackTrace(); return errorString; } // If the reverse geocode returned an address if (addresses != null && addresses.size() > 0) { // Get the first address Address address = addresses.get(0); /* * Format the first line of address (if available), city, and * country name. */ String addressText = String.format( "%s, %s, %s", // If there's a street address, add it address.getMaxAddressLineIndex() > 0 ? address .getAddressLine(0) : "", // Locality is usually a city address.getLocality(), // The country of the address address.getCountryName()); // Return the text return addressText; } else { return "No address found by the service: Note to the developers, If no address is found by google itself, there is nothing you can do about it."; } } else { return "Location Not available"; } } /** * get latitude * * @return latitude in double */ public double getLatitude() { if (mLocation != null) { mLatitude = mLocation.getLatitude(); } return mLatitude; } /** * get longitude * * @return longitude in double */ public double getLongitude() { if (mLocation != null) { mLongitude = mLocation.getLongitude(); } return mLongitude; } /** * close GPS to save battery */ public void closeGPS() { if (mLocationManager != null) { mLocationManager.removeUpdates(GPSService.this); } } /** * show settings to open GPS */ public void askUserToOpenGPS() { AlertDialog.Builder mAlertDialog = new AlertDialog.Builder(mContext); // Setting Dialog Title mAlertDialog.setTitle("Location not available, Open GPS?") .setMessage("Activate GPS to use use location services?") .setPositiveButton("Open Settings", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); mContext.startActivity(intent); } }) .setNegativeButton("Cancel",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }).show(); } /** * Updating the location when location changes */ @Override public void onLocationChanged(Location location) { mLatitude = location.getLatitude(); mLongitude = location.getLongitude(); } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public IBinder onBind(Intent arg0) { return null; } }
Вы можете создать класс
public class GeoLocation { private Context mContext; private String mLatitude; private String mLongtitude; private String mStreet; private String mHouseNumber; private String mPostalCode; private String mCity; private Location mMarkerLocation; public GeoLocation (Context context) { mContext = context; } public String getStreet () { return mStreet; } public String getHouseNumber () { return mHouseNumber; } public String getPostalCode () { return mPostalCode; } public String getCity () { return mCity; } public String getLatitude () { return mLatitude; } public String getLongtitude () { return mLongtitude; } // Lookup address via reverse geolocation // Call this one public void lookUpAddress (Location markerLocation) { mMarkerLocation = markerLocation; if (Geocoder.isPresent()) { (new GetAddressTask(mContext)).execute(); } } public class GetAddressTask extends AsyncTask<android.location.Location, Void, String> { public GetAddressTask (Context context) { super(); mContext = context; } @Override protected String doInBackground (android.location.Location... params) { Geocoder geocoder = new Geocoder(mContext, Locale.getDefault()); android.location.Location location = params[0]; List<Address> addresses = null; try { if (mMarkerLocation != null) { addresses = geocoder.getFromLocation(mMarkerLocation.getLatitude(), mMarkerLocation.getLongitude(), 1); } } catch (IOException exception) { Log.e("ComplaintLocation", "IO Exception in getFromLocation()", exception); return ("IO Exception trying to get address"); } catch (IllegalArgumentException exception) { String errorString = "Illegal arguments " + Double.toString(location.getLatitude()) + " , " + Double.toString(location.getLongitude()) + " passed to address service"; Log.e("LocationSampleActivity", errorString, exception); return errorString; } if (addresses != null && addresses.size() > 0) { Address address = addresses.get(0); if (address.getMaxAddressLineIndex() > 0) { return String.format( "%s/%s/%s/%s/%s/%s", address.getLatitude(), // 0 address.getLongitude(), // 1 address.getThoroughfare(), // 2 address.getSubThoroughfare(), //3 address.getPostalCode(), // 4 address.getLocality()); // 5 } else { return String.format( "%s/%s/%s/%s", address.getLatitude(), // 0 address.getLongitude(), // 1 address.getPostalCode(), // 2 address.getLocality()); // 3 } } else return "No address found"; } // Format address string after lookup @Override protected void onPostExecute (String address) { String[] addressFields = TextUtils.split(address, "/"); Log.d("ADDRESS ARRAY", Arrays.toString(addressFields)); // Workaround: doInBackground can only return Strings instead of, for example, an // Address instance or a String[] directly. To be able to use TextUtils.isEmpty() // on fields returned by this method, set each String that currently reads "null" to // a null reference for (int fieldcnt = 0; fieldcnt < addressFields.length; ++fieldcnt) { if (addressFields[fieldcnt].equals("null")) addressFields[fieldcnt] = null; } switch (addressFields.length) { case 4: mStreet = null; mHouseNumber = null; mLatitude = addressFields[0]; mLongtitude = addressFields[1]; mPostalCode = addressFields[2]; mCity = addressFields[3]; break; case 6: mLatitude = addressFields[0]; mLongtitude = addressFields[1]; mStreet = addressFields[2]; mHouseNumber = addressFields[3]; mPostalCode = addressFields[4]; mCity = addressFields[5]; break; default: mLatitude = null; mLongtitude = null; mStreet = null; mHouseNumber = null; mPostalCode = null; mCity = null; break; } Log.d("GeoLocation Street", mStreet); Log.d("GeoLocation No.", mHouseNumber); Log.d("GeoLocation Postalcode", mPostalCode); Log.d("GeoLocation Locality", mCity); Log.d("GeoLocation Lat/Lng", "[" + mLatitude + ", " + mLongtitude + "]"); } } }
затем вы создаете его с помощью
GeoLocation geoLocation = new GeoLocation(getActivity()); // or (this) if called from an activity and not from a fragment mGeoLocation.lookUpAddress(LOCATION_FROM_MAP);
Geocoder geocoder =new Geocoder(mContext, Locale.getDefault()); // Get the current location from the input parameter list Location loc = params[0]; // Create a list to contain the result address List<Address> addresses = null; try { addresses = geocoder.getFromLocation(loc.getLatitude(), loc.getLongitude(), 10); } catch (IOException e1) { Log.e("LocationSampleActivity","IO Exception in getFromLocation()"); e1.printStackTrace(); } catch (IllegalArgumentException e2) { // Error message to post in the log String errorString = "Illegal arguments " + Double.toString(loc.getLatitude()) + " , " + Double.toString(loc.getLongitude()) + " passed to address service"; Log.e("LocationSampleActivity", errorString); e2.printStackTrace(); } Address address=null; String zip=null; String city=null; String state=null; StringBuffer st=new StringBuffer(); // If the reverse geocode returned an address if (addresses != null && addresses.size() > 0) { String add=addresses.get(0).getAddressLine(0)+"," +addresses.get(0).getSubAdminArea()+"," +addresses.get(0).getSubLocality(); city=addresses.get(0).getLocality(); state=addresses.get(0).getAdminArea(); // Get the first address for(int i=0 ;i<addresses.size();i++){ address = addresses.get(i); if(address.getPostalCode()!=null){ zip=address.getPostalCode(); break; } }
double latitude = networkLocation.getLatitude(); double longitude = networkLocation.getLongitude(); LocationAddress locationAddress = new LocationAddress(); locationAddress.getAddressFromLocation(latitude , longitude , getApplicationContext(), new GeocoderHandler());
для получения дополнительной информации нажмите кнопку здесь
попробуйте использовать ниже код с помощью геокодера:
Geocoder gcd = new Geocoder(MainActivity.this, Locale.getDefault()); List<Address> geoAddresses = geoAddresses = gcd.getFromLocation(location.getLatitude(), location.getLongitude(), 1); if (geoAddresses.size() > 0) { String mUserLocation = ""; for (int i = 0; i < 4; i++) { //Since it return only four value we declare this as static. mUserLocation = mUserLocation + geoAddresses.get(0).getAddressLine(i).replace(",", "") + ", "; } }
public String getAddress(LatLng latLng) { String cAddress = ""; if (latLng == null) { errorMessage = "no_location_data_provided"; Log.wtf(TAG, errorMessage); return ""; } Geocoder geocoder = new Geocoder(this, Locale.getDefault()); // Address found using the Geocoder. List<Address> addresses = null; try { // Using getFromLocation() returns an array of Addresses for the area immediately // surrounding the given latitude and longitude. The results are a best guess and are // not guaranteed to be accurate. addresses = geocoder.getFromLocation( latLng.latitude, latLng.longitude, // In this sample, we get just a single address. 1); } catch (IOException ioException) { // Catch network or other I/O problems. errorMessage = "service_not_available"; Log.e(TAG, errorMessage, ioException); } catch (IllegalArgumentException illegalArgumentException) { // Catch invalid latitude or longitude values. errorMessage = "invalid_lat_long_used"; Log.e(TAG, errorMessage + ". " + "Latitude = " + latLng.latitude + ", Longitude = " + latLng.longitude, illegalArgumentException); } // Handle case where no address was found. if (addresses == null || addresses.size() == 0) { if (errorMessage.isEmpty()) { errorMessage = "no_address_found"; Log.e(TAG, errorMessage); } } else { Address address = addresses.get(0); ArrayList<String> addressFragments = new ArrayList<String>(); // Fetch the address lines using {@code getAddressLine}, // join them, and send them to the thread. The {@link android.location.address} // class provides other options for fetching address details that you may prefer // to use. Here are some examples: // getLocality() ("Mountain View", for example) // getAdminArea() ("CA", for example) // getPostalCode() ("94043", for example) // getCountryCode() ("US", for example) // getCountryName() ("United States", for example) String allAddress = ""; for (int i = 0; i < address.getMaxAddressLineIndex(); i++) { addressFragments.add(address.getAddressLine(i)); allAddress += address.getAddressLine(i) + " "; } if (address.getAdminArea() != null) { state = address.getAdminArea(); } else { state = ""; } if (address.getLocality() != null) { city = address.getLocality(); } else { city = ""; } if (address.getPostalCode() != null) { postalCode = address.getPostalCode(); } else { postalCode = ""; } Log.i(TAG, "address_found"); //driverAddress = TextUtils.join(System.getProperty("line.separator"), addressFragments); cAddress = allAddress; Log.e("result", cAddress.toString()); } return cAddress; }
вы можете использовать этот метод для геокодирования правильного полного адреса
1-вы создаете переменные для LocationManager и LocationListener в методе onCreate.
2-Проверьте, есть ли разрешение, поэтому выполните обновления местоположения и получите lastKnownLocation от locationManager, иначе вы попросите разрешения
3-Создайте onRequestPermissionResult в основном классе и проверьте, есть ли разрешение, а затем выполните обновления местоположения
4-создать разделенный метод, который включает в себя переменную геокодера и создать список для размещения координаты вашего местоположения, поэтому, чтобы быть в безопасности, вы проверяете, существует ли список, и если каждая информация, которую мы хотим в этом списке, существует, то вы используете (getThoroughfare ==> для адреса улицы), (getLocality ==> для города / штата), (getPostalCode ==> для Zip), (getAdminArea ==> для полного адреса)
5-Наконец, вы вызываете этот метод после проверки разрешения с (lastKnownLocation параметр ==> чтобы показать адрес при запуске приложения) и в onLocationChanged с (location параметр ==> чтобы показать адрес при изменении местоположения)
часть кода:
LocationManager locationManager; LocationListener locationListener; @SuppressLint("MissingPermission") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { updateLocation(location); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } }; if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED){ locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); updateLocation(lastKnownLocation); }else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); } }
@ Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED){ locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); } } }
public void updateLocation (Location location){
Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault()); try { List<Address> listAddresses = geocoder.getFromLocation(location.getLatitude(),location.getLongitude(),1); String address = "Could not find location :("; if (listAddresses != null && listAddresses.size() > 0) { if (listAddresses.get(0).getThoroughfare() != null) { address = listAddresses.get(0).getThoroughfare() + " "; } if (listAddresses.get(0).getLocality() != null) { address += listAddresses.get(0).getLocality() + " "; } if (listAddresses.get(0).getPostalCode() != null) { address += listAddresses.get(0).getPostalCode() + " "; } if (listAddresses.get(0).getAdminArea() != null) { address += listAddresses.get(0).getAdminArea(); } } Log.i("Address",address); } catch (Exception e) { e.printStackTrace(); } }
}
Кажется, что никто еще не предоставил решение, предложенное Google Docs (https://developer.android.com/training/location/display-address#java). правильное решение должно использовать IntentService для выполнения сетевого вызова для обратного геокодирования.
используется служба intent, а не AsyncTask, поскольку она не привязана к какой-либо конкретной деятельности. то есть. он имеет свой собственный жизненный цикл. IntentService остановится сам, когда геокодирование законченный.
public class GeocodingService extends IntentService { public GeocodingService() { super("GeocodingService"); } @Override protected void onHandleIntent(@Nullable Intent intent) { if (intent == null) { return; } Geocoder geocoder = new Geocoder(this, Locale.getDefault()); String errorMessage = ""; BCCDatabase BCCDatabase = skicompanion.skicompanion.storage.BCCDatabase.getInstance(getApplicationContext()); // Get the location passed to this service through an extra. Location location = intent.getParcelableExtra( "location"); long trackID = intent.getLongExtra("trackID", -1); List<Address> addresses = null; String addressString = ""; try { addresses = geocoder.getFromLocation( location.getLatitude(), location.getLongitude(), 1); } catch (IOException ioException) { // Catch network or other I/O problems. errorMessage = "service not available"; Log.d(Constants.SkiCompanionDebug, errorMessage, ioException); } catch (IllegalArgumentException illegalArgumentException) { // Catch invalid latitude or longitude values. errorMessage = "invalid lat long used"; Log.d(Constants.SkiCompanionDebug, errorMessage + ". " + "Latitude = " + location.getLatitude() + ", Longitude = " + location.getLongitude(), illegalArgumentException); } // Handle case where no address was found. if (addresses == null || addresses.size() == 0) { if (errorMessage.isEmpty()) { errorMessage = "no address found"; Log.d(Constants.SkiCompanionDebug, errorMessage); } } else { if(addresses.get(0).getLocality() != null){ addressString += addresses.get(0).getLocality() + ", "; } if(addresses.get(0).getAdminArea() != null){ addressString += addresses.get(0).getAdminArea() + ", "; } if(addresses.get(0).getCountryName() != null){ addressString += addresses.get(0).getCountryName(); } //updating DB BCCDatabase.setTrackLocation(trackID, addressString); Log.d(Constants.SkiCompanionDebug, "address found: "+ addressString); } } }
public static String getAddressFromLatLng(Context context, LatLng latLng) { Geocoder geocoder; List<Address> addresses; geocoder = new Geocoder(context, Locale.getDefault()); try { addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1); return addresses.get(0).getAddressLine(0); } catch (Exception e) { e.printStackTrace(); return ""; } }
его очень легко получить полный адрес от широты и долготы с помощью класса геокодера. Следуя примеру кода. Надеюсь, это поможет!
if (l != null) { val lat = l.latitude val lon = l.longitude val geocoder = Geocoder(this, Locale.getDefault()) val addresses: List<Address> addresses = geocoder.getFromLocation(lat, lon, 1) val address = addresses[0].getAddressLine(0) val address2 = addresses[0].getAddressLine(1) val city = addresses[0].locality val state = addresses[0].adminArea val country = addresses[0].countryName val postalCode = addresses[0].postalCode val knownName = addresses[0].featureName val message = "Emergency situation. Call for help. My location is: " + address + "." + "http://maps.google.com/maps?saddr=" + lat + "," + lon }
вы можете использовать только значение адреса, поскольку оно дает вам весь полный адрес. Если вам нужны отдельные компоненты, вы можете использовать и другие.