Estoy tratando de realizar un análisis de tipología básica usando PostGIS. Mi objetivo es encontrar cualquier polígono que toque otros polígonos. Para hacer esto, pensé ST_GetFaceEdges
que funcionaría ( referencia ). Quiero verificar cada polígono en mi base de datos y enumerar todos los otros polígonos que lo tocan. En la imagen a continuación, esperaría que el resultado diga 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 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?
CreateTopology
y así sucesivamente ( bit.ly/oLk8QY ) Pero me parece la forma en que sus edificios están digitalizados. como si fueran topológicamente distintos a pesar de la cercanía visual de sus bordes. Es algo para que los futuros interrogadores sean conscientes.AddTopoGeometryColumn
a la tabla antes de ejecutar la consulta? Con base en los resultados deST_Touches
los valores que verifiqué, todo tenía sentido, pero tal vez fue por casualidad.AddTopoGeometryColumn
, sino que sus datos tendrían que digitalizarse de manera topológicamente consistente. Por ejemplo, tradicionalmente digitalizaría dos casas adosadas como dos polígonos y usaría "ajustar al vértice" en su SIG para garantizar que la pared se toque, pero se almacenará como dos líneas coincidentes con puntos coincidentes en cada extremo. Pero digitalizarlos topológicamente significa que el muro compartido realmente es solo una línea y dos nodos compartidos por cada polígono.ST_Touches
solo hace una verificación espacial de cercanía, no una topológica.Respuestas:
En su lugar, podría usar ST_Touches :
ST_Touches devuelve VERDADERO por ejemplo
Obtener los recuentos debería funcionar de la siguiente manera:
fuente