Append, insert, присоединение объектов

ГИС-проекты могут требовать обновления данных с сохранением предыдущих записей, например ежедневные обновления, которые приходят из других систем не в режиме реального времени, а пакетно.

В этом случае может использоваться стандартный инструмент геообработки Append (Присоединить), однако к этому инструменту есть вопросы в плане скорости операции присоединения, и эта скорость отличается для инструмента внутри ArcGIS Pro и ArcMap. Если операция присоединения разовая, то наверно скоростью выполнения можно пренебречь, но в других случаях это может быть критично.

В нашем тесте мы присоединяли 400 новых точек к классу пространственных объектов в файловой базе геоданных, в котором уже содержится 13 млн записей. Для этого использовали инструмент Append (Присоединить):

  • В ArcMap версии 10.7.1 эта операция заняла — 5 минут
  • В ArcGIS Pro версии 2.6.3 — 20 секунд

Как видите, скорость отличается значительно, но еще более быстрый результат удалось получить с помощью класса ArcPy (доступно в ArcMap и Pro) — arcpy.da.InsertCursor. В этом случае операция присоединения заняла доли секунды. Для этого потребуется написать небольшой скрипт. Одна из его реализаций может быть следующая:

# Путь к данным
for_append = r’D:\test\TMP.gdb\for_append’
target = r’D:\test\test_append.gdb\target’

# Сопоставление полей между таблицами через их порядок. Даже если имена полностью совпадают, проверьте порядок полей.

source_fields = [‘field_1_source’, ‘field_2_source’, ‘field_3_source’]

target_fields= [‘field1’, ‘field2’, ‘field3’]

data = []
with arcpy.da.SearchCursor(for_append, source_fields) as cursor:
    for row in cursor:
        data.append(row)
cursor = arcpy.da.InsertCursor(target, target_fields)
for elem in data:
    cursor.insertRow(elem)

del cursor