Próbuję osiągnąć odpowiednik narzędzia Dissolve z ArcGIS dla komputerów stacjonarnych za pomocą ST_Union z PostGIS, ale wydaje się, że nie otrzymuję oczekiwanego rezultatu.
Mam jedną tabelę, która ma pewne atrybuty z geometrią wielokąta. (jak FID, Locstat, Loccnt, Shape)
Oto moje zapytanie:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
Odpowiedzi:
Twój problem prawdopodobnie wynika z tego, co umieściłeś w grupie według pola.
ST_UNION jest funkcją agregującą, co oznacza, że rozpuszcza się na podstawie tego, co podasz jako
GROUP
parametr.Oto, co wpisałeś:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
Zgodnie z tym grupujesz według swojego
fid
, który jest prawdopodobnie unikalnym identyfikatorem, a także wedługboundaryshape
, która jest geometrią. Problem polega na tym, że jest mało prawdopodobne, aby funkcje o unikalnym identyfikatorze miały identyczną geometrię. DlategoST_Union
prawdopodobnie zakończy się czymś takim:W takim przypadku powinieneś rozpuścić się na podstawie swojego unikalnego identyfikatora, chyba że faktycznie masz wiele zduplikowanych geometrii o tej samej nazwie
fid
, których próbujesz się pozbyć. Nawet w tej sytuacji powinieneś tylko grupować w oparciu ofid
, a związek zajmie się duplikacją geometrii.Spróbowałbym następujących rzeczy:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c GROUP BY c.fid;
To powinno dać pożądany rezultat rozpuszczenia wszystkich funkcji w oparciu o wspólny atrybut
fid
.Oto dokument pomocy na stronie PostGIS: ST_Union
Zobacz pierwszy przykład wymieniony na dole i zauważ, że nie obejmuje on geometrii w grupie według sekcji.
źródło