Я пытаюсь получить эквивалент инструмента Dissolve из ArcGIS for Desktop, используя ST_Union из PostGIS, но, похоже, я не получаю ожидаемого результата.
У меня есть одна таблица, которая имеет определенные атрибуты с геометрией многоугольника. (например, FID, Locstat, Loccnt, Shape)
Вот мой запрос:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
Ответы:
Вероятно, ваша проблема связана с тем, что вы включили в группу по полю.
ST_UNION - это агрегатная функция, означающая, что она растворяется в зависимости от того, что вы указали в качестве
GROUP
параметра.Вот что вы ввели:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
В соответствии с этим, вы группируете по вашему
fid
, который, вероятно, является уникальным идентификатором, а также поboundaryshape
, который является геометрией. Проблема в том, что крайне маловероятно, что функции, имеющие общий идентификатор, будут иметь одинаковую геометрию. Поэтому,ST_Union
вероятно, в итоге получится что-то вроде следующего:В этом случае вы должны распускаться только на основе вашего уникального идентификатора, если только у вас на самом деле нет нескольких дубликатов геометрии с тем же
fid
, от которого вы пытаетесь избавиться. Но даже в этой ситуации вам нужно будет группировать только на основеfid
, и объединение позаботится о дублировании геометрии.Я бы попробовал следующее:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c GROUP BY c.fid;
Это должно дать вам желаемый результат растворения всех функций на основе общего атрибута
fid
.Вот справочный документ на сайте PostGIS: ST_Union
Посмотрите на первый пример, приведенный внизу, и обратите внимание, что он не включает геометрию в группе по разделам.
источник