Skip to content

Instantly share code, notes, and snippets.

@nathanbarrett
Last active March 30, 2017 23:20
Show Gist options
  • Select an option

  • Save nathanbarrett/56946be077216cb2c8271db6851f2630 to your computer and use it in GitHub Desktop.

Select an option

Save nathanbarrett/56946be077216cb2c8271db6851f2630 to your computer and use it in GitHub Desktop.
Typescript function to get address components from a google place result. Some aliases thrown in for help
class Utils {
placeAddressComponents = {
street_number: {
selector: 'street_number',
defaultName: 'long_name',
},
route: {
selector: 'route',
defaultName: 'short_name',
},
neighborhood: {
selector: 'neighborhood',
defaultName: 'long_name',
},
locality: {
selector: 'locality',
defaultName: 'long_name',
},
administrative_area_level_1: {
selector: 'administrative_area_level_1',
defaultName: 'short_name',
},
administrative_area_level_2: {
selector: 'administrative_area_level_2',
defaultName: 'long_name',
},
country: {
selector: 'country',
defaultName: 'short_name',
},
city: {
selector: 'locality',
defaultName: 'long_name',
},
postal_code: {
selector: 'postal_code',
defaultName: 'short_name',
},
zip: {
selector: 'postal_code',
defaultName: 'short_name',
},
street: {
selector: 'route',
defaultName: 'short_name',
},
county: {
selector: 'administrative_area_level_2',
defaultName: 'long_name',
},
state: {
selector: 'administrative_area_level_1',
defaultName: 'short_name',
},
nation: {
selector: 'country',
defaultName: 'long_name',
},
};
constructor () { }
/** Gets an address component from a google place result */
public getFromGPlace(item: string, place: google.maps.places.PlaceResult, nameType?: string): string | null {
if (item === 'streetAddress' || item === 'street_address') {
return this.getFromGPlace('street_number', place) + ' ' + this.getFromGPlace('route', place);
}
let type = this.placeAddressComponents[item];
if (!type) throw new Error('Not a valid address component: ' + item);
if (nameType) {
type.defaultName = nameType;
}
for (let comp of place.address_components) {
if (comp.types.indexOf(type.selector) >= 0) {
return comp[type.defaultName];
}
}
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment