Cómo obtener el nombre de la ciudad de las coordenadas de latitud y longitud en Google Maps?

¿Cómo puedo obtener el nombre de la ciudad en Google Maps si tengo coordenadas de latitud y longitud de una ciudad o área?

Intenté usar la latitud, la longitud y el país, pero no sé cómo conseguir el nombre de la ciudad.

Desde un objeto Geocoder , puede llamar al getFromLocation(double, double, int) . getLocality() una lista de objetos de Address que tienen un método getLocality() .

 Geocoder gcd = new Geocoder(context, Locale.getDefault()); List<Address> addresses = gcd.getFromLocation(lat, lng, 1); if (addresses.size() > 0) { System.out.println(addresses.get(0).getLocality()); } else { // do your staff } 

Estoy utilizando este código. También puede su este para obtener la ciudad y otros detalles sobre una Latitud y longitud:

 public class getReverseGeoCoding { private String Address1 = "", Address2 = "", City = "", State = "", Country = "", County = "", PIN = ""; public void getAddress() { Address1 = ""; Address2 = ""; City = ""; State = ""; Country = ""; County = ""; PIN = ""; try { JSONObject jsonObj = parser_Json.getJSONfromURL("http://maps.googleapis.com/maps/api/geocode/json?latlng=" + Global.curLatitude + "," + Global.curLongitude + "&sensor=true"); String Status = jsonObj.getString("status"); if (Status.equalsIgnoreCase("OK")) { JSONArray Results = jsonObj.getJSONArray("results"); JSONObject zero = Results.getJSONObject(0); JSONArray address_components = zero.getJSONArray("address_components"); for (int i = 0; i < address_components.length(); i++) { JSONObject zero2 = address_components.getJSONObject(i); String long_name = zero2.getString("long_name"); JSONArray mtypes = zero2.getJSONArray("types"); String Type = mtypes.getString(0); if (TextUtils.isEmpty(long_name) == false || !long_name.equals(null) || long_name.length() > 0 || long_name != "") { if (Type.equalsIgnoreCase("street_number")) { Address1 = long_name + " "; } else if (Type.equalsIgnoreCase("route")) { Address1 = Address1 + long_name; } else if (Type.equalsIgnoreCase("sublocality")) { Address2 = long_name; } else if (Type.equalsIgnoreCase("locality")) { // Address2 = Address2 + long_name + ", "; City = long_name; } else if (Type.equalsIgnoreCase("administrative_area_level_2")) { County = long_name; } else if (Type.equalsIgnoreCase("administrative_area_level_1")) { State = long_name; } else if (Type.equalsIgnoreCase("country")) { Country = long_name; } else if (Type.equalsIgnoreCase("postal_code")) { PIN = long_name; } } // JSONArray mtypes = zero2.getJSONArray("types"); // String Type = mtypes.getString(0); // Log.e(Type,long_name); } } } catch (Exception e) { e.printStackTrace(); } } public String getAddress1() { return Address1; } public String getAddress2() { return Address2; } public String getCity() { return City; } public String getState() { return State; } public String getCountry() { return Country; } public String getCounty() { return County; } public String getPIN() { return PIN; } } 

JSON PARSER CLASE

 public class parser_Json { public static JSONObject getJSONfromURL(String url) { // initialize InputStream is = null; String result = ""; JSONObject jObject = null; // http post try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); } catch (Exception e) { Log.e("log_tag", "Error in http connection " + e.toString()); } // convert response to string try { BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result = sb.toString(); } catch (Exception e) { Log.e("log_tag", "Error converting result " + e.toString()); } // try parse the string to a JSON object try { jObject = new JSONObject(result); } catch (JSONException e) { Log.e("log_tag", "Error parsing data " + e.toString()); } return jObject; } } 

Puedes obtener más información de esta pregunta: Obtén la dirección particular usando latitud y longitud

Prueba esto

  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; 

Intenta abajo el uso del código de la esperanza uso por completo para ti: –

 CityAsyncTask cst = new CityAsyncTask(HomeScreenUserLocation.this, latitude, longitude); cst.execute(); String lo = null; try { lo = cst.get().toString(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

Y AsyncTask

 public class CityAsyncTask extends AsyncTask<String, String, String> { Activity act; double latitude; double longitude; public CityAsyncTask(Activity act, double latitude, double longitude) { // TODO Auto-generated constructor stub this.act = act; this.latitude = latitude; this.longitude = longitude; } @Override protected String doInBackground(String... params) { String result = ""; Geocoder geocoder = new Geocoder(act, Locale.getDefault()); try { List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1); Log.e("Addresses", "-->" + addresses); result = addresses.get(0).toString(); } catch (IOException e) { e.printStackTrace(); } return result; } @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); } } 

Por favor refiérase debajo del código

  Geocoder geocoder = new Geocoder(this, Locale.getDefault()); List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1); String cityName = addresses.get(0).getAddressLine(0); String stateName = addresses.get(0).getAddressLine(1); String countryName = addresses.get(0).getAddressLine(2); 

Prueba esto

 var geocoder; geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(latitude, longitude); geocoder.geocode( {'latLng': latlng}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { if (results[0]) { var add= results[0].formatted_address ; var value=add.split(","); count=value.length; country=value[count-1]; state=value[count-2]; city=value[count-3]; alert("city name is: " + city); } else { alert("address not found"); } } else { alert("Geocoder failed due to: " + status); } } 

);

  private class MatchingNearByLocationTask extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); // Showing progress dialog progressDialog = new ProgressDialog(mContext); progressDialog.setMessage("Loading..."); progressDialog.setCancelable(true); progressDialog.show(); } @Override protected Void doInBackground(Void... arg0) { jsonStr = getLocationInfo(Latitude, Longitude).toString(); if (jsonStr != null) { Log.i("location--??", jsonStr); JSONObject jsonObj; try { jsonObj = new JSONObject(jsonStr); String Status = jsonObj.getString("status"); if (Status.equalsIgnoreCase("OK")) { JSONArray Results = jsonObj.getJSONArray("results"); JSONObject zero = Results.getJSONObject(0); JSONArray address_components = zero .getJSONArray("address_components"); for (int i = 0; i < address_components.length(); i++) { JSONObject zero2 = address_components .getJSONObject(i); String long_name = zero2.getString("long_name"); JSONArray mtypes = zero2.getJSONArray("types"); String Type = mtypes.getString(0); if (Type.equalsIgnoreCase("administrative_area_level_2")) { // Address2 = Address2 + long_name + ", "; String City = long_name; Log.d(" CityName --->", City + ""); } } } } catch (JSONException e) { e.printStackTrace(); } } return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); // Dismiss the progress dialog if (progressDialog.isShowing()) { progressDialog.dismiss(); } } @Override protected void onCancelled() { super.onCancelled(); progressDialog.dismiss(); } } private JSONObject getLocationInfo(double lat, double lng) { HttpGet httpGet = new HttpGet( "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lng + "&sensor=false"); HttpClient client = new DefaultHttpClient(); HttpResponse response; StringBuilder stringBuilder = new StringBuilder(); try { response = client.execute(httpGet); HttpEntity entity = response.getEntity(); InputStream stream = entity.getContent(); int b; while ((b = stream.read()) != -1) { stringBuilder.append((char) b); } } catch (ClientProtocolException e) { } catch (IOException e) { } JSONObject jsonObject = new JSONObject(); try { jsonObject = new JSONObject(stringBuilder.toString()); } catch (JSONException e) { e.printStackTrace(); } return jsonObject; } 

Puede usar esto si tiene una lista:

 Address address = list.get(0); String cityname = address.getLocality(); 
  com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(data); if("OK".equals(jsonObject.getString("status"))){ String formatted_address; JSONArray results = jsonObject.getJSONArray("results"); if(results != null && results.size() > 0){ com.alibaba.fastjson.JSONObject object = results.getJSONObject(0); String addressComponents = object.getString("address_components"); formatted_address = object.getString("formatted_address"); Log.e("amaya","formatted_address="+formatted_address+"--url="+url); if(findCity){ boolean finded = false; JSONArray ac = JSONArray.parseArray(addressComponents); if(ac != null && ac.size() > 0){ for(int i=0;i<ac.size();i++){ com.alibaba.fastjson.JSONObject jo = ac.getJSONObject(i); JSONArray types = jo.getJSONArray("types"); if(types != null && types.size() > 0){ for(int j=0;j<ac.size();j++){ String string = types.getString(i); if("administrative_area_level_1".equals(string)){ finded = true; break; } } } if(finded) break; } } Log.e("amaya","city="+formatted_address); }else{ Log.e("amaya","poiName="+hotspotPoi.getPoi_name()+"--"+hotspotPoi); } if(hotspotPoi != null) hotspotPoi.setPoi_name(formatted_address); EventBus.getDefault().post(new AmayaEvent.GeoEvent(hotspotPoi)); } } 

Este es un método para analizar los datos de retroalimentación de google.

Tengo una nueva forma de resolver este problema. Aquí he utilizado google http servicio para obtener información total de la ubicación basada en la longitud y la latitud. Sólo necesitas pasar la latitud y la longitud en url y tu clave api (ej: latlng = 21.1497409, 79.08747970000002 & clave = TU CLAVE DE LA API). Aquí está mi servicio de obtener en la clase ExampleService

  getService(url) { return this.http.get(url).map((data: any) => data.json()) } 

Esto se puede poner en cualquier lugar que desee y sólo tiene que llamar al servicio desde el componente donde necesita datos de ubicación

 this._exampleService.getService("https://maps.googleapis.com/maps/api/geocode/json?latlng=21.1497409, 79.08747970000002&key=YOUR API KEY").subscribe(getplaceData => { var placeDataDest: any; placeDataDest = getplaceData; console.log("i got place id yeee " + placeDataDest['results'][0]['place_id']); console.log("i got place details yeee " + placeDataDest['results']); }); 

Similarmente encontrar el nombre de la ciudad …. espero que encuentre esto útil

Intenta usar esta api:

URL ": http://maps.googleapis.com/maps/api/geocode/json?latlng= " + String.valueOf (yout_lattitude) + "," + String.valueOf (your_longitude)

Código de trabajo:

 addresses = geocoder.getFromLocation(mMap.getCameraPosition().target.latitude, mMap.getCameraPosition().target.longitude, 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5 String locality = addresses.get(0).getLocality(); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() String subLocality = addresses.get(0).getSubLocality(); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() //String address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() String address1 = addresses.get(0).getAddressLine(1); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() String address2 = addresses.get(0).getAddressLine(2); // 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(); 

Sólo use este método y pase su lat, largo.

 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; } 
  • Intención de navegación de Google para el itinerario con varios waypoints
  • Android MapActivity: No se pudo obtener el cliente de fábrica de conexión
  • Cómo agregar botones en la parte superior del fragmento de mapa Diseño API v2
  • La clase de dirección getCountryCode () devuelve dígitos
  • Cambiar Google Map Offset Center
  • Android Google Maps: deshabilita el arrastrar en MapFragment
  • ¿Cómo pasar el waypoint múltiple a la aplicación estándar de google map en android a través de la intención de navegación?
  • Cargar imagen en el marcador de mapa con android
  • Google Maps v3 MapView no toma todas las vistas de los padres en Android
  • ActionBarSherlock + ID de duplicado de la API de Google Maps v2
  • Una clave de Google Maps para todos los desarrolladores?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.