GOSRM is an OSRM client written in Go. It implements all OSRM 5.x installations.
If you want to get the most out of this package I highly recommend to read OSRM docs.
- Nearest Service
- Route Service
- Table Service
- Match Service
- Trip Service
- Tile Service
Requires Go >= 1.18: go get github.com/mojixcoder/gosrm
package main import ( "context" "fmt" "github.com/mojixcoder/gosrm" ) func main() { osrm, err := gosrm.New("http://router.project-osrm.org") checkErr(err) nearestRes, err := gosrm.Nearest(context.Background(), osrm, gosrm.Request{ Profile: gosrm.ProfileDriving, Coordinates: []gosrm.Coordinate{{13.388860, 52.517037}}, }, gosrm.WithNumber(3), gosrm.WithBearings([]gosrm.Bearing{{Value: 0, Range: 20}})) checkErr(err) fmt.Println("### Nearest Response ###") fmt.Printf("%#v\n", nearestRes) fmt.Println("##########") // String type represents the type of geometries returned by OSRM. // It can be either string or gosrm.LineString based on geometries option. // If you don't specify any geometries the default is polyline and you can use string. routeRes, err := gosrm.Route[string](context.Background(), osrm, gosrm.Request{ Profile: gosrm.ProfileDriving, Coordinates: []gosrm.Coordinate{{13.388860, 52.517037}, {13.397634, 52.529407}, {13.428555, 52.523219}}, }) checkErr(err) fmt.Println("\n### Route Response ###") fmt.Printf("%#v\n", routeRes) fmt.Println("##########") tableRes, err := gosrm.Table(context.Background(), osrm, gosrm.Request{ Profile: gosrm.ProfileDriving, Coordinates: []gosrm.Coordinate{{13.388860, 52.517037}, {13.397634, 52.529407}, {13.428555, 52.523219}}, }, gosrm.WithSources([]uint16{0, 1}), gosrm.WithDestinations([]uint16{2})) checkErr(err) fmt.Println("\n### Table Response ###") fmt.Printf("%#v\n", tableRes) fmt.Println("##########") // This time we use geojson geometries so geometry type is gosrm.LineString not string. matchRes, err := gosrm.Match[gosrm.LineString](context.Background(), osrm, gosrm.Request{ Profile: gosrm.ProfileDriving, Coordinates: []gosrm.Coordinate{{13.3122, 52.5322}, {13.3065, 52.5283}}, }, gosrm.WithAnnotations(gosrm.AnnotationsTrue), gosrm.WithGeometries(gosrm.GeometryGeoJSON)) checkErr(err) fmt.Println("\n### Match Response ###") fmt.Printf("%#v\n", matchRes) fmt.Println("##########") tripRes, err := gosrm.Trip[string](context.Background(), osrm, gosrm.Request{ Profile: gosrm.ProfileDriving, Coordinates: []gosrm.Coordinate{{13.388860, 52.517037}, {13.397634, 52.529407}, {13.428555, 52.523219}, {13.418555, 52.523215}}, }, gosrm.WithSource(gosrm.SourceFirst), gosrm.WithDestination(gosrm.DestinationLast)) checkErr(err) fmt.Println("\n### Trip Response ###") fmt.Printf("%#v\n", tripRes) fmt.Println("##########") } func checkErr(err error) { if err != nil { panic(err) } }