Estou tentando realizar uma análise tipológica básica usando o PostGIS. Meu objetivo é encontrar polígonos que toquem outros polígonos. Para fazer isso, pensei ST_GetFaceEdges
que funcionaria ( referência ). Quero verificar todos os polígonos no meu banco de dados e listar todos os outros polígonos que o tocam. Na imagem abaixo, eu esperaria que o resultado dissesse que dois dos polígonos (que são edifícios) tocam em um edifício, e os resultados dos outros 4 dizem que eles tocam 0 polígonos.
No entanto, estou tendo dificuldades para entender o que fazer. Quando tentei copiar o exemplo, havia algumas partes que não entendi.
-- 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;
Não tenho certeza se topology
é o nome de uma tabela, coluna ou parte da função. Presumi que fosse a mesa, mas não tenho certeza.
-- 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;
Também não tenho certeza de qual é a função da junção interna - isso une o resultado ao objeto original?
CreateTopology
e assim por diante ( bit.ly/oLk8QY ) Mas a maneira como seus edifícios são digitalizados parece-me como se fossem topologicamente distintos, apesar da proximidade visual de suas bordas. Apenas algo para os futuros questionadores estarem cientes.AddTopoGeometryColumn
à tabela antes de executar a consulta? Com base nos resultados dosST_Touches
valores que verifiquei, tudo fazia sentido, mas talvez isso fosse por acaso.AddTopoGeometryColumn
, mas seus dados precisariam ser digitalizados de uma maneira topologicamente consistente. Por exemplo, tradicionalmente, você digitaria duas casas geminadas como dois polígonos e usaria "snap ao vértice" em seu GIS para garantir que a parede compartilhada tocasse, mas ela será armazenada como duas linhas coincidentes com pontos coincidentes em cada extremidade. Mas digitalizá-las topologicamente significa que a parede compartilhada é realmente apenas uma linha e dois nós compartilhados por cada polígono.ST_Touches
apenas faz uma verificação espacial de proximidade, não topológica.Respostas:
Você poderia usar ST_Touches :
ST_Touches retorna TRUE por exemplo
Obter as contagens deve funcionar mais ou menos assim:
fonte