SDE'deki bir özellik katmanına Python ile nasıl erişilir?


12

SDE'de bir özellik katmanı kopyalayabilmeniz için Arcpy CopyFeatures_management betiğini çalıştırmak için kullanmaya çalışıyorum.

Katmana erişmek için katmanı tekrar SDE'ye kopyalayacağım için giriş (ve çıktı, bu konuda ne kullanmalıyım)?

Yanıtlar:


11

SDE dosyasının yolunu ve özellik sınıfı adını kullanacaksınız.

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


4
Ve metnin önündeki 'r', Python'da C # 'daki' @ 'ile aynı şeyi yapar, yani dizeyi değişmez olarak ele alır, böylece' \ 'kontrol karakterleri olarak yanlış anlaşılmaz mı?
Michael Todd

2
Doğru. Dizeyi kontrol karakterleri olmadan değişmez olarak işaretler.
Jason Scheirer

16

Düşünebileceğim iki yol, ikisi de ArcCatalog'da önceden kurulmuş bir Veritabanı Bağlantısına sahip olmayı içeriyor. Veritabanı Bağlantısı dosyası zaten yoksa, oluşturmak için komut dosyanızda CreateArcSDEConnectionFile_management'ı kullanabilirsiniz .

1) Geçerli çalışma alanını veritabanı bağlantısına ayarlayın ve sonra özellik sınıfına adıyla bakın.

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

Feature sınıfı bir özellik veri kümesindeyse, özellik veri kümesi adını çalışma alanına şöyle yapıştırın:

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

2) Veritabanı bağlantısı dahil özellik sınıfının tam yolunu sağlayın:

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

Bazı araçlar ilk yöntemi gerektirirken, diğerleri ikinci yöntemi gerektirir.

Ayrıca "Veritabanı Bağlantıları" aslında sadece bir kısayoldur %APPDATA%\ESRI\Desktop10.0\ArcCatalog(Windows XP'de ArcGIS 10 için). Bu klasörde veya diğer klasörlerde depolanan .sde dosyalarının tam yolunu kolayca sağlayabilirsiniz.


Diğer dillerde uyarı, "Veritabanı Bağlantıları" nı sistemde kullanılan yazılım dilinize göre sözcüklerle değiştireceksiniz. Benimkinde, (Fransız olduğum için) bağlantı şu fc = r"Connexions aux bases de données\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
şekildedir

tamam, veritabanı 1'den katman 1'i kullanmam ve veritabanı 2'de katman 2'ye klipslemem gerekirse iki ayrı çalışma alanı varsa env.workspace'i nasıl işleyebilirim?
NULL.Dude

1

Önceki yorumum doğrultusunda, veri kümesi ve özellik sınıfına güvenli bir şekilde erişebilmek için başka bir teklifim var

# 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

sonuç 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

yolla sonuç erişimi:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.