Próbuję przeprowadzić podstawową analizę typologii za pomocą PostGIS. Moim celem jest znalezienie dowolnych wielokątów, które dotykają innych wielokątów. Aby to zrobić, pomyślałem, że ST_GetFaceEdges
to zadziała ( odniesienie ). Chcę sprawdzić każdy wielokąt w mojej bazie danych i wyświetlić listę wszystkich innych wielokątów, które go dotykają. Na poniższym obrazie spodziewałbym się, że wynik powie, że dwa wielokąty (które są budynkami) dotykają jednego budynku, a wyniki pozostałych 4 stwierdzą, że dotykają 0 wielokątów.
Mam jednak trudności ze zrozumieniem, co robić. Kiedy próbowałem skopiować przykład, było kilka jego części, których nie rozumiałem.
-- 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;
Nie jestem pewien, czy topology
jest to nazwa tabeli, kolumny czy części funkcji. Zakładałem, że to był stół, ale nie jestem pewien.
-- 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;
Nie jestem również pewien, jaka jest funkcja sprzężenia wewnętrznego - czy to łączy wynik z oryginalnym obiektem?
CreateTopology
itd. ( Bit.ly/oLk8QY ) Ale sposób, w jaki budynki są zdigitalizowane, wydaje mi się jakby były topologicznie odrębne pomimo wizualnej bliskości ich krawędzi. Tylko coś, o czym powinni wiedzieć przyszli pytający.AddTopoGeometryColumn
tabelę przed uruchomieniem zapytania? W oparciu o wyniki zST_Touches
wartości, które sprawdziłem, wszystkie miały sens, ale być może było to przypadkiem.AddTopoGeometryColumn
, ale Twoje dane będą musiały zostać zdigitalizowane w spójny topologicznie sposób. Na przykład, tradycyjnie digitalizowałbyś dwa bliźniacze domy jako dwa wielokąty i używałeś „przyciągania do wierzchołka” w swoim GIS, aby zapewnić, że wspólna ściana dotyka się, ale będzie przechowywana jako dwie zbieżne linie ze zbieżnymi punktami na każdym końcu. Ale digitalizacja ich topologicznie oznacza, że wspólna ściana to tak naprawdę tylko jedna linia i dwa węzły wspólne dla każdego wielokąta.ST_Touches
po prostu sprawdza przestrzennie bliskość, a nie topologiczną.Odpowiedzi:
Zamiast tego możesz użyć ST_Touches :
ST_Touches zwraca PRAWDA dla np
Obliczanie liczby powinno działać mniej więcej tak:
źródło