Otra implementación.
Por lo tanto, si tus formas tienen líneas verticales perpendiculares a la línea horizontal, como se muestra en tu ilustración,
ejecuta el script:
CON
tbla COMO (SELECT ST_ShortestLine(a.geom, b.geom) geom DE (SELECT (ST_DumpPoints(geom)).geom DE polígono) a JOIN línea b ON true),
tblb COMO (SELECT geom, ST_Length(geom) longitud DE tbla AGRUPAR POR geom ORDENAR POR longitud DESC LIMIT 2)
SELECT ST_PointsInStarPolygon(geom) geom DE (SELECT ST_Union(geom) geom DE
(SELECT (ST_DumpPoints(geom)).geom DE tblb) a) b;
Además de las funciones básicas, no olvides la existencia de funciones personalizadas, como: ST_PointsInStarPolygon(https://gis.stackexchange.com/a/350004/120129) - desarrollado por Martin Davis - (usuario:14766).
¡Soluciones espaciales originales! :-)
Actualizar
¡dr-jts, así es como nacen nuevas funciones espaciales personalizadas simples escritas en GEO SQL! :-)
¡No dejaré que se desperdicien buenas herramientas geoespaciales escritas en lenguaje de programación SQL! :-)
CREAR O REEMPLAZAR FUNCION ST_SnapPolygonToLine(
geom1 GEOMETRÍA,
geom2 GEOMETRÍA)
DEVUELVE GEOMETRÍA COM
$BODY$
CON
tbla COMO (SELECT (ST_Dump($1)).geom),
tblb COMO (SELECT (ST_Dump($2)).geom),
tblc COMO (SELECT ST_ShortestLine(a.geom, b.geom) geom DE (SELECT (ST_DumpPoints(geom)).geom DE tbla) a JOIN tblb b ON true)
SELECT ST_PointsInStarPolygon(geom) geom DE (SELECT ST_Union(geom) geom DE
(SELECT (ST_DumpPoints(geom)).geom DE tblc) a) b;
$BODY$
LENGUAJE SQL
EJECUTAR
SELECT ST_SnapPolygonToLine(a.geom, b.geom) geom DE polígono a JOIN línea b ON true