How to find the center point of MULTILINESTRING, which lies on the multiline?
I am using SQL in PostGIS
Here's an algorithm that will work for a use case such as a single road with a T-intersection.
or even simpler
SELECT ST_ClosestPoint(geom, ST_Centroid(geom) FROM table;
Have a look at
If you give 0.5 as the second parameter, it will return a point 1/2 way along the line.
BTW, if your layer is a MULTILINESTRING, then "center point" really doesn't have any meaning. For example, a MULTILINESTRING can be non-contiguous or intersecting LINESTRINGs.
I have found, the function is called ST_PointOnSurface.
We're looking for long answers that provide some explanation and context. Don't just give a one-line answer; explain why your answer is right, ideally with citations. Answers that don't include explanations may be removed.
Technically speaking , you won't find it everytime.
MULTILINESTRING may be collection of strings which may or may not touch eachother.
If Your data type is LINESTRING then you can have middle point every time, @Micha has correct answer for that.
In case anyone else was struggling with this like me...
ST_PointOnSurface() didn't give me the midpoint of the line string.
First I had to merge the multilinestrings with ST_LineMerge() and pass that to ST_LineInterpolatePoint().
Select ST_LineInterpolatePoint( ST_LineMerge(geom) , 0.50) From FeatureTable
According to this answer you have to have valid geometries in order to do this. Basically your multilinestrings cannot cross or intersect.
Lastly I'm very new to PostGIS so if anyone has anything to add or correct here please share.