Соединения один ко многим в классе пространственных объектов к таблице


10

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

У меня есть полигоны географического ареала вида, и у меня есть таблица со списком патогенных микроорганизмов / болезней, переносимых этими видами. Некоторые виды несут множество патогенов. В идеальном мире я бы соединял полигоны диапазонов с таблицей видов + патогены и сохранял полигональные / пространственные данные, но не похоже, что для этого есть ГИС-инструмент (я собираюсь позже подсчитывают перекрывающиеся патогены, поэтому важно, чтобы каждая комбинация вида-патогена имела свою особенность, а не одну особенность, которая имеет информацию для нескольких патогенов). Вот как выглядят мои данные (# 1 & # 2, # 3 - на потом):

Таблица атрибутов для пространственных объектов:

таблица атрибутов для пространственных объектов

Таблица без каких-либо пространственных данных:

таблица без пространственных данных

(Обратите внимание, что это не реальные данные, и комбинации патогенов и видов могут не быть реальными. На самом деле у меня 115 полигонов и 519 строк таблицы. Виды содержат от 1 до 40 патогенных микроорганизмов, поэтому у видов от 1 до 40 строк мой стол)

В качестве дополнительного бонуса, из-за будущих анализов, которые мне нужно сделать, в идеале я хотел бы иметь возможность сделать это соединение один ко многим так, чтобы я мог сохранить дополнительный столбец данных из таблицы (см. Ниже пример как это может выглядеть) Однако это менее важно, потому что, если я могу понять, как сделать соединение, я могу просто повторить анализ.

таблица без пространственных данных, с дополнительным полем

Я нашел несколько решений этой проблемы, но они не помогли мне по причинам, перечисленным ниже:

Решение 1: блог Дэвида Олберса - я слишком новичок, чтобы понять, как редактировать новый скрипт и как импортировать его в ArcMap. Я попробовал старый скрипт, и он просто сгенерировал тонну пустых полигонов с названием test, test_1, test_1_1, test_1_1_1 и т. Д.

Решение 2. Соединение « один ко многим» - я попытался использовать инструмент « Создать таблицу запросов» (и у меня нет знаний по SQL, хотя я использовал построитель выражений), и я получил ОШИБКУ 000383: проблема с таблицей, не могу найти рабочее пространство & Не удалось выполнить (MakeQueryTable). Все мои файлы находятся в одной папке, но их нет в базе геоданных.


1
Make Query Table будет работать только с базой данных
FelixIP

1
Для создания таблицы запросов требуются все данные в одном и том же fgdb.
Klewis

Ответы:


22

Для умножения функций сделайте это (доступно для тех, кто имеет ArcGIS 10.1 или выше).

  1. Поместите объекты и таблицу в одну файловую базу геоданных (вы должны конвертировать файлы Shapefiles / Excel / DBF в базу геоданных, чтобы это работало).
  2. Убедитесь, что у ваших полигонов есть уникальное поле идентификатора, которое будет сохранено (вы можете создать поле Long и рассчитать в нем ObjectID, чтобы значение ObjectID не было потеряно).
  3. Выполните стандартное соединение таблицы (атрибуты, без пространственных данных) с объектами (пространственными данными) в соответствующем поле. Обратите внимание, что таблица атрибутов объектов (пространственных данных) будет иметь то же количество объектов, что и раньше, но не беспокойтесь об этом, все они отображаются на следующем шаге.
  4. Экспортируйте объекты в ту же базу геоданных, что и новый класс пространственных объектов (щелкните правой кнопкой мыши слой в таблице содержания и выберите «Экспорт»). Обратите внимание, что число объектов в таблице атрибутов экспортируемых объектов теперь имеет правильное количество объектов, такое же, как и у исходной таблицы (с атрибутами, без пространственных данных) или, в случае объединения многих со многими, полный набор функций для всех комбинаций функций и связанных записей.

Объекты будут размножаться в новом классе объектов, где будут присутствовать все объекты (даже если у них не было совпадений в таблице) и там, где ранее было совпадение 1: M, объекты будут умножены для получения 1: 1. соответствие каждой функции всем ее элементам таблицы. Поле уникального идентификатора, созданное на шаге 2, позволит вам связать умноженные многоугольники с исходным набором одного многоугольника. С новым классом пространственных объектов вы можете делать выборки для полей таблицы, сводок, пространственных объединений и т. Д.

Если вы хотите сгенерировать уникальное значение идентификатора, представляющее каждую уникальную комбинацию видов и болезней, вы можете использовать версию инструмента 10.2, описанную в этом сообщении в блоге . Наличие этого типа ключа позволяет использовать его для выполнения стандартных объединений со сводными таблицами и статистикой на основе многополевых отношений в качестве замены для создания фактических многополевых отношений с использованием настройки Make Query Table.

Вот хорошая ссылка от esri: https://support.esri.com/en/technical-article/000001228


Отлично работает при экспорте в базу геоданных!
MooseGirl

1
Я изменил свой шаг 4, указав, что экспорт должен осуществляться в новый класс пространственных объектов в той же базе геоданных, что и исходные данные. Выполнение этой процедуры всегда должно работать, хотя возможно, что некоторые вариации того, где хранятся исходные и выходные данные, также могут быть разрешены.
Ричард Фэйрхерст

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

1
Я добавил, что объединенные объекты не будут иметь нужного количества атрибутов, а экспортируемые объекты будут иметь. Это очень расстроило меня, когда я попробовал это, пока я не прошел все шаги.
nittyjee

Он гласит, что в № 3 отсутствует «не», «... будет notиметь такое же количество функций ...»
Мэтт Уилки

-2

SQL-запрос:

SELECT spp, disease, type
FROM table1, table2
WHERE table1.bimonial = table2.spp;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.