Özet
ArcGIS Pro projelerindeki tüm katmanların veri kaynağını güncellemek karmaşık bir süreç olabilir. Bu yazıda, ArcPy’nin güçlü updateConnectionProperties fonksiyonunu kullanarak, Enterprise geodatabase’ler arasındaki veri kaynağını nasıl güncelleyeceğinizi adım adım öğrenin.
Bir ArcGIS Pro projesindeki tüm katmanlar için veri kaynağını güncellemeye çalışırken, eğer veri bozuk değilse her katmanı manuel olarak güncellemek gerekir. Bunu basitleştirmek için, ArcPy updateConnectionProperties fonksiyonu, bir projedeki tüm katmanları programlı olarak güncellemek için kullanılabilir.
Veri kaynağını bir Enterprise geodatabase’den diğerine güncellemeye çalışırken updateConnectionProperties fonksiyonunda bir hata mevcuttur. Kod, hata mesajı olmadan yürütülür, ancak hiçbir özellik güncellenmez. Parametreler için connectionProperties sözlüğü kullanılmalıdır.
Prosedür
Veri kaynağını bir Enterprise geodatabase’den diğerine güncellemek için connectionProperties sözlüğünü kullanma:
import arcpy
aprx = arcpy.mp.ArcGISProject(r'C:\Projects\project.aprx')
find_dict = {'connection_info': {'authentication_mode': 'DBMS',
'database': 'Giza',
'db_connection_properties': 'Egypt',
'dbclient': 'sqlserver',
'instance': 'sde:sqlserver:Egypt',
'password': 'hermitPurple123',
'server': 'Egypt',
'user': 'Romeo',
'version': 'sde.DEFAULT'},
'workspace_factory': 'SDE'}}
replace_dict = {'connection_info': {'authentication_mode': 'DBMS',
'database': 'Khufu',
'db_connection_properties': 'Egypt',
'dbclient': 'sqlserver',
'instance': 'sde:sqlserver:Egypt',
'password': 'theWorld123',
'server': 'Egypt',
'user': 'Maya',
'version': 'sde.DEFAULT'},
'workspace_factory': 'SDE'}}
aprx.updateConnectionProperties(find_dict, replace_dict)
find_dict bağlantı bilgisini kaynak veritabanı bağlantısıyla ve replace_dict bağlantı bilgisini hedef veritabanı bağlantısıyla değiştirin. Bu bilgiler bilinmiyorsa, aşağıdaki betiği çalıştırın:
Bir veritabanı bağlantısı hakkındaki bilgileri bulmak için connection_info ögesini yazdırın
import arcpy, pprint
p = arcpy.mp.ArcGISProject('current')
m = p.listMaps()[0]
l = m.listLayers()[0]
pprint.pprint(l.connectionProperties)
Bağlantının özellik bilgilerini bu biçimde döndürür:
{'connection_info': {'authentication_mode': 'DBMS',
'database': 'Khufu',
'db_connection_properties': 'Egypt',
'dbclient': 'sqlserver',
'instance': 'sde:sqlserver:Egypt',
'password': '*********',
'server': 'Egypt',
'user': 'Romeo',
'version': 'sde.DEFAULT'},
'dataset': 'Egypt.SDE.Centerlines',
'workspace_factory': 'SDE'}
Not:
Parola yıldız işaretlerinden oluşan bir dize olarak döndürülür (****). Veritabanı kimlik doğrulaması kullanılıyorsa, kullanıcı parolasını parametrelerde örnekte gösterildiği gibi düz metin olarak yazmalıdır.
listLayers işlevi bir indeksleme hatası döndürürse, proje eksik veya bozuk katmanlar içerebilir.