У меня есть проблема, которую я, кажется, не могу понять. У меня есть два слоя многоугольника:
- Многоугольник A - это подмножество многоугольника B с теми же полями и имеет многоугольники, идентичные многоугольнику B
- Polygon B - содержит данные атрибута, который я хочу видеть в Polygon A
Как это может быть сделано? Я попробовал инструмент QGIS «Объединить атрибуты по местоположению», но поскольку некоторые из полигонов находятся внутри других, он имеет тенденцию связываться с первым найденным пересечением (внешним многоугольником).
qgis
arcgis-desktop
Диего Р
источник
источник
Ответы:
@Dano справедливо поднимает некоторые вопросы, которые лучше всего решать в полном ответе.
Одна из трудностей , уже отмеченных @Celenius, заключается в том, что соединение между B и A (в любом направлении) дублирует все поля; исправить это может быть обременительно. В комментариях я предположил, что очевидный простой способ (экспорт в электронную таблицу) поднимает вопросы целостности данных. Другая трудность , уже затронутая предложением Celenius, касается решения этой проблемы, когда никакая комбинация атрибутов не может служить ключом как для A, так и для B, поскольку это исключает объединение базы данных. Пространственное соединение обходит эту проблему.
Что же тогда является хорошим решением? Один подход использует A для идентификации соответствующих записей B, содержащих требуемые данные. В зависимости от предположений о конфигурации многоугольников - перекрываются ли они, могут ли некоторые содержать другие и т. Д. - это может быть выполнено различными способами: используя один слой для выбора объектов в другом или с помощью объединений. Дело в том, что все, что мы хотим сделать на этом этапе, это выбрать подмножество B, соответствующее A.
Получив этот выбор, экспортируйте его и дайте ему заменить A. Готово .
Это решение предполагает, что все поля в B предназначены для замены их аналогов в A. Если нет, то действительно необходимо выполнить соединение 1-1 B (источник) с A (пункт назначения). Объединение на основе идентификаторов является лучшим, но создание объединения на основе многоугольника (Celenius) работает хорошо, если идентификаторы недоступны и нет шансов, что соответствующие формы многоугольников в A и B могут отличаться, хотя и незначительно . (Это тонкий момент и потенциальная причина коварных ошибок, потому что предыдущие правки в B в многоугольники, которые не соответствуют A, все еще могли бы незаметно изменить другие многоугольники в B, если ГИС "привязывает" или "поддерживает топологию" или иным образом автоматически вносить глобальные изменения во время локального редактирования.)
На данном этапе имеется две копии каждого поля: если [Foo] является общим полем для A и B, то объединение содержит A. [Foo] и B. [Foo]. Используя вычисление поля , скопируйте B. [Foo] в A. [Foo]. Повторите для всех необходимых полей. После этого удалите соединение.
Хотя эта процедура может быть немного обременительной, когда задействовано много полей, ее достоинства включают
Некоторые из руководящих принципов, связанных с этим предложением,
Кто-то может возразить, что во многих случаях существуют более быстрые и простые способы достижения того же результата. Да, могут быть, и они могут быть эффективными, и обычно они работают, когда выполняются с осторожностью. Но решения, которые рискуют данными, трудно рекомендовать и защищать как ответы общего назначения. Лучше всего их использовать в одноразовых ситуациях с небольшими наборами данных, где коррупция в данных должна быстро стать очевидной, а последствия любых таких ошибок несущественны.
источник
В Arcmap вы можете пространственно соединить Polygon B с Polygon A; это будет связано атрибутов. Поскольку имена полей совпадают, это создаст новую комбинацию имени.
источник
Экспортируйте таблицу для шейп-файла "B" в Excel и удалите избыточные столбцы, а также любые столбцы, содержащие информацию, которая вам не нужна. Убедитесь, что вы храните столбец общего идентификатора, а затем сохраните его в соответствующей папке. Зайдите в ArcMap, добавьте таблицу, затем щелкните правой кнопкой мыши по шейп-файлу "A" и выполните объединение таблиц . Ссылка должна привести к видео о том, как это сделать.
@ whuber - весь подход является надежным и обеспечивает целостность данных. Единственное, что я могу сказать, чтобы опровергнуть этот ответ, - это то, что определенные ситуации / проекты не дают нам времени или бюджета для того, чтобы использовать этот метод в нашем подходе.
Пример из жизни:
Молодежная горнодобывающая компания сидит на крупном рудном теле с денежными вливаниями в сотни миллионов долларов, основанными на их способности «доказать» ресурс. Настольный обзор публикаций и геологических карт / данных приводит к очень целевой и очень дорогой программе бурения. Когда анализы возвращаются из первого запуска, эти значения помечаются в соответствующих точках с помощью объединения таблиц и выкачиваются обратно в формате Excel, где данные тщательно подготавливаются для импорта в DataMine (для трехмерной интерполяции или преобразования тела).
По моему опыту , проект Геологи требовал, чтобы эти данные были предварительно подготовлены в Excel, чтобы они следовали КАЖДОМУ правилу / условию форматирования до буквы (без пробелов, без специальных символов и т. Д.) И чтобы файл импорта DataMine был доставлен в формате .csv. (тогда все равно). Это приведет к увеличению инвестиций в целевое бурение, и мы будем многократно пересматривать этот процесс (в некоторых случаях). Все это обычно происходило в исключительно сжатые и критические сроки.
У каждого из нас есть своя собственная история и наш собственный опыт, который мы включили в наш подход к тому, как мы делаем вещи. Сказав это, мой опыт рассматривает Excel как абсолютную необходимость и жизненно важный инструмент в моих рабочих процессах; это то, что я знаю. Мы принимали все меры предосторожности при подготовке этих данных. Где бы вы, ребята, уклонялись от Excel, у меня не было выбора, кроме как использовать его.
источник
В конце 1990-х годов мы получили крупномасштабную обновленную информацию обо всех наших водоемах и водотоках, охватывающую около 55 картографических листов NTS и неисчислимое количество объектов. Нам нужно было сохранить атрибуты добавленной стоимости нашей старой гидрологии (названия озер, высоту поверхности и т. Д.) И заменить геометрию. Геометрия старого и нового была достаточно близка, чтобы мы могли гарантировать, что центроиды каждого многоугольника будут по-прежнему ограничены границами нового многоугольника - это важный момент, без этой базовой уверенности подход, представленный ниже, не является хорошей идеей.
Решением в данном конкретном случае было вместо приведения атрибутов к геометрии, приведения геометрии к атрибутам. Итак, концептуально:
Смотрите здесь для более подробного описания и рецепта для arcinfo-worksation . Я не уверен, что в современных Arcgis или Qgis даже возможно удалить геометрию без одновременного удаления записи атрибута, но, на всякий случай, вот идея.
источник
Я не уверен, но, возможно, некоторые СУБД выполняют операции равенства на полях Shape в SQL (?). Мне кажется, что если две геометрии идентичны,
=
оператор SQL должен вернуть true (WHERE A.Shape = B.Shape
).Если это верно для базы данных, которую вы используете, вы сможете выполнить пространственное соединение, используя тот же синтаксис, что и для непространственного соединения.
Похоже, для этого можно использовать метод ST_Equals (стандарт OGC).
источник
Как обычно, Вубер прав. Вы должны тщательно продумать свой процесс. Особенно, если это большие наборы данных, и эта операция будет выполняться много раз или данные критически важны.
Рассмотрим ваши данные и обязанности:
Что вы наделали?
Что делаешь?
Что ты собираешься делать?
И всегда спрашиваю: почему?
Теперь один простой ответ, направленный непосредственно на заданный вопрос. Помня, что всегда есть как минимум 5 способов сделать что-то, но обычно только один лучший способ.
Предполагая, что полный набор имеет каждый атрибут, которым вы хотите быть в подмножестве, и подмножество не имеет ничего, чего еще нет в полном наборе, кроме устаревшей информации.
Предполагая, что топология подмножества соответствует полному набору (включая Origin / Projection и XY Tolerance).
1) Используйте Feature to Point с установленным флажком «Inside» и создайте точечный класс пространственных объектов или шейп-файл из подмножества.
2) Используйте функцию «Выбрать по пространственному соединению», чтобы найти все полигоны в полном наборе, которые соответствуют подмножеству, на основе вновь созданного класса объектов Point или шейп-файла.
3) Экспортируйте Выбор из полного набора, и это может быть ваш новый набор.
источник
Конечно, если Polygon A является подмножеством Polygon B, самый простой подход будет заключаться в цикле по Polygon A, использовать идентификатор, который будет в Polygon A (и B, если A был подмножеством или B), для поиска данных строки в Polygon B, а затем обновите строку в Polygon A.
источник