J'ai créé une fonction pour prendre l'entrée de localisation, la transmettre à Google Maps Javascript API V2, et retourner une adresse normalisée latitude/longitude/que je vais devoir scinder en différents champs dans une base de données (c.-à-d. ville, état, postal). J'exige au moins un level 5/post code accuracy pour l'entrée de sorte que les données renvoyées par Google seront toujours ...API Google Maps ne renvoyant parfois pas le code postal dans AddressDetails
- Pays
- Ville (Localité)
- État (administrative)
- Postal
- Lat/long
Voici quelques informations sur la structure d'objet JSON que les rendements Google. http://code.google.com/apis/maps/documentation/javascript/v2/services.html#Geocoding_Structured
Problème: Pour certains cas, Placemark.AddressDetails ne comprend pas un code postal, alors que le résumé Placemark.address comprendra le code postal. Par exemple, les exemples d'entrée suivants renvoient un code postal dans Placemark.address, mais pas Placemark.AddressDetails;
- 10437 Innovation Drive, Milwaukee, WI 53226
- MOMA
- Empire State Building -> ce retourne en fait le code postal à l'intérieur de quelque bizarre "DependentLocality" sous SubAdministrativeArea.Locality
Voici mon code de dépannage:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<!-- You must insert your maps API script here. -->
<script language="javascript" type="text/javascript" src="http://www.json.org/json2.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
var geocoder = new GClientGeocoder();
$.geolocateAddress = function(address)
{
geocoder.getLocations(address, function(response)
{
if (response != null && response.Placemark != undefined)
{
var placemark = response.Placemark[0];
// Placemark has Post code or higher accuracy -> http://code.google.com/apis/maps/documentation/javascript/v2/reference.html#GGeoAddressAccuracy
if (placemark.AddressDetails.Accuracy >= 5)
{
alert(placemark.address);
try {
alert(placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber);
} catch (err) {
alert('What the deuce? Why is there no postal code?... I bet you the placemark.address has the postal code.');
alert(JSON.stringify(placemark));
}
} else {
alert('Sorry, this requires at least a postal code input for accuracy')
}
} else {
alert('Failed to geo locate address');
}
});
};
$("#location").blur(function(event)
{
var address = $("#location").val();
$.geolocateAddress(address);
});
});
</script>
<form action="" method="get">
<input title="Location" type="text" value="" id="location" />
</form>
Ouf ... Y at-il quelque chose que je suis simplement ne pas comprendre le schéma des repères Google Maps? Serais-je capable de résoudre ce problème en passant à Google Maps Javascript API V3? (V2 objets JSON semble plus intuitive IMO) http://code.google.com/apis/maps/documentation/javascript/services.html
Je suis sur le point de jeter l'éponge sur ce point. J'espère que quelqu'un peut aider!
Génial. Je vais essayer d'utiliser l'API V3, voir si cela résout mon problème, et vous faire connaître le résultat. Merci! –
Juste implémenté. V3 est beaucoup plus robuste que V2 ... c'est un peu bizarre de devoir parcourir it_adresse_components pour trouver le 'type' que je veux, si je devais isoler un code postal par exemple. Cela semble très bien fonctionner. Merci! –
Je ne pense pas que la version de l'API soit importante ici. S'il y a un numéro de porte/rue, l'adresse complète est retournée. Je n'ai pas beaucoup testé cela, mais il semble fonctionner avec mes tests aléatoires. http://maps.googleapis.com/maps/api/geocode/json?address=1,piscataway,nj&sensor=false – mccbala