Add endpoint for fetching address from coordinates
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
|||||||
"googlemaps.github.io/maps"
|
"googlemaps.github.io/maps"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -21,6 +22,10 @@ type location struct {
|
|||||||
Long float64 `json:"longitude"`
|
Long float64 `json:"longitude"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type address struct {
|
||||||
|
Address string `json:"address"`
|
||||||
|
}
|
||||||
|
|
||||||
type distance struct {
|
type distance struct {
|
||||||
Text string `json:"text"`
|
Text string `json:"text"`
|
||||||
Value int `json:"value"`
|
Value int `json:"value"`
|
||||||
@@ -60,6 +65,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
http.HandleFunc("/latlong/", makeHandler(handleLatLongRequest, client))
|
http.HandleFunc("/latlong/", makeHandler(handleLatLongRequest, client))
|
||||||
|
http.HandleFunc("/address/", makeHandler(handleAddressRequest, client))
|
||||||
http.HandleFunc("/distance/", makeHandler(handleDistanceMatrixRequest, client))
|
http.HandleFunc("/distance/", makeHandler(handleDistanceMatrixRequest, client))
|
||||||
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", cfg.Port), nil))
|
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", cfg.Port), nil))
|
||||||
}
|
}
|
||||||
@@ -82,7 +88,7 @@ func handleDistanceMatrixRequest(w http.ResponseWriter, r *http.Request, client
|
|||||||
}
|
}
|
||||||
|
|
||||||
if result, err := client.DistanceMatrix(context.Background(), req); err != nil {
|
if result, err := client.DistanceMatrix(context.Background(), req); err != nil {
|
||||||
log.Fatalf("fatal error: %s", err)
|
log.Fatalf("matrix fatal error: %s", err)
|
||||||
w.WriteHeader(400)
|
w.WriteHeader(400)
|
||||||
} else {
|
} else {
|
||||||
res := distanceResponse{}
|
res := distanceResponse{}
|
||||||
@@ -114,6 +120,31 @@ func handleDistanceMatrixRequest(w http.ResponseWriter, r *http.Request, client
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func handleAddressRequest(w http.ResponseWriter, r *http.Request, client *maps.Client) {
|
||||||
|
p := strings.Split(r.URL.Path[len("/address/"):], ",")
|
||||||
|
lat, _ := strconv.ParseFloat(p[0], 64)
|
||||||
|
lng, _ := strconv.ParseFloat(p[1], 64)
|
||||||
|
req := &maps.GeocodingRequest{
|
||||||
|
LatLng: &maps.LatLng{Lat: lat, Lng: lng},
|
||||||
|
}
|
||||||
|
if result, err := client.Geocode(context.Background(), req); err != nil {
|
||||||
|
log.Fatalf("fatal error: %s", err)
|
||||||
|
w.WriteHeader(400)
|
||||||
|
} else {
|
||||||
|
if len(result) > 0 {
|
||||||
|
l := address{
|
||||||
|
Address: result[0].FormattedAddress,
|
||||||
|
}
|
||||||
|
if response, err := json.Marshal(l); err != nil {
|
||||||
|
log.Fatalf("fatal error: %s", err)
|
||||||
|
w.WriteHeader(404)
|
||||||
|
} else {
|
||||||
|
_, _ = w.Write(response)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func handleLatLongRequest(w http.ResponseWriter, r *http.Request, client *maps.Client) {
|
func handleLatLongRequest(w http.ResponseWriter, r *http.Request, client *maps.Client) {
|
||||||
req := &maps.GeocodingRequest{
|
req := &maps.GeocodingRequest{
|
||||||
Address: r.URL.Path[len("/latlong/"):],
|
Address: r.URL.Path[len("/latlong/"):],
|
||||||
|
|||||||
Reference in New Issue
Block a user