Overview
Some jobs may not have explicit locations but need to inherit them from related jobs. This is useful for scenarios like:
- Pickup and delivery where delivery inherits pickup location
- Multi-stop visits where subsequent stops inherit the previous location
- Tasks that must be performed at the same location as another job
Example Request
This example demonstrates jobs with inherited locations where Job 2 will inherit its location from Job 1.
{
"resources": [
{
"id": "v1",
"name": "Vehicle 1",
"shifts": [
{
"id": "shift1",
"start": {
"location": {"lat": 51.1079, "lon": 17.0385},
"time": "2024-01-01T08:00:00Z"
},
"end": {
"location": {"lat": 51.1079, "lon": 17.0385},
"time": "2024-01-01T18:00:00Z"
},
"capacity": [100]
}
]
}
],
"jobs": [
{
"id": "job1",
"name": "Job 1",
"location": {"lat": 51.1279, "lon": 17.0485},
"serviceDurationInSeconds": 900,
"windows": [["2024-01-01T09:00:00Z", "2024-01-01T17:00:00Z"]],
"load": [10]
},
{
"id": "job2",
"name": "Job 2 (Inherited Location)",
"serviceDurationInSeconds": 600,
"windows": [["2024-01-01T09:00:00Z", "2024-01-01T17:00:00Z"]],
"load": [5],
"relations": [
{
"type": "same_vehicle",
"jobs": ["job1", "job2"]
}
]
}
]
}
Key Points
- No Location Specified: Job 2 has no
location
field
- Relation Constraint: The
same_vehicle
relation ensures both jobs are served by the same vehicle
- Inherited Behavior: When Job 2 is scheduled after Job 1, it inherits Job 1’s location
- Travel Time: No travel time is calculated between jobs at the same inherited location
- Capacity: The
capacity
and load
arrays must have matching dimensions
Response Example
{
"solution": {
"routes": [
{
"resourceId": "v1",
"shiftId": "shift1",
"activities": [
{
"type": "start",
"location": {"lat": 51.1079, "lon": 17.0385},
"time": {
"arrival": "2024-01-01T08:00:00Z",
"departure": "2024-01-01T08:00:00Z"
}
},
{
"type": "job",
"jobId": "job1",
"location": {"lat": 51.1279, "lon": 17.0485},
"time": {
"arrival": "2024-01-01T08:10:00Z",
"departure": "2024-01-01T08:25:00Z"
},
"travelTimeInSeconds": 600,
"distanceInMeters": 2500
},
{
"type": "job",
"jobId": "job2",
"location": {"lat": 51.1279, "lon": 17.0485},
"time": {
"arrival": "2024-01-01T08:25:00Z",
"departure": "2024-01-01T08:35:00Z"
},
"travelTimeInSeconds": 0,
"distanceInMeters": 0
},
{
"type": "end",
"location": {"lat": 51.1079, "lon": 17.0385},
"time": {
"arrival": "2024-01-01T08:45:00Z"
}
}
]
}
]
}
}
Note how Job 2 shows the same location as Job 1 and has zero travel time/distance from the previous activity.
Use Cases
- Service Continuity: Multiple services at the same customer location
- Grouped Tasks: Tasks that must be performed together at one location
- Dynamic Locations: Jobs where the location depends on the execution order