Go SDK for the HERE Maps API.
API documentation can be found at developer.here.com.
$ go get go.einride.tech/here
The package does not directly handle authentication. Instead, when creating a
new client, pass an http.Client
that can handle authentication for you.
Note that when using an authenticated Client, all calls made by the client will include the same authentication data. Therefore, authenticated clients should almost never be shared between different users.
package main
import (
"context"
"fmt"
"net/http"
"os"
"go.einride.tech/here/routingv7"
)
func main() {
ctx := context.Background()
apiKey := os.Getenv("HERE_API_KEY")
// Create an authenticated client
routingClient := routingv7.New(
routingv7.NewAPIKeyHTTPClient(apiKey, http.DefaultClient.Transport),
)
// Einride Gothenburg.
origin := &routingv7.GeoWaypoint{
Lat: 57.707752,
Long: 11.949767,
}
// Einride Stockholm.
destination := &routingv7.GeoWaypoint{
Lat: 59.337492,
Long: 18.063672,
}
// Call Here Maps API
response, err := routingClient.Route.CalculateRoute(ctx, &routingv7.CalculateRouteRequest{
Waypoints: []routingv7.WaypointParameter{origin, destination},
Mode: routingv7.RoutingMode{
Type: routingv7.RouteTypeFastest,
},
})
if err != nil {
panic(err) // TODO: Handle error.
}
// Handle result
for _, route := range response.Routes {
fmt.Println(route.Summary)
}
}
package main
import (
"context"
"fmt"
"net/http"
"os"
"go.einride.tech/here/routingv8"
)
func main() {
ctx := context.Background()
apiKey := os.Getenv("HERE_API_KEY")
// Create an authenticated client
routingClient := routingv8.New(
routingv8.NewAPIKeyHTTPClient(apiKey, http.DefaultClient.Transport),
)
// Einride Gothenburg.
origins := []*routingv8.GeoWaypoint{
{
Lat: 57.707752,
Long: 11.949767,
},
}
// Einride Stockholm.
destinations := []*routingv8.GeoWaypoint{
{
Lat: 59.337492,
Long: 18.063672,
},
}
// Call Here Maps API
response, err := routingClient.Matrix.CalculateMatrix(ctx, &routingv8.CalculateMatrixRequest{
Async: false,
Body: &routingv8.CalculateMatrixBody{
Origins: origins,
Destinations: destinations,
RegionDefinition: routingv8.RegionDefinition{
Type: routingv8.RegionType_World,
},
Profile: routingv8.Profile_TruckFast,
MatrixAttributes: &routingv8.MatrixAttributes{
routingv8.MatrixAttribute_Distances,
routingv8.MatrixAttribute_TravelTimes,
},
},
})
if err != nil {
panic(err) // TODO: handle error
}
// Handle result
fmt.Printf("matrix ID: %s \n", response.MatrixID)
for i, distance := range response.Matrix.Distances {
fmt.Printf("Route %d: %d meters \n", i, distance)
}
}
package main
import (
"context"
"fmt"
"net/http"
"os"
"go.einride.tech/here/geocodingsearchv7"
)
func main() {
ctx := context.Background()
apiKey := os.Getenv("HERE_API_KEY")
// Create an authenticated client
geocodingClient := geocodingsearchv7.NewClient(
geocodingsearchv7.NewAPIKeyHTTPClient(apiKey, http.DefaultClient.Transport),
)
// The query to geocode
q := "Regeringsgatan 65, Stocholm"
// Call Here Maps API
response, err := geocodingClient.Geocoding.Geocoding(ctx, &geocodingsearchv7.GeocodingRequest{
Q: &q,
})
if err != nil {
panic(err) // TODO: handle error
}
// Handle result
for _, item := range response.Items {
fmt.Printf("Geocoded location lat/lng: %f %f \n", item.Position.Lat, item.Position.Long)
}
}