Obtenga la latitud y longitud desde el nombre de la dirección dada. NO Geocoder

Tengo un nombre de dirección y quiero obtener una latitud y longitud exacta para ello. Sé que podemos conseguir esto usando Geocoder's getFromLocationName (dirección, maxresult) .

El problema es que el resultado que obtengo es siempre nulo, a diferencia del resultado que obtenemos con https://maps.google.com/ . Esto siempre me permite obtener algunos resultados, a diferencia de Geocoder.

También intenté otra forma: "http://maps.google.com/maps/api/geocode/json?address=" + address + "&sensor=false" (Aquí hay un enlace !) Da mejores resultados que geocoder, pero A menudo devuelve el error (java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer) Es aburrido.

Mi pregunta es : ¿Cómo podemos obtener el mismo resultado latlong que obtendríamos al buscar en https://maps.google.com/ desde el código java?

Additional : donde está el documento api sobre el uso de " http://maps.google.com/maps/api/geocode/json?address= " + dirección + "& sensor = false"

Albert, creo que tu preocupación es que tu código no esté funcionando. Aquí va, el código de abajo funciona para mí muy bien. Creo que te falta URIUtil.encodeQuery para convertir tu cadena en un URI.

Estoy usando la biblioteca de gson, la descargo y la agrego a su trayectoria.

Para obtener la clase para su análisis de gson, necesita ir a jsonschema2pojo . Acaba de disparar http://maps.googleapis.com/maps/api/geocode/json?address=Sayaji+Hotel+Near+balewadi+stadium+pune&sensor=true en su navegador, obtenga los resultados y péguelo en este sitio. Se generará su pojo para usted. Es posible que deba añadir una anotación.jar.

Confía en mí, es fácil conseguir trabajo. No te sientas frustrado todavía.

 try { URL url = new URL( "http://maps.googleapis.com/maps/api/geocode/json?address=" + URIUtil.encodeQuery("Sayaji Hotel, Near balewadi stadium, pune") + "&sensor=true"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Accept", "application/json"); if (conn.getResponseCode() != 200) { throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode()); } BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream()))); String output = "", full = ""; while ((output = br.readLine()) != null) { System.out.println(output); full += output; } PincodeVerify gson = new Gson().fromJson(full, PincodeVerify.class); response = new IsPincodeSupportedResponse(new PincodeVerifyConcrete( gson.getResults().get(0).getFormatted_address(), gson.getResults().get(0).getGeometry().getLocation().getLat(), gson.getResults().get(0).getGeometry().getLocation().getLng())) ; try { String address = response.getAddress(); Double latitude = response.getLatitude(), longitude = response.getLongitude(); if (address == null || address.length() <= 0) { log.error("Address is null"); } } catch (NullPointerException e) { log.error("Address, latitude on longitude is null"); } conn.disconnect(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 

El Geocode http funciona, acabo de despedirlo, los resultados a continuación

 { "results" : [ { "address_components" : [ { "long_name" : "Pune", "short_name" : "Pune", "types" : [ "locality", "political" ] }, { "long_name" : "Pune", "short_name" : "Pune", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "Maharashtra", "short_name" : "MH", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "India", "short_name" : "IN", "types" : [ "country", "political" ] } ], "formatted_address" : "Pune, Maharashtra, India", "geometry" : { "bounds" : { "northeast" : { "lat" : 18.63469650, "lng" : 73.98948670 }, "southwest" : { "lat" : 18.41367390, "lng" : 73.73989109999999 } }, "location" : { "lat" : 18.52043030, "lng" : 73.85674370 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 18.63469650, "lng" : 73.98948670 }, "southwest" : { "lat" : 18.41367390, "lng" : 73.73989109999999 } } }, "types" : [ "locality", "political" ] } ], "status" : "OK" } 

Editar

Las respuestas "no contienen suficientes detalles"

De toda la investigación que usted está esperando que google map tienen una referencia a cada combinación de localidad, área, ciudad. Pero el hecho es que google map contiene geo y reverse-geo en su propio contexto. No se puede esperar que tenga una combinación como Sayaji Hotel, Near balewadi stadium, pune . Web google maps lo localizará para usted ya que utiliza un backend más rico de google de búsqueda. La única dirección geográfica inversa de google api recibió de sus propios api. Para mí, parece una forma razonable de trabajar, teniendo en cuenta lo complejo que es nuestro sistema de direcciones de la India, 2 º camino cruzado puede ser millas de distancia de la 1 ª Cruz carretera 🙂

Esta es una lista de servicios web que proporcionan esta función.

Uno de mis favoritos es esto

¿Por qué no intentas golpear.

http://api.geonames.org/findNearbyPlaceName?lat=18.975&lng=72.825833&username=demo

Que devuelve la siguiente salida (asegúrese de poner su lat & lon en URL)

Introduzca aquí la descripción de la imagen

Espero que esto le ayude:

 public static GeoPoint getGeoPointFromAddress(String locationAddress) { GeoPoint locationPoint = null; String locationAddres = locationAddress.replaceAll(" ", "%20"); String str = "http://maps.googleapis.com/maps/api/geocode/json?address=" + locationAddres + "&sensor=true"; String ss = readWebService(str); JSONObject json; try { String lat, lon; json = new JSONObject(ss); JSONObject geoMetryObject = new JSONObject(); JSONObject locations = new JSONObject(); JSONArray jarr = json.getJSONArray("results"); int i; for (i = 0; i < jarr.length(); i++) { json = jarr.getJSONObject(i); geoMetryObject = json.getJSONObject("geometry"); locations = geoMetryObject.getJSONObject("location"); lat = locations.getString("lat"); lon = locations.getString("lng"); locationPoint = Utils.getGeoPoint(Double.parseDouble(lat), Double.parseDouble(lon)); } } catch (Exception e) { e.printStackTrace(); } return locationPoint; } 

Yo uso, en orden:
– Google Geocoding API v3 (en algunos casos hay un problema descrito aquí )
– Geocoder (en algunos casos hay un problema descrito aquí ).

Si no recibo resultados de Google Geocoding API, utilizo el Geocoder.

Por lo que he notado Google Maps está utilizando la API de Google Places para completar automáticamente y luego obtiene los Detalles de la ubicación desde la que puede obtener las coordenadas.

https://developers.google.com/places/documentation/ https://developers.google.com/places/training/

Este método debe darle los resultados esperados.

  • Android maps: No se pudo encontrar el estilo 'mapViewStyle' en el tema actual
  • Google Maps Android: ajustar la polilínea a la calle
  • Android Google Maps v2: ¿Cómo agregar un marcador con un fragmento de varias líneas?
  • Plaza en blanco en Google Maps
  • Android GoogleMap v2 se recorta o no se muestra completamente
  • Cómo mover camra a un marcador específico en google maps v2 en android
  • ¿Por qué la firma no es válida en la API de Google Maps para Android?
  • Android no puede importar servicios de Google Play
  • Cómo girar marcador (bus) de acuerdo a la dirección?
  • Google google mapv2 icono de la URL
  • Obtenga los sitios de inicio y trabajo de los usuarios de Google
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.