Obtenir la latitude et la longitude du nom d’adresse donné. PAS Géocodeur

J’ai un nom d’adresse et je souhaite obtenir une latitude et une longitude précises. Je sais que nous pouvons obtenir cela en utilisant getFromLocationName (adresse, maxresult) de Geocoder .

Le problème, c’est que le résultat obtenu est toujours nul, contrairement au résultat obtenu avec https://maps.google.com/ . Cela me permet toujours d’obtenir des résultats, contrairement à Geocoder.

J’ai aussi essayé d’une autre manière: "http://maps.google.com/maps/api/geocode/json?address=" + address + "&sensor=false" (voici un lien !) Il donne de meilleurs résultats que le géocodeur, mais renvoie souvent l’erreur (java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer) . C’est ennuyeux.

Ma question est la suivante : comment pouvons-nous obtenir le même résultat final en effectuant une recherche sur https://maps.google.com/ dans le code java?

additional : où est le document api sur l’utilisation de ” http://maps.google.com/maps/api/geocode/json?address= ” + address + “& sensor = false”

Albert, je pense que votre préoccupation est que votre code ne fonctionne pas. Voilà, le code ci-dessous fonctionne très bien pour moi. Je pense qu’il vous manque URIUtil.encodeQuery pour convertir votre chaîne en un URI.

J’utilise gson library, téléchargez-le et ajoutez-le à votre chemin.

Pour obtenir la classe de votre parsing gson, vous devez vous rendre à jsonschema2pojo . Il suffit de tirer http://maps.googleapis.com/maps/api/geocode/json?address=Sayaji+Hotel+Near+balewadi+stadium+pune&sensor=true sur votre navigateur, obtenez le résultat et collez-le sur ce site. Il va générer votre pojo pour vous. Vous devrez peut-être également append un fichier annotation.jar.

Croyez-moi, il est facile de travailler. Ne soyez pas frustré pour le moment.

 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()))); Ssortingng 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 { Ssortingng 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(); } 

Le Geocode http fonctionne, je viens de le renvoyer, résultats ci-dessous

 { "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" } 

modifier

Sur 'réponses ne contiennent pas assez de détails`

De toutes les recherches que vous vous attendez à ce que Google Map aient une référence à chaque combinaison de localité, région, ville. Mais le fait demeure que Google Map contient geo et reverse-geo dans son propre contexte. Vous ne pouvez pas vous attendre à ce que le Sayaji Hotel, Near balewadi stadium, pune une combinaison Sayaji Hotel, Near balewadi stadium, pune Google Maps le localisera pour vous car il utilise un moteur de Search Google plus riche et plus complet. La seule adresse géo inversée de Google Api reçue de leurs propres API. Pour moi, cela semble être une façon raisonnable de travailler. Compte tenu de la complexité de notre système d’adresses en Inde, le 2e croisement peut être à des kilomètres du 1er croisement 🙂

Voici une liste de services Web offrant cette fonction.

Un de mes favoris est- ce

Pourquoi n’essayez-vous pas de bash.

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

qui renvoie la sortie suivante (assurez-vous de mettre votre lat & lon dans l’URL)

entrez la description de l'image ici

J’espère que cela vous aide:

 public static GeoPoint getGeoPointFromAddress(Ssortingng locationAddress) { GeoPoint locationPoint = null; Ssortingng locationAddres = locationAddress.replaceAll(" ", "%20"); Ssortingng str = "http://maps.googleapis.com/maps/api/geocode/json?address=" + locationAddres + "&sensor=true"; Ssortingng ss = readWebService(str); JSONObject json; try { Ssortingng 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; } 

J’utilise, dans l’ordre:
– API Google Geocoding v3 (dans quelques cas, un problème est décrit ici )
– Géocodeur (dans certains cas, un problème est décrit ici ).

Si je ne reçois pas les résultats de Google Geocoding API, j’utilise le géocodeur.

Autant que je sache, Google Maps utilise l’API Google Adresses pour la saisie semi-automatique, puis obtient les détails de l’emplacement à partir desquels vous pouvez obtenir les coordonnées.

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

Cette méthode devrait vous donner les résultats attendus.