Более

Arcpy Копирование классов объектов с перезаписью в определенные наборы классов объектов


Цель - у меня есть целевая «схема» GDB с заданными именами наборов классов объектов и классами объектов (без объектов) внутри них. Я хочу скопировать отправленные классы пространственных объектов базы геоданных в эту цель. Сначала я перепроецирую цель, чтобы она соответствовала системе координат отправки.

Что я хочу сделать с python, так это скопировать все классы пространственных объектов из представления в целевой объект, где, если имя класса объектов представления совпадает с именем в целевом GDB, я хочу заменить его в целевом GDB в расположении набора классов объектов, где пустой класс пространственных объектов был в целевом объекте. Если отправляемый класс объектов не имеет совпадения по имени в целевом GDB, я хочу скопировать его в целевой GDB вне любого набора классов объектов.

Я новичок в питоне. Я использовал http://support.esri.com/en/knowledgebase/techarticles/detail/40831 в качестве начала и теперь получил код (ниже) для работы, чтобы скопировать все классы пространственных объектов из исходного GDB в целевой GDB, удалив функцию классы в наборах классов объектов с совпадающими именами между исходным и целевым GDB, но я не могу заставить его поместить исходные классы объектов в наборы классов объектов, где классы объектов с совпадающими именами находятся в целевом наборе, он просто не помещает их в набор классов объектов в ГБД.

ОБНОВИТЬ: Код действительно работает, когда я делаю копию своей базы данных. Это показало, что код работает не так, как предполагалось, потому что перепроектирование, которое я делаю для наборов данных объектов моей целевой базы данных, изначально не содержит всей информации о пространственной привязке. Чтобы заставить это работать так, как я хочу, я считаю, что мне нужно добавить код для создания новых наборов классов объектов в целевом GDB с теми же именами, что и целевые наборы классов объектов, с информацией о пространственной привязке из представленных наборов данных объектов, а затем скопировать объект классы, в которых имена отправленных имен совпадают с целевыми именами, затем удаляют исходные целевые наборы классов объектов (или перезаписывают при создании).

Фрагмент кода ниже обновлен в соответствии с инструкциями по комментариям:

import arcpy, os, string arcpy.env.overwriteOutput = True def FeatureClassToFeatureClass_conversion (start_db, end_db): # Установить рабочие области arcpy.env.workspace = start_db wk2 = end_db datasetList = arcpy.ListDatasets (в наборах данных) # для классов объектов datasetList: fclist = arcpy.ListFeatureClasses ("*", "", набор данных) для fc в fclist: print "Reading: {0}". format (fc) name = arcpy.Describe (fc) new_data = name.name if arcpy .Exists (wk2 + os.sep + new_data) == True: arcpy.Delete_management (wk2 + os.sep + new_data) arcpy.Copy_management (fc, wk2 + os.sep + new_data) print «Копирование завершено {0}» .format (new_data) else: arcpy.Copy_management (fc, wk2 + os.sep + new_data) print "Завершенная копия на {0}". format (new_data) # Очистить память del fc if __name __ == "__main__": start_db = arcpy.GetParameterAsText (0) end_db = arcpy.GetParameterAsText (1) FeatureClassToFeatureClass_conversion (start_db, end_db)

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

  • очистить целевой класс пространственных объектов (удалить объекты, а не сам класс)

  • определить его проекцию, чтобы она соответствовала проекции класса пространственных объектов, представленного в заявке. Здесь два больших предположения: целевой класс функций НЕ входит в набор классов объектов И структура таблицы атрибутов идентична. Так что это зависит от вашего рабочего процесса.

  • добавьте записи из представленного класса пространственных объектов.

В противном случае, для проблем с проекцией, вы можете попробовать установить переменные среды

arcpy.env.outputCoordinateSystem

и при необходимости:

arcpy.env.geographicTransformations

Наконец, мне кажется, что ваше заявление

wk2 + os.sep + new_data

ссылается на целевую базу данных и имя класса пространственных объектов, поэтому вы создаете автономные классы пространственных объектов. Вы должны явно указать имя целевого набора данных, например:

wk2 + os.sep + набор данных + os.sep + new_data


Смотреть видео: ArcGIS Enterprise: что нового в версии. Леонов А. Esri CIS (October 2021).