You can use QGIS for that. There are at least three possibilities to interpolate points:
- In the middle between two neighboring points
- A constant number of interpolated dots between each two neighboring points (constant percentage of the whole distance between two points)
- At a regular interval (constant distance between two points)
Each solution works in the geometry generator as you can see on the screenshots. This is for visualization only. If you want to create actual geometries, use Menu Processing / Toolbox / Geometry by expression
. Both versions require the same expression for each solution.
What you need: a unique identifier in the sequence along the path. This can be a timestamp - I used the field id
. Change it accordingly if you use another field.
Solution 1
You can interpolate points simply be adding the coordiantes (x and y separately) of each feautre with each next feature and dividing it by 2 (to get a point in the middle). Use the following expression:
make_point (
(
x + attribute (
get_feature_by_id (
@layer,
$id + 1
),
'x'
)
) / 2 ,
(
y + attribute (
get_feature_by_id (
@layer,
$id + 1
),
'y'
)
)/2
)
See screenshot: the white dots are interpolated from the original red ones:

Solution 2
If you want more than just one interpolated point between each point you have, you can use the following expression. It creates a series (in this case here: from 1 to 10) and for each value, you get an interpolated point on the line from one point to the next point, in the distance of 0.1, 0.2, 0.3 etc. You can change the expression accordingly. If you want points at 1/4, 2/4 and 3/4 of the line, change the third line to: generate_series (0.25, 0.75, 0.25),
and line 16 to * @element,
simply:
collect_geometries (
array_foreach (
generate_series (1,10),
project (
$geometry,
length (
make_line (
$geometry,
geometry (
get_feature_by_id (
@layer,
$id+1
)
)
)
) *to_real ('0.' || @element),
azimuth (
$geometry,
geometry (
get_feature_by_id (
@layer,
$id+1
)
)
)
)
)
)
Screenshot: interpolated dots at 1/10, 2/10, 3/10 etc. between two points:

Solution 3
And there is a third option: you can create interpolated points at regular distances, thus depending on how close the original points are to each other, the number of interpolated points will vary. The solution is similar, using this expression. In this example, I used a distance of 4 for the points to be interpolated: change this accordingly in line 13 and 16:
collect_geometries (
array_foreach (
generate_series (
1,
length (
make_line (
$geometry,
geometry (
get_feature_by_id (
@layer,
$id+1
)
)
)
) /4),
project (
$geometry,
4 * @element,
azimuth (
$geometry,
geometry (
get_feature_by_id (
@layer,
$id+1
)
)
)
)
)
)
Screenshot: interpolated points at regular intervals:
