Identificar relaciones topológicas usando PostGIS

15

Estoy tratando de realizar un análisis de tipología básica utilizando PostGIS. Mi objetivo es encontrar cualquier polígono que toque otros polígonos. Para hacer esto, pensé que ST_GetFaceEdges funcionaría ( referencia ). Quiero verificar cada polígono en mi base de datos y enumerar todos los otros polígonos que la tocan. En la imagen de abajo, esperaría que el resultado dijera que dos de los polígonos (que son edificios) tocan un edificio, y los resultados de los otros 4 dicen que tocan 0 polígonos.

Sin embargo, estoy teniendo algunas dificultades para entender qué hacer. Cuando intenté copiar el ejemplo, había algunas partes que no entendía.

-- Returns the sequence, edge id
-- , and geometry of the edges that bound face 1
-- If you just need geom and seq, can use ST_GetFaceGeometry
SELECT t.seq, t.edge, geom
FROM topology.ST_GetFaceEdges('tt',1) As t(seq,edge)
    INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;

No estoy seguro de si topology es el nombre de una tabla, columna o parte de la función. Supuse que era la mesa, pero no estoy seguro.

-- try out on sample of data
-- Table is called 'TestArea', column used is 'fid_1'
SELECT t.seq, t.edge, geom
FROM  TestArea.ST_GetFaceEdges('fid_1', 1) As t(seq,edge)
    INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;

Tampoco estoy seguro de cuál es la función de la unión interna: ¿esto une el resultado al objeto original?

    
pregunta djq 22.09.2011 - 22:25

1 respuesta

18

Puede utilizar ST_Touches en su lugar:

  

ST_Touches: devuelve VERDADERO si las geometrías tienen al menos un punto en común, pero sus interiores no se intersecan.

ST_Touches devuelve VERDADERO para, por ejemplo,

Obtener los conteos debería funcionar algo como esto:

SELECT a.id, count(*)
FROM polygon_table as a
JOIN polygon_table as b
  ON ST_Touches(a.the_geom,b.the_geom)
GROUP BY a.id
    
respondido por el underdark 22.09.2011 - 22:38

Lea otras preguntas en las etiquetas