Stadia's API sucks. They don't really tell you what their response will be in detail, just claim they are all the same, but they're not. Not even a little.
147 lines
5.6 KiB
Go
147 lines
5.6 KiB
Go
package stadia
|
|
|
|
/*
|
|
"address_components": {
|
|
"number": "3397",
|
|
"postal_code": "84065",
|
|
"street": "West Chatel Drive"
|
|
},
|
|
*/
|
|
type AddressComponents struct {
|
|
Number string `json:"number"`
|
|
PostalCode string `json:"postal_code"`
|
|
Street string `json:"street"`
|
|
}
|
|
type Country struct {
|
|
Abbreviation string `json:"abbreviation"`
|
|
GID string `json:"gid"`
|
|
Name string `json:"name"`
|
|
}
|
|
type County struct {
|
|
Abbreviation string `json:"abbreviation"`
|
|
GID string `json:"gid"`
|
|
Name string `json:"name"`
|
|
}
|
|
type Locality struct {
|
|
GID string `json:"gid"`
|
|
Name string `json:"name"`
|
|
}
|
|
type Region struct {
|
|
Abbreviation string `json:"abbreviation"`
|
|
GID string `json:"gid"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
/*
|
|
"country": {
|
|
"abbreviation": "USA",
|
|
"gid": "whosonfirst:country:85633793",
|
|
"name": "United States"
|
|
},
|
|
|
|
"county": {
|
|
"abbreviation": "SL",
|
|
"gid": "whosonfirst:county:102082877",
|
|
"name": "Salt Lake County"
|
|
},
|
|
|
|
"locality": {
|
|
"gid": "whosonfirst:locality:101728073",
|
|
"name": "Riverton"
|
|
},
|
|
|
|
"region": {
|
|
"abbreviation": "UT",
|
|
"gid": "whosonfirst:region:85688567",
|
|
"name": "Utah"
|
|
}
|
|
*/
|
|
type ContextWhosOnFirst struct {
|
|
Country Country `json:"country"`
|
|
County County `json:"county"`
|
|
Locality Locality `json:"locality"`
|
|
Region Region `json:"region"`
|
|
}
|
|
|
|
/*
|
|
"context": {
|
|
"iso_3166_a2": "US",
|
|
"iso_3166_a3": "USA",
|
|
"whosonfirst": {...}
|
|
}
|
|
}
|
|
*/
|
|
type Context struct {
|
|
ISO3166A2 string `json:"iso_3166_a2"`
|
|
ISO3166A3 string `json:"iso_3166_a3"`
|
|
WhosOnFirst ContextWhosOnFirst `json:"whosonfirst,omitempty"`
|
|
}
|
|
|
|
// GeocodeResponse represents the top-level response from the geocoding API
|
|
type GeocodeResponse struct {
|
|
BBox []float64 `json:"bbox"` // [W, S, E, N]
|
|
ErrorMessage string `json:"error,omitempty"`
|
|
Features []GeocodeFeature `json:"features"`
|
|
Geocode GeocodeMeta `json:"geocoding"`
|
|
Type string `json:"type"` // Should be "FeatureCollection"
|
|
}
|
|
|
|
// GeocodeMeta contains metadata about the geocoding request
|
|
type GeocodeMeta struct {
|
|
Attribution string `json:"attribution"`
|
|
Error string `json:"error,omitempty"` // v2
|
|
Errors []string `json:"errors,omitempty"` // v1
|
|
Query map[string]interface{} `json:"query,omitempty"`
|
|
Warnings []string `json:"warnings,omitempty"`
|
|
}
|
|
|
|
// GeocodeFeature represents a GeoJSON feature in the response
|
|
type GeocodeFeature struct {
|
|
Type string `json:"type"` // Should be "Feature"
|
|
Geometry GeocodeGeometry `json:"geometry"`
|
|
Properties GeocodeProperties `json:"properties"`
|
|
}
|
|
|
|
// GeocodeGeometry represents the GeoJSON geometry
|
|
type GeocodeGeometry struct {
|
|
Type string `json:"type"` // "Point", "Polygon", etc.
|
|
Coordinates []float64 `json:"coordinates"`
|
|
}
|
|
|
|
// GeocodeProperties contains the properties of a geocoding result
|
|
type GeocodeProperties struct {
|
|
Addendum map[string]interface{} `json:"addendum,omitempty"`
|
|
AddressComponents AddressComponents `json:"address_components,omitempty"`
|
|
Accuracy string `json:"accuracy"` // 'point'
|
|
Confidence float64 `json:"confidence"` // 1
|
|
Context Context `json:"context,omitempty"` // bunch of stuff
|
|
Country string `json:"country"` // 'United States'
|
|
CountryA string `json:"country_a"` // 'USA'
|
|
CountryCode string `json:"country_code"` // 'US'
|
|
CountryGID string `json:"country_gid"` // 'whosonfirst:country:85633793'
|
|
County string `json:"county"` // "Tulare County"
|
|
CountyA string `json:"county_a"` // 'TL'
|
|
CountyGID string `json:"county_gid"` // 'whosonfirst:county:102082895'
|
|
GID string `json:"gid"` // 'openaddresses:address:us/ca/tulare-addresses-county:fe9dfab3d45c4550'
|
|
HouseNumber string `json:"housenumber"` // '1234'
|
|
ID string `json:"id"` // us/ca/tulare-addresses-county:fe9dfab3d45c4550
|
|
Label string `json:"label"` // 1234 Main St, Dinuba, CA, USA
|
|
Layer string `json:"layer"` // 'address'
|
|
Locality string `json:"locality"` // 'Dinuba'
|
|
LocalityGID string `json:"locality_gid"` // 'whosonfirst:locality:85922491'
|
|
MatchType string `json:"match_type"` // 'exact'
|
|
Name string `json:"name"` // '1234 Main St'
|
|
PostalCode string `json:"postalcode"` // '93618'
|
|
Region string `json:"region"` // 'California'
|
|
RegionA string `json:"region_a"` // 'CA'
|
|
RegionGID string `json:"region_gid"` // 'whosonfirst:region:85688637'
|
|
Source string `json:"source"` // 'openaddresses'
|
|
SourceID string `json:"source"` // 'us/ca/tulare-addresses-county:fe9dfab3d45c4550'
|
|
Street string `json:"street"` // 'Main Street'
|
|
}
|
|
|
|
// GeocodeSource represents a source of geocoding data
|
|
type GeocodeSource struct {
|
|
Source string `json:"source"`
|
|
SourceID string `json:"source_id"`
|
|
}
|