Albert, je pense que votre préoccupation est que le code vous ne fonctionne pas. Voilà, le code ci-dessous fonctionne vraiment bien pour moi. Je pense qu'il vous manque URIUtil.encodeQuery
pour convertir votre chaîne en URI. J'utilise la bibliothèque gson, téléchargez-la et ajoutez-la à votre chemin.
Pour obtenir la classe pour votre analyse grammaticale, vous devez aller à jsonschema2pojo. Lancez http://maps.googleapis.com/maps/api/geocode/json?address=Sayaji+Hotel+Near+balewadi+stadium+pune&sensor=true sur votre navigateur, obtenez les résultats et collez-le sur ce site. Il va générer votre pojo pour vous. Vous devrez peut-être également ajouter un annotation.jar.
Croyez-moi, il est facile de travailler. Ne soyez pas encore frustré.
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();
}
Les travaux http géocodage, je viens a tiré, les 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 « les réponses ne contiennent pas assez detail`
De toutes les recherches vous vous attendez à ce que google map ait une référence à chaque combinaison de localité, région, ville.Mais le fait demeure que google map contient géo et reverse-geo dans son propre contexte. Vous ne pouvez pas vous attendre à avoir une combinaison comme Sayaji Hotel, Near balewadi stadium, pune
. Web google maps le localisera pour vous car il utilise un backend google riche et varié. La seule adresse de géo inversée de google api reçue de leurs propres api. Pour moi, il semble comme un moyen raisonnable de travailler, étant donné la complexité de notre système d'adresse indienne est, la route 2 croix peut être miles de 1ère route Cross :)
GeoCoder n'est pas une science parfaite. Rappelez-vous cela. Par exemple, je voulais "Wadgaon Sheri", et il me montre la route principale de Kharadi à proximité du parc informatique EON. J'ai donc ajouté "bureau de poste" à l'adresse. Et au lieu de "wadgaon sheri" j'ai utilisé le code PIN. Longue histoire courte, ne vous attendez pas Geocodeing à faire de la magie pour vous. Il y a de fortes chances que les API que vous utilisez finissent par obtenir les mêmes résultats, puisqu'ils utiliseront aussi le géocodage. – Siddharth