45 lines
965 B
Go
45 lines
965 B
Go
package geo
|
|
|
|
import (
|
|
"io"
|
|
"net/http"
|
|
|
|
"github.com/paulmach/orb/geojson"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
type GeoService struct {
|
|
geoType string
|
|
baseURL string
|
|
autocompleteURL string
|
|
}
|
|
|
|
func NewGeoService(geoType, baseURL, autocompleteEndpoint string) *GeoService {
|
|
return &GeoService{
|
|
geoType: geoType,
|
|
baseURL: baseURL,
|
|
autocompleteURL: baseURL + autocompleteEndpoint,
|
|
}
|
|
}
|
|
|
|
func (s *GeoService) Autocomplete(text string) (*geojson.FeatureCollection, error) {
|
|
resp, err := http.Get(s.autocompleteURL + text)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
body, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to read response body")
|
|
return nil, err
|
|
}
|
|
|
|
featureCollection, err := geojson.UnmarshalFeatureCollection(body)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to unmarshal feature collection")
|
|
return nil, err
|
|
}
|
|
|
|
return featureCollection, nil
|
|
} |