## Optimize route through waypoints `client.Optimize.New(ctx, body) (*OptimizeResult, error)` **post** `/api/v1/optimize` Optimize route through waypoints ### Parameters - `body OptimizeNewParams` - `OptimizeRequest param.Field[OptimizeRequest]` Route optimization request through waypoints ### Returns - `type OptimizeResult interface{…}` Optimization response — either a completed GeoJSON Feature route or an async job reference - `type OptimizeCompletedResult struct{…}` Completed optimization — GeoJSON Feature with optimized route - `Geometry GeoJsonGeometry` - `Coordinates GeoJsonGeometryCoordinatesUnion` GeoJSON coordinates array (nesting depth varies by geometry type) - `type GeoJsonGeometryCoordinatesArray []float64` - `type GeoJsonGeometryCoordinatesArray [][]float64` - `type GeoJsonGeometryCoordinatesArray [][][]float64` - `type GeoJsonGeometryCoordinatesArray [][][][]float64` - `Type GeoJsonGeometryType` - `const GeoJsonGeometryTypePoint GeoJsonGeometryType = "Point"` - `const GeoJsonGeometryTypeLineString GeoJsonGeometryType = "LineString"` - `const GeoJsonGeometryTypePolygon GeoJsonGeometryType = "Polygon"` - `const GeoJsonGeometryTypeMultiPoint GeoJsonGeometryType = "MultiPoint"` - `const GeoJsonGeometryTypeMultiLineString GeoJsonGeometryType = "MultiLineString"` - `const GeoJsonGeometryTypeMultiPolygon GeoJsonGeometryType = "MultiPolygon"` - `Properties OptimizeCompletedResultProperties` - `Distance float64` Total distance in meters - `Duration float64` Estimated duration in seconds - `WaypointOrder []int64` Optimized waypoint ordering - `Status OptimizeCompletedResultStatus` Job status - `const OptimizeCompletedResultStatusCompleted OptimizeCompletedResultStatus = "completed"` - `Type OptimizeCompletedResultType` - `const OptimizeCompletedResultTypeFeature OptimizeCompletedResultType = "Feature"` - `type OptimizeProcessingResult struct{…}` Async optimization in progress — poll with the job_id - `JobID string` Job ID for polling - `Status OptimizeProcessingResultStatus` Job status - `const OptimizeProcessingResultStatusProcessing OptimizeProcessingResultStatus = "processing"` ### Example ```go package main import ( "context" "fmt" "github.com/plazafyi/plaza-go" "github.com/plazafyi/plaza-go/option" ) func main() { client := githubcomplazafyiplazago.NewClient( option.WithAPIKey("My API Key"), ) optimizeResult, err := client.Optimize.New(context.TODO(), githubcomplazafyiplazago.OptimizeNewParams{ OptimizeRequest: githubcomplazafyiplazago.OptimizeRequestParam{ Waypoints: githubcomplazafyiplazago.F(githubcomplazafyiplazago.GeoJsonGeometryParam{ Coordinates: githubcomplazafyiplazago.F[githubcomplazafyiplazago.GeoJsonGeometryCoordinatesUnionParam](githubcomplazafyiplazago.GeoJsonGeometryCoordinatesArrayParam([]float64{0.000000})), Type: githubcomplazafyiplazago.F(githubcomplazafyiplazago.GeoJsonGeometryTypePoint), }), }, }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", optimizeResult) } ```