naeemqaswar
10/3/2017 - 10:35 AM

Geocode API: Address Components

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
  };
}