Удалить дубликаты полигонов с помощью инструментов с открытым исходным кодом

13

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

Я пробовал инструменты топологии в OpenJump / Kosmo, но безуспешно. У них есть инструмент «Удалить дубликаты», который делает то, что я хочу, за исключением того, что он произвольно удаляет одну из функций, а не позволяет мне выбрать, какую из них оставить.

У меня есть доступ к QGIS, OpenJUMP, Kosmo и т. Д., И я могу установить другие инструменты с открытым исходным кодом / бесплатные инструменты, если это необходимо.

Мысли?

Даррен Коуп
источник

Ответы:

7

Помимо PostGIS, вы также можете использовать топологическую ГИС с открытым исходным кодом (GRASS):

  1. Загрузить и установить
  2. Запустите и выберите Менеджер местоположений, используйте инструмент для создания новой базы данных проекта из файла SHAPE (называемого «Расположение GRASS»), смотрите здесь пошаговое руководство
  3. Импортируйте файл SHAPE
  4. Используйте инструмент "v.clean", который предлагает ряд опций
  5. Экспорт карты обратно в формат файла SHAPE с "v.out.ogr"

Sidenote: мы планируем предложить WPS для этого, чтобы вы могли полировать свои данные через наш веб-портал.

markusN
источник
Я не верю, что v.clean позволяет пользователям «интерактивно» выявлять и исправлять ошибки топологии одну за другой. Пожалуйста, поправьте меня, если я ошибаюсь.
Даррен Коуп
Я пропустил, что вы хотели сделать это в интерактивном режиме. Таким образом, дигитайзер v.digit является инструментом для использования.
MarkNN
Маркус, быстрое вращение через v.digit не звучит так, как будто я сделаю то, что хочу. Не могли бы вы привести пример того, как бы я справился со своей задачей, используя v.digit?
Даррен Коуп
1
На самом деле, простой импорт шейп-файла в GRASS создает слой перекрывающихся полигонов как слой 2_polygon. Я думаю, что этого должно быть достаточно для меня, чтобы продолжить!
Даррен Коуп
3

Это то, что я использую в этих случаях. Насколько я понимаю, вам придется выполнить ручную проверку, чтобы решить, какой из них имеет правильный атрибут. Затем я делаю это в два этапа. Сначала я создаю таблицу или представление в PostGIS с дублированными полигонами, затем открываю эту таблицу в настольной ГИС вместе с исходным слоем, где я хочу удалить дубликаты. Это приведет меня к дубликатам через мою таблицу дубликатов, и я смогу удалить из исходной таблицы или шейп-файла, или что бы то ни было.

Запрос на поиск дубликатов будет выглядеть примерно так, если у вас есть уникальный идентификатор с именем gid и столбец геометрии с именем the_geom:

create table duplicates as
select a.the_geom, a.gid, b.gid from mytable a, mytable b 
where ST_Equals(a.the_geom, b.the_geom) and a.gid!=b.gid;

В ST_Equals есть несколько вариантов, но я думаю, что вам нужен именно ST_Equals. Это даст вам таблицу с повторяющимися геометриями и gid (id) первого и второго случая многоугольника. Вы получите одну и ту же пару дубликатов дважды, но это не должно иметь значения, потому что вы просто хотите, чтобы они показали вам, где они находятся.

HTH Никлас

Никлас Авен
источник
3

Если вы используете PostGIS 1.5.x, проверьте функцию ST_HausdorffDistance ().
Повторяющиеся геометрии приведут к значению 0. Используйте его как упомянутое само присоединение. Довольно аккуратный для сравнения многоугольников.

eprand
источник
0

Более простой способ сделать. Рассчитайте площадь в ГИС вашего рабочего стола и упорядочите по возрастанию или убыванию площади. Теперь вам нужно будет проверить каждую строку, чтобы увидеть дублированные объекты в вашей таблице атрибутов. Он основан на предположении, что у вас никогда не будет одинаковой области для объектов, не дублированных, хотя иногда это может быть неправильно.

ThomasG77
источник