// decodeLocations takes a location argument string and decodes it. // This argument has three different forms, as per documentation at // https://developers.google.com/maps/documentation/elevation/#Locations func decodeLocations(location string) ([]maps.LatLng, error) { if strings.HasPrefix(location, "enc:") { return maps.DecodePolyline(location[len("enc:"):]), nil } if strings.Contains(location, "|") { return maps.ParseLatLngList(location) } // single location ll, err := maps.ParseLatLng(location) check(err) return []maps.LatLng{ll}, nil }
// decodePath takes a location argument string and decodes it. // This argument has two different forms, as per documentation at // https://developers.google.com/maps/documentation/elevation/#Paths func decodePath(path string) ([]maps.LatLng, error) { if strings.HasPrefix(path, "enc:") { return maps.DecodePolyline(path[len("enc:"):]), nil } result := []maps.LatLng{} if strings.Contains(path, "|") { // | delimited list of locations ls := strings.Split(path, "|") for _, l := range ls { ll, err := maps.ParseLatLng(l) check(err) result = append(result, ll) } return result, nil } return result, fmt.Errorf("Invalid Path argument: '%s'", path) }