Following function extracts best address components from the response of geocode api
console.log(geocodePosition({lat: -33.8688, lng: 151.2195}));
function geocodePosition(pos) {
geocoder.geocode({
latLng: pos
}, function(responses) {
if (responses && responses.length > 0) {
marker.formatted_address = get_geocode_formatted_address(responses);
} else {
marker.formatted_address = 'Cannot determine address at this location.';
}
$('#searchInput').val(marker.formatted_address);
});
}
function get_geocode_formatted_address(results){
var geocode_address_segments = get_geocode_address_segments(results);
var street = geocode_address_segments['street'];
var region = geocode_address_segments['region'];
var country = geocode_address_segments['country'];
var formatted_address = street + " " + region + ", " + country;
return formatted_address;
}
function get_geocode_address_segments(results) {
var street_number = '';
var route = '';
var region = '';
var country = '';
var country_iso = '';
for (var j=0; j<results.length; j++)
{
for (var i=0; i<results[j].address_components.length; i++)
{
if(!street_number){
if (results[j].address_components[i].types[0] == "street_number") {
street_number = results[j].address_components[i].long_name+' ';
}
}
if(!route){
if (results[j].address_components[i].types[0] == "route") {
route += results[j].address_components[i].long_name;
}
}
if(!region){
if (results[j].address_components[i].types[0] == "administrative_area_level_1") {
region = results[j].address_components[i].long_name;
}
}
if(!country){
if (results[j].address_components[i].types[0] == "country") {
country = results[j].address_components[i].long_name;
country_iso = results[j].address_components[i].short_name;
}
}
if(route && region && country){
break;
}
}
}
return {
'street':street_number+route,
'region':region,
'country':country,
'country_iso':country_iso
};
}
function get_single_geocode_address_segments(result) {
var street_number = '';
var route = '';
var region = '';
var country = '';
var country_iso = '';
for (var i = 0; i < result.address_components.length; i++) {
if (!street_number) {
if (result.address_components[i].types[0] == "street_number") {
street_number = result.address_components[i].long_name + ' ';
}
}
if (!route) {
if (result.address_components[i].types[0] == "route") {
route += result.address_components[i].long_name;
}
}
if (!region) {
if (result.address_components[i].types[0] == "administrative_area_level_1") {
region = result.address_components[i].long_name;
}
}
if (!country) {
if (result.address_components[i].types[0] == "country") {
country = result.address_components[i].long_name;
country_iso = result.address_components[i].short_name;
}
}
if (route && region && country) {
break;
}
}
return {
'street': street_number + route,
'region': region,
'country': country,
'country_iso': country_iso
};
}