How to calculate the length of LineString ( Geo Spatial )

How to calculate the length of a LineString without using PostGIS sql functions.

Can you elaborate on this requirement? If you’re using a PostGIS datastructure, why would you not use a PostGIS function? Is this some sort of school assignment?

You might be able to use sum of haversine distance between the end points of each segment in the string, if the geometry is projected over earth.

1 Like

I have the following model in my DB

%Task{geom: %Geo.LineString{coordinates: [...],  approx_distance: x, ...rest_of_fields}

And I have a Mobile app which send the current geolocation of a Truck to the backend to be appended to the coordinates of the Task

After appending the Point the backend logic calculate the length of the LineString then update the same Struct before updating the DB row.

I see, so you wan to basically increase the length of the approximate distance based on the new point. Then yeah I think @kanishka has the right answer. Use the Haversine formula to calculate the distance between the last point on your line, and the new point, then add that value to your approximate distance.

Probably an even shorter way using Ecto postgres function call or an elixir geo library. I don’t know them well.

I would use db, as Ben suggests. Example of using gis function from postgis elixir bindings:

query = from location in Location, limit: 5, select: st_distance(location.geom, ^geom)

Is there any Elixir library for doing this kind of calculation?

This seems to handle pairs of points - GitHub - yltsrc/geocalc: Geographic calculations for Elixir . Probably need extract out the line segment using the geo library first.