J'essaie d'effectuer une analyse de typologie de base à l'aide de PostGIS. Mon objectif est de trouver tous les polygones qui touchent d'autres polygones. Pour ce faire, j'ai pensé que ST_GetFaceEdges
cela fonctionnerait ( référence ). Je veux vérifier chaque polygone de ma base de données et répertorier tous les autres polygones qui le touchent. Dans l'image ci-dessous, je m'attendrais à ce que le résultat indique que deux des polygones (qui sont des bâtiments) touchent un bâtiment, et les résultats des 4 autres à dire qu'ils touchent 0 polygones.
Cependant, j'ai du mal à comprendre quoi faire. Quand j'ai essayé de copier l'exemple, il y en avait quelques parties que je ne comprenais pas.
-- 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;
Je ne sais pas s'il topology
s'agit du nom d'une table, d'une colonne ou d'une partie de la fonction. J'ai supposé que c'était la table, mais je ne suis pas sûr.
-- 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;
Je ne sais pas non plus quelle est la fonction de la jointure interne - cela joint-il le résultat à l'objet d'origine?
CreateTopology
et ainsi de suite ( bit.ly/oLk8QY ) Mais la façon dont vos bâtiments sont numérisés me semble comme ils sont topologiquement distincts malgré la proximité visuelle de leurs bords. Juste quelque chose pour les futurs questionneurs.AddTopoGeometryColumn
à la table avant d'exécuter la requête? Sur la base des résultats desST_Touches
valeurs que j'ai vérifiées, tout était logique, mais c'était peut-être par hasard.AddTopoGeometryColumn
, mais vos données devront être numérisées de manière topologiquement cohérente. Par exemple, traditionnellement, vous numérisiez deux maisons jumelées en deux polygones et utilisiez «aligner au sommet» dans votre SIG pour garantir les touches de mur partagées, mais il sera stocké sous la forme de deux lignes coïncidentes avec des points coïncidents à chaque extrémité. Mais leur numérisation topologique signifie que le mur partagé n'est en réalité qu'une seule ligne et deux nœuds partagés par chaque polygone.ST_Touches
fait juste une vérification spatiale de la proximité, pas topologique.Réponses:
Vous pouvez utiliser ST_Touches à la place:
ST_Touches renvoie VRAI pour par exemple
Obtenir les chiffres devrait fonctionner comme ceci:
la source