2016-07-11 1 views
2

J'utilise ce java libraraygoogle maps-services en résultat de la bibliothèque java diffère du résultat d'appel du navigateur

<dependency> 
     <groupId>com.google.maps</groupId> 
     <artifactId>google-maps-services</artifactId> 
     <version>0.1.15</version> 
</dependency> 

Et quand j'exécute le code ci-dessous

public static GeocodingResult getGeocode(String address) { 
    GeocodingResult[] results; 
    try { 
     GeoApiContext context = new GeoApiContext().setApiKey(GOOGLE_KEY); 
     results = GeocodingApi.geocode(context, address).await(); 
     if (results.length > 0) { 
      return results[0]; 
     } else { 
      return null; 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
     return null; 
    } 
} 

public static void main(String[] args) { 
     GeocodingResult geocode = getGeocode("Imanova 19, Astana"); 

     System.out.println(geocode.geometry.location.lat); 
} 

Résultat donne

INFO: Request: https://maps.googleapis.com/maps/api/geocode/json?key=MY_GOOGLE_KEY&address=Imanova+19%2C+Astana 
51.16052269999999 

Mais, lorsque j'essaie d'appeler la même requête donnée depuis le navigateur, cela donne un autre résultat.

enter image description here

La question est, pourquoi et comment résoudre?

Modifier des commentaires:

Résultat de https://maps.googleapis.com/maps/api/geocode/json?address=Imanova+19%2C+Astana

{ 
    "results" : [ 
     { 
     "address_components" : [ 
      { 
       "long_name" : "Astaná", 
       "short_name" : "Astaná", 
       "types" : [ "locality", "political" ] 
      }, 
      { 
       "long_name" : "Astana", 
       "short_name" : "Astana", 
       "types" : [ "administrative_area_level_1", "political" ] 
      }, 
      { 
       "long_name" : "Kazajistán", 
       "short_name" : "KZ", 
       "types" : [ "country", "political" ] 
      }, 
      { 
       "long_name" : "020000", 
       "short_name" : "020000", 
       "types" : [ "postal_code" ] 
      } 
     ], 
     "formatted_address" : "Astaná 020000, Kazajistán", 
     "geometry" : { 
      "bounds" : { 
       "northeast" : { 
        "lat" : 51.2903453, 
        "lng" : 71.7427397 
       }, 
       "southwest" : { 
        "lat" : 51.0055461, 
        "lng" : 70.9179879 
       } 
      }, 
      "location" : { 
       "lat" : 51.16052269999999, 
       "lng" : 71.47035579999999 
      }, 
      "location_type" : "APPROXIMATE", 
      "viewport" : { 
       "northeast" : { 
        "lat" : 51.2903453, 
        "lng" : 71.7427397 
       }, 
       "southwest" : { 
        "lat" : 51.0055461, 
        "lng" : 70.9179879 
       } 
      } 
     }, 
     "partial_match" : true, 
     "place_id" : "ChIJCUa1fcSARUIRKJKx3Y0U-Zc", 
     "types" : [ "locality", "political" ] 
     } 
    ], 
    "status" : "OK" 
} 
+1

Interrogation https://maps.googleapis.com/maps/api/geocode/json?address=Imanova+19%2C+Astana en utilisant Chrome je reçois ' » lat ": 51.16052269999999' avec" "location_type": "APPROXIMATE" '. Quelle est votre 'location_type'? – antonio

+0

mon emplacement_type est ROOFTOP. Je suis également en train de tester en utilisant Chrome. Mais pourquoi avons-nous différents types? comment affecter à ce type? – Bagdat

+0

Selon https://developers.google.com/maps/documentation/geocoding/intro 'ROOFTOP'" indique que le résultat renvoyé est un géocodage précis pour lequel nous avons des informations de localisation précises jusqu'à la précision de l'adresse ". Je demande sans clé API – antonio

Répondre

0

Cette réponse https://stackoverflow.com/a/30749036/1862262 décrit complètement la solution à mon problème.

De la même manière je définir la région

GeocodingResult[] results = GeocodingApi.geocode(context, address).region("KZ").await(); 

et a obtenu le même résultat que le résultat dans le navigateur.

Mais je ne sais pas quelle région il faut si ce n'est pas défini.

Voici la documentation sur cette option et problème https://developers.google.com/maps/documentation/geocoding/#RegionCodes