Как получить доступ к функциональному слою в SDE через Python?

12

Я пытаюсь использовать Arcpy для запуска сценария CopyFeatures_management, чтобы я мог скопировать векторный слой в SDE.

Что я использую для ввода (и, в этом отношении, вывода, поскольку я буду копировать слой обратно в SDE) для доступа к слою?

Майкл Тодд
источник

Ответы:

11

Вы будете использовать путь к файлу SDE плюс имя класса объектов, так что-то вроде

CopyFeatures_management(r'c:\connections\my.sde\fc1', r'c:\connections\my.sde\newfc')

Джейсон Шайрер
источник
4
И «r» перед текстом делает то же самое в Python, что и «@» в C #, то есть обрабатывает строку как литерал, чтобы «\» не истолковывалось как управляющие символы?
Майкл Тодд
2
Верный. Отмечает строку как литерал без управляющих символов.
Джейсон Шайрер,
16

Два способа, которые я могу придумать, оба связаны с установкой соединения с базой данных в ArcCatalog. Если файл подключения к базе данных еще не существует, вы можете использовать CreateArcSDEConnectionFile_management в своем скрипте для его создания.

1) Установите текущее рабочее пространство для соединения с базой данных, а затем обратитесь к классу пространственных объектов по имени.

arcpy.env.workspace = r"Database Connections\MySDEDatabaseConnection.sde"
fc = "SDE.myFeatureClass"

Если класс пространственных объектов находится в наборе классов объектов, прикрепите имя набора классов объектов к рабочей области следующим образом:

arcpy.env.workspace = r"Database Connections\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset"

2) Укажите полный путь к классу объектов, включая соединение с базой данных:

fc = r"Database Connections\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"

Некоторые инструменты требуют первого метода, другие требуют второго.

Также «Соединения с базой данных» на самом деле просто ярлык %APPDATA%\ESRI\Desktop10.0\ArcCatalog(для ArcGIS 10 в Windows XP). Вы также можете легко указать полный путь к файлам .sde, которые хранятся в этой папке или других папках.

blah238
источник
Внимание, на других языках вы будете менять «Соединения с базой данных» словами в соответствии с языком вашего программного обеспечения, используемого в системе. В моем (потому что я fc = r"Connexions aux bases de données\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
француз
хорошо, что если мне нужно использовать слой 1 из базы данных 1 и обрезать его до слоя 2, который в базе данных 2. как мне обработать env.workspace, если есть два отдельных рабочих пространства?
NULL. Чувак
1

В соответствии с моим предыдущим комментарием у меня есть другое предложение, чтобы безопасно получить доступ к набору данных и классу объектов

# catalog local and arcgis version
arcgis_version = arcpy.GetInstallInfo()['Version'].split(
    ".")  # liste v_majeur,v_mineur
catalog_path = "{}\\ESRI\\Desktop{}\\ArcCatalog".format(
    os.getenv('APPDATA'), ".".join(
        arcpy.GetInstallInfo()['Version'].split(".")[:2])) # Work with Arcgis >= 10.3
conn = {}
conn["out_folder_path"] = catalog_path
conn["out_name"] = "server_x_db_user.sde"
conn["database_platform"] = "SQL_SERVER"
conn["instance"] = "server_x"
conn["account_authentication"] = "DATABASE_AUTH"
conn["database"] = "bdd"
conn["username"] = "db_user"
conn["password"] = "MydbPasS@"
conn["save_user_pass"] = "SAVE_USERNAME"

arcpy.CreateDatabaseConnection_management(**conn)
#result
# >>> <Result 'C:\\Users\\me\\AppData\\Roaming\\ESRI\\Desktop10.4\\ArcCatalog\\server_x_db_user.sde'>
desc = arcpy.Describe(os.path.join(conn["out_folder_path"],conn["out_name"]) 
# you can also pass by arcpy.Result object
arcpy.env.workspace = os.path.join(desc.path, desc.name)
#safe env for arcCatalog sde folder

print arcpy.env.workspace 
# >>> u'Connexions aux bases de donn\xe9es\\server_x_db_user.sde'

for ds in arcpy.ListDatasets(feature_type='feature') + ['']:
    for fc in arcpy.ListFeatureClasses(feature_dataset=ds):
        print fc
        # Remove empty dataset to get valid path
        path = os.path.join(
            *[v for v in [arcpy.env.workspace, ds, fc] if v])
        print path

Результат ФК:

bdd.user_db.bndy_lv_municipal_sector
bdd.user_db.bndy_admin_lv_municipal
bdd.user_db.water_pg
bdd.user_db.water_pl

результат доступа с путем:

Connexions aux bases de données\server_x_db_user.sde\bdd.user_db.bndy_lv_municipal_sector
Connexions aux bases de données\server_x_db_user.sde\bdd.user_db.bndy_admin_lv_municipal
Connexions aux bases de données\server_x_db_user.sde\bdd.user_db.water_pg
Connexions aux bases de données\server_x_db_user.sde\bdd.user_db.water_pl
GeoStoneMarten
источник