Jak uzyskać dostęp do trybu fabularnego w SDE przez Python?

12

Próbuję użyć Arcpy do uruchomienia skryptu CopyFeatures_management, aby móc skopiować funkcję w SDE.

Czego używam do danych wejściowych (i danych wyjściowych, ponieważ kopiuję warstwę z powrotem do SDE), aby uzyskać dostęp do warstwy?

Michael Todd
źródło

Odpowiedzi:

11

Użyjesz ścieżki do pliku SDE oraz nazwy klasy obiektów, więc coś w tym stylu

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

Jason Scheirer
źródło
4
A „r” przed tekstem robi to samo w Pythonie, co „@” w C #, tzn. Traktuje ciąg znaków jako dosłowny, więc „\” nie są źle interpretowane jako znaki kontrolne?
Michael Todd
2
Poprawny. Oznacza ciąg znaków jako literał bez znaków kontrolnych.
Jason Scheirer
16

Dwa sposoby, które mogę wymyślić, oba obejmują połączenie bazy danych już skonfigurowane w ArcCatalog. Jeśli plik połączenia z bazą danych jeszcze nie istnieje, możesz użyć CreateArcSDEConnectionFile_management w skrypcie, aby go utworzyć.

1) Ustaw bieżący obszar roboczy na połączenie z bazą danych, a następnie odwołaj się do klasy elementów według nazwy.

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

Jeśli klasa obiektów znajduje się w zestawie danych funkcji, należy przydzielić nazwę zestawu danych funkcji do obszaru roboczego w następujący sposób:

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

2) Podaj pełną ścieżkę do klasy obiektów, w tym połączenie z bazą danych:

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

Niektóre narzędzia wymagają pierwszej metody, inne wymagają drugiej.

Również „Połączenia z bazami danych” to tak naprawdę tylko skrót do %APPDATA%\ESRI\Desktop10.0\ArcCatalog(dla ArcGIS 10 na Windows XP). Możesz równie łatwo podać pełną ścieżkę do plików .sde, które są przechowywane w tym folderze lub w innych folderach.

blah238
źródło
Ostrzegając w innych językach, zmienisz „Połączenia z bazą danych” słowami zgodnie z językiem oprogramowania używanym w systemie. W moim (ponieważ jestem fc = r"Connexions aux bases de données\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
Francuzem
ok, co jeśli muszę użyć warstwy 1 z bazy danych 1 i przyciąć ją do warstwy 2, która jest w bazie danych 2. jak obsługiwać obszar roboczy środowiska, jeśli istnieją dwa oddzielne obszary robocze?
NULL. Koleś
1

Zgodnie z moim poprzednim komentarzem mam inną propozycję bezpiecznego dostępu do zestawu danych i klasy obiektów

# 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

wynik FC:

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

dostęp do wyniku ze ścieżką:

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
źródło