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.
- NullPointerException aleatorio en Google Maps API v2
- Mostrar el número total como texto para múltiples pines con un pin en la misma ubicación en el mapa en android
- ¿Dónde está debug.keystore en Mac?
- ¿Hay alguna manera de mostrar las instrucciones de la ruta en Google Map API v2?
- Refreshing makers (ClusterItems) en Google Maps v2 para Android
- Google Maps versión-2 de Google muestra la dirección y el icono de mapa de Google
- Contenido dinámico en Maps V2 InfoWindow
- Dibujar objeto / imagen sobre lienzo
- Crear un archivo GPX desde GeoPoints
- Android Encuentra la latitud Longitud del punto X de la ubicación definida
- Excepción de puntero nulo en mapFragment.getMapAsync (this) al inicializar google map
- Map.setmylocationenabled (true) no funciona
- ¿Necesito diferentes claves SHA1 para realizar mapas de Google
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; }
- Android- Error: Error de ejecución para la tarea ': app: transformClassesWithDexForRelease'
- XML Lista de permisos de Android completa