Actualmente estoy trabajando en una red de alumbrado público. Tengo dos capas en PostGIS ( PostGIS 2.1.3 y PostgreSQL 9.3.5):
- Pozos de registro (56.000 polígonos)
- Tuberías (Linestring)
Los pozos son rectángulos perfectos compuestos por 4 nodos (vértices).
Tengo que digitalizar todas las tuberías desde cada pozo hasta los demás pozos.
Al digitalizar las tuberías, he activado el snapping, pero como las arquetas no tienen nodos centrales en cada cara tengo que digitalizar desde los vértices.
Me gustaría poder dibujar una línea entre arquetas pero desde el centro de una cara del polígono, no desde los vértices.
Para tratar de resolver este problema, pensé que podría crear un nodo intermedio entre cada una de las 4 Líneas de cada Polígono. Cada polígono resultante debería tener entonces 8 nodos.
Mi enfoque, que finalmente terminó funcionando perfectamente es:
Volcar el polígono en líneas. He encontrado esta consulta que lo hace y modificar la consulta para construir una cadena de líneas con cada punto inicial, punto medio (centroide) y punto final. A continuación, reconstruya el polígono:
.
SELECT
id, ST_MakePolygon(ST_LineMerge(ST_Union(the_geom))) as the_geom
FROM(
SELECT id, ST_MakeLine(ARRAY[sp,st_centroid(ST_MakeLine(sp,ep)),ep]) as the_geom
FROM
-- extract the endpoints for every 2-point line segment for each linestring
(SELECT id,
ST_PointN(geom, generate_series(1, ST_NPoints(geom)-1)) as sp,
ST_PointN(geom, generate_series(2, ST_NPoints(geom) )) as ep
FROM
-- extract the individual linestrings
(SELECT id, (ST_Dump(ST_Boundary(the_geom))).geom
FROM manholes
) AS linestrings
) AS segments
) as lines
GROUP BY
id
Resultado: