Объединить смежные полигоны в шейп-файле, который был разбит на границах листов?

24

В настоящее время я использую данные о зданиях из Vectormap District Ordnance Survey и заметил, что многие строительные полигоны разделены на 2 из-за того, как ОС разделяет шейп-файл.

Вот что я вижу в QGIS - я выделил некоторые из зданий, разделенных на границе плитки:

введите описание изображения здесь

Я не могу вручную объединить здания, так как их слишком много, которые были разбиты на границах (это просто увеличенный пример). Я ищу автоматический способ решить эту проблему.

К сожалению, каждая сторона разделенных зданий имеет разные идентификаторы, поэтому я не могу их легко распустить.

Как бы вы предложили, чтобы я мог автоматически объединять строительные плитки?

редактировать

Сейчас я использую PostGIS для объединения полигонов, разделенных на границах плиток. Вот оператор SQL, который делает это для меня - это во много, много раз быстрее, чем делать это с QGIS:

DROP TABLE merged;
CREATE TABLE merged AS
SELECT
  -- Merge polygons that are within 0.01 metres of each other
  (ST_Dump(ST_Union(ST_Buffer(the_geom, 0.01)))).geom AS the_geom
FROM unmerged;

-- Update the geometry_columns table
SELECT Populate_Geometry_Columns();
Робин Хоукс
источник
6
Возможно, вам следует опубликовать свое решение в качестве ответа и принять его вместо моего. Придерживаясь схемы вопрос-ответ, другим людям с такой же проблемой гораздо легче найти решение.
Джейк,

Ответы:

18

Если вы просто хотите слить грани и довольны наличием одной большой многоугольной функции для всех зданий, вы можете просто использовать инструмент fTools «Dissolve» («Вектор / Геообработка / Растворение»).

Если вы хотите сохранить атрибуты (в случае вектора ОС, который будет только идентификатором, который выглядит довольно произвольно), вы можете разделить слой растворенного вектора и затем назначить атрибуты исходного нерастворенного слоя, используя «Атрибуты соединения». по местоположению ":

Это подмножество двух шейп-файлов зданий ОС, которые были объединены в один шейп-файл с использованием «Вектор / Управление данными / Слияние шейп-файлов в один». Цвета назначаются случайным образом, чтобы показать отдельные особенности:

Это результат инструмента «Растворение»: все объекты были объединены в один объект с идентификатором первого объекта, разрыв в трех центральных зданиях пропал:

После разделения объекта с помощью «Вектор / Геометрия / Составной элемент на отдельные части» здания снова становятся отдельными объектами, но все они имеют одинаковый идентификатор:

Запустив «Вектор / Инструменты управления данными / Объединить атрибуты по местоположению» с разделенным слоем в качестве цели и исходным объединенным слоем в качестве векторного слоя объединения, зданиям будут присвоены их индивидуальные идентификаторы:

Джейк
источник
Я думаю, что проблема может быть в том, что это ОС VMD OpenData (поправьте меня, если я ошибаюсь). В этом случае объекты не имеют атрибутов, которые можно использовать для растворения. Так что вы можете попробовать использовать обычные растворы fTools. Удачи в этом, в некоторых векторах OpenData у меня есть полигоны, разделенные линиями, которые совпадают с линиями сетки, которые просто не будут растворяться.
Нхоптон
@nhopton: Но обычное растворение fTools объединит все функции в одну функцию (если нет идентификаторов, которые можно использовать для определения того, какие функции объединяются, как в данном случае), что, скорее всего, не то, что хочет Роб. Если вы используете v.dissolveпосле присвоения всем объектам некоторого идентичного фиктивного атрибута, только те, которые имеют общую границу, будут объединены вместе.
Джейк
Роб, наверное, не будет проблемой, если все, что ему нужно, это формы. Но да, попробуйте оба метода растворения. Ник.
Ноптон
Вы уверены, что все полигоны, которые должны были быть распущены, были фактически распущены? Здесь большинство из них растворяется, но не все.
Нхоптон
Спасибо за помощь! Оказывается, @nhopton был прав, и что расщепления VectorMap District на самом деле немного отклонены и поэтому не растворяются правильно. Сейчас я экспериментирую с использованием PostGIS для ускорения этого процесса.
Робин Хоукс