Geopandas uses shapely for geometry manipulations. In shapely representative_point
is a call to the GEOSPointOnSurface
method in the GEOS C library. The GEOS library is also used by PostGIS, so I'm copying the answer from this similar questions here: https://gis.stackexchange.com/a/76563
If you want to search thru the GEOS library for exactly how things are done, it is common to have to dig 5+ method calls deep to come to the actual algorithm.
Based on a few experiments, I think ST_PointOnSurface()
works roughly like this, if the geometry is a polygon:
- Trace an east-west ray, lying half-way between the northern and
southern extents of the polygon.
- Find the longest segment of the ray
that intersects the polygon.
- Return the point that is half-way along said segment.
That may not make sense, so here's a sketch of a polygon with a ray dividing it into a northern and southern parts:
_
/ \ <-- northern extent
/ \
/ \
/ \
/ \ __
/ \ / \
/_ _ _ P _ _ _\ / _ _\ P = point-on-surface
/ \/ \
/ \
/ C \ C = centroid
/ \
/ /
/______________________________/ <-- southern extent
Thus, ST_PointOnSurface()
and ST_Centroid()
are usually different points, even on convex polygons.
The only reason for the "surface" in the name, I think, is that if the geometry has 3D lines then the result will be simply be one of the vertexes.
I would agree that more explanation (and better naming) would have been useful and hope a GEOS programmer might shed some more light on the matter.