Last active
March 30, 2017 23:20
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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