Después de utilizar la función pgr_drivingdistance() estoy intentando hacer un polígono con pgr_alphashape. Siguiendo el ejemplo que se encuentra en la documentación debo hacer lo siguiente: https://docs.pgrouting.org/2.4/en/pgr_alphaShape.html#pgr-alphashape
--Create a table with 1 Polygon where the agg_cost is lower then 5
DROP TABLE IF EXISTS temp.polygon;
CREATE TABLE schema.polygon as
SELECT ST_MakePolygon(ST_AddPoint(foo.openline,
ST_StartPoint(foo.openline)))
FROM (
SELECT ST_MakeLine(points ORDER BY id) AS openline
FROM (
SELECT ST_MakePoint(x, y) AS points, row_number() over() AS id
FROM pgr_alphaShape('
SELECT
source::integer as id,
ST_X(the_geom)::float as x,
ST_Y(the_geom)::float as y,
agg_cost as cost
from
temp.exampleresult as kar
INNER JOIN schema.table_vertices as vert
ON kar.source = vert.id
where agg_cost < 5;')
) AS a
) AS foo;
Funciona y genera un polígono. Sin embargo, el polígono se auto-interseca y tiene una forma extraña. ¿Dónde debería buscar para depurar?
Así que el objetivo es crear después de una red bien llena con pgr_drivingdistance() un polígono que se basa en el agg_cost.
Esto es lo que pretendo: https://anitagraser.com/2011/02/12/drive-time-isochrones/
Supongo que la secuencia de mis puntos no es correcta.
Ok, así que sin mi unión de la agg_cost funciona perfectamente para todos los vértices. Pero con la unión no lo hace:
DROP TABLE IF EXISTS temp.polygon;
CREATE TABLE schema.polygon as
SELECT ST_MakePolygon(ST_AddPoint(foo.openline,
ST_StartPoint(foo.openline)))
FROM (
SELECT ST_MakeLine(points ORDER BY id) AS openline
FROM (
SELECT ST_MakePoint(x, y) AS points, row_number() over() AS id
FROM pgr_alphaShape('
SELECT
source::integer as id,
ST_X(the_geom)::float as x,
ST_Y(the_geom)::float as y,
agg_cost as cost
from
schema.table_vertices')
) AS a
) AS foo;