varios studio marcadores google example ejemplo demos agregar activity android google-maps maps android-maps-v2

studio - obtener latitud y longitud con geocoder y android Google Maps API v2



map fragment android studio (5)

Estoy usando Google Maps API v2 para Android y funciona correctamente. Sin embargo, estoy tratando de usar el geocodificador para obtener la longitud y la latitud de una dirección, pero sin éxito.

¿Ha cambiado la forma de hacerlo desde la v2?

Estoy usando el código convencional

Geocoder gc = new Geocoder(context); //... List<Address> list = gc.getFromLocationName("1600 Amphitheatre Parkway, Mountain View, CA", 1); Address address = list.get(0); double lat = address.getLatitude(); double lng = address.getLongitude(); //...

Siempre devuelve un apagado forzado, y Log no resuelve nada. Cuando utilizo un bloque de try / catch, abre el mapa pero siempre con la misma ubicación. Uso el permiso de Internet, he incluido en el proyecto también COARSE_LOCATION. He utilizado varios códigos ubicados aquí y en otros sitios, pero sin éxito.

Gracias de antemano.


Probar esto.

private void getLatLongFromAddress(String address) { double lat= 0.0, lng= 0.0; Geocoder geoCoder = new Geocoder(this, Locale.getDefault()); try { List<Address> addresses = geoCoder.getFromLocationName(address , 1); if (addresses.size() > 0) { GeoPoint p = new GeoPoint( (int) (addresses.get(0).getLatitude() * 1E6), (int) (addresses.get(0).getLongitude() * 1E6)); lat=p.getLatitudeE6()/1E6; lng=p.getLongitudeE6()/1E6; Log.d("Latitude", ""+lat); Log.d("Longitude", ""+lng); } } catch(Exception e) { e.printStackTrace(); } }


Pruebe esta solución usando este ejemplo de url:

http://maps.google.com/maps/api/geocode/json?address=mumbai&sensor=false

que devuelve datos en formato json con lat/lng de address .

private class DataLongOperationAsynchTask extends AsyncTask<String, Void, String[]> { ProgressDialog dialog = new ProgressDialog(MainActivity.this); @Override protected void onPreExecute() { super.onPreExecute(); dialog.setMessage("Please wait..."); dialog.setCanceledOnTouchOutside(false); dialog.show(); } @Override protected String[] doInBackground(String... params) { String response; try { response = getLatLongByURL("http://maps.google.com/maps/api/geocode/json?address=mumbai&sensor=false"); Log.d("response",""+response); return new String[]{response}; } catch (Exception e) { return new String[]{"error"}; } } @Override protected void onPostExecute(String... result) { try { JSONObject jsonObject = new JSONObject(result[0]); double lng = ((JSONArray)jsonObject.get("results")).getJSONObject(0) .getJSONObject("geometry").getJSONObject("location") .getDouble("lng"); double lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0) .getJSONObject("geometry").getJSONObject("location") .getDouble("lat"); Log.d("latitude", "" + lat); Log.d("longitude", "" + lng); } catch (JSONException e) { e.printStackTrace(); } if (dialog.isShowing()) { dialog.dismiss(); } } } public String getLatLongByURL(String requestURL) { URL url; String response = ""; try { url = new URL(requestURL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(15000); conn.setConnectTimeout(15000); conn.setRequestMethod("GET"); conn.setDoInput(true); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setDoOutput(true); int responseCode = conn.getResponseCode(); if (responseCode == HttpsURLConnection.HTTP_OK) { String line; BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); while ((line = br.readLine()) != null) { response += line; } } else { response = ""; } } catch (Exception e) { e.printStackTrace(); } return response; }

Espero que esto te ayude.


Una rectificación simple que funcionó para mí es simplemente habilitar la conexión a Internet en el dispositivo. Sugerencia por Pxaml .


dado que el HttpClient se ha depreciado, puede probar el siguiente código con Asynctask (también tenga en cuenta que debemos codificar la dirección en URL):

public class GeoCoding extends AsyncTask<Void, Void, Void> { private String address; private static final String TAG = GeoCoding.class.getSimpleName(); JSONObject jsonObj; String URL; private String Address1 = "", Address2 = "", City = "", State = "", Country = "", County = "", PIN = "", Area=""; private double latitude, longitude; HttpURLConnection connection; BufferedReader br; StringBuilder sb ; public GeoCoding(String address){ this.address = address; } public String getArea(){ return Area; } public void getAddress() { Address1 = ""; Address2 = ""; City = ""; State = ""; Country = ""; County = ""; PIN = ""; Area =""; try { 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) || !long_name.equals(null) || long_name.length() > 0 || !long_name.equals("")) { 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")) { 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; }else if( Type.equalsIgnoreCase("neighborhood")){ Area = long_name; } } } } } catch (Exception e) { e.printStackTrace(); } } public void getGeoPoint(){ try{ longitude = ((JSONArray)jsonObj.get("results")).getJSONObject(0) .getJSONObject("geometry").getJSONObject("location") .getDouble("lng"); latitude = ((JSONArray)jsonObj.get("results")).getJSONObject(0) .getJSONObject("geometry").getJSONObject("location") .getDouble("lat"); }catch (Exception e){ e.printStackTrace(); } } @Override protected Void doInBackground(Void... params) { try { StringBuilder urlStringBuilder = new StringBuilder("http://maps.google.com/maps/api/geocode/json"); urlStringBuilder.append("?address=" + URLEncoder.encode(address, "utf8")); urlStringBuilder.append("&sensor=false"); URL = urlStringBuilder.toString(); Log.d(TAG, "URL: " + URL); URL url = new URL(URL); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setDoInput(true); connection.connect(); br = new BufferedReader(new InputStreamReader(connection.getInputStream())); sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb = sb.append(line + "/n"); } }catch (Exception e){e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void aVoid) { try { Log.d(TAG, "response code: " + connection.getResponseCode()); jsonObj = new JSONObject(sb.toString()); Log.d(TAG, "JSON obj: " + jsonObj); getAddress(); Log.d(TAG, "area is: " + getArea()); getGeoPoint(); Log.d("latitude", "" + latitude); Log.d("longitude", "" + longitude); } } catch (Exception e) { e.printStackTrace(); } super.onPostExecute(aVoid); } }


puedes obtener latitud y longitud de la ubicación actual con este código simple

GPS_Location mGPS = new GPS_Location(MyApplication.getAppContext()); if (mGPS.canGetLocation) { mLat = mGPS.getLatitude(); mLong = mGPS.getLongitude(); } else { System.out.println("cannot find"); }

Debes agregar gps y otros permisos a tu aplicación