Salut les développeurs de l'API GMaps. Pour commencer - quel produit et service incroyable que l'API Google Maps/JS v3 est - merci beaucoup! Maintenant, avec cette importante expression de gratitude sincère...
Les options short_name
vs long_name
pour les composants d'adresse sont une fonctionnalité intéressante, mais pour chaque service, ces deux attributs contiennent principalement les mêmes valeurs, sauf géocode a ce que je m'attendrais pour short_name
pour les deux et places a ce que je m'attendrais pour long_name
pour les deux! *larmes*
Avant la sortie de la bibliothèque Places, je pensais simplement que Google n'avait en fait pas de versions courte/longue pour le nom de rue, les localités, etc - mais maintenant il semble que vous le faites quelque part - peut-être que les équipes de produits différentes ont des bases de données différentes?
Alors, quelle est la question?
Image de ce dont je parle (j'aurais pu l’intégrer mais ceci est ma première question sur stackoverflow donc pas de réputation) : https://i.sstatic.net/3lJCg.png
Liste détaillée de comment je aimerais que cela fonctionne:
- pour les itinéraires,
short_name
de géocode pour places'long_name
- avoir la même valeur de "types" pour la localité/sous-localité entre géocode et places (n'importe laquelle est bien, choisissez juste une)
- fournir de manière cohérente court/long pour l'État (administrative_area_level_1) - géocode a juste mais places ne l'a pas
- pareil pour le pays - et d'où géocode tire son "USA" dans l'adresse formatée?
- ce serait bien si
long_name
depostal_code
avait le zip+4, mais j'imagine que ce serait un énorme effort du point de vue des données
Merci beaucoup - hâte d'avoir un aperçu de ce comportement!
Code derrière l'image:
GMaps API V3 Geocoder vs Places Address Components | Short vs Long Name
#map {height: 100px; width: 600px; border: 1px solid #333; margin-top: 0.6em; }
table { border-collapse: collapse; border-spacing: 0; }
table td {border-top: 1px solid #DDD; padding:4px 8px; }
var map, geocoder, places, geocode_components, geocode_formatted, places_components, places_formatted
function initialize() {
geocoder = new google.maps.Geocoder();
geocoder.geocode({'address': '3 South Main Street, York New Salem, PA'},
function (results, status) {
geocode_components = results[0].address_components;
geocode_formatted = results[0].formatted_address;
map = new google.maps.Map(document.getElementById('map'), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: results[0].geometry.location,
zoom: 10
});
places = new google.maps.places.PlacesService(map);
places.search({location: results[0].geometry.location, radius:100, keyword: "Pizza"},
function(results, status) {
//get details - this feels a little extraneous to me, but y'all know best
places.getDetails({reference: results[0].reference},
function(result, status) {
places_components = result.address_components;
places_formatted = result.formatted_address;
writeResults();
});
});
});
}
function writeResults() {
tbody = document.getElementById('results');
formatted = document.getElementById('formatted');
var rows = "";
for(var i=0; i<geocode_components.length; i++) {
var c = geocode_components[i];
rows = rows + '<tr><td>Géocodage</td><td>' + c.types[0] + '</td><td>' + c.short_name + '</td><td>' + c.long_name + '</td></tr>';
}
for(var i=0; i<places_components.length; i++) {
var c = places_components[i];
rows = rows + '<tr><td>Places</td><td>' + c.types[0] + '</td><td>' + c.short_name + '</td><td>' + c.long_name + '</td></tr>';
}
tbody.innerHTML = rows;
formatted.innerHTML = '<br />Formaté Géocodage: ' + geocode_formatted + '<br />' + 'Formaté de Places: ' + places_formatted;
}
google.maps.event.addDomListener(window, 'load', initialize);
ServiceTypeNom CourtNom Long