Kesalahan replaceDataSource Arcpy

8

Saya sudah memeriksa jawaban lain di sini dan tidak ada jawaban yang berfungsi untuk saya ...

Ini masalah "sederhana" untuk menemukan layer dengan nama di peta dan mengubah sumber data itu.

Ini skrip saya:

    #-- New Source
    newSource = os.path.join(currDir, lyrZones + "_Dep" + dirNum + ".shp")

    #-- Validation
    if arcpy.Exists(newSource):
        print "The new source exists!"
    else:
        print "Not found!"

    #-- Find the layer and change its source            
    for lyr in arcpy.mapping.ListLayers(mxd):
        if lyr.name == lyrZones:
            print "Layer found!"
            print layers.dataSource
            print "  Replacing source..."
            lyr.replaceDataSource(currDir, "SHAPEFILE_WORKSPACE", newSource)
            print lyr.dataSource

Saya menjalankannya dari skrip python di luar ArcGIS.

masukkan deskripsi gambar di sini

Anda dapat melihat bahwa sumbernya ada, lapisannya ditemukan, saya dapat mengakses sumber datanya dengan mencetaknya, tetapi lyr.replaceDataSource menyebabkan kesalahan (Kesalahan tak terduga ... tidak banyak membantu ...)

Saya telah bekerja selama 4-5 jam sekarang dan saya kekurangan solusi untuk mencoba. Adakah yang tahu apa yang bisa menyebabkan crash?

fgcartographix
sumber
1
Pada pandangan pertama, sepertinya Anda memiliki beberapa karakter aneh di jalur direktori Anda. Coba pindahkan shapefile ke direktori test like D:\testdan lihat apakah itu berhasil.
Mintx
Tidak pernah ada masalah dengan itu sebelumnya. Karakternya adalah "#" dan itu hanya trik penyortiran lama sehingga proyek saya akan muncul terlebih dahulu. Saya mencoba meletakkan proyek saya di D: / TEMP, tetapi tidak berhasil ...
fgcartographix

Jawaban:

4

Saya tahu ini cukup lama, tetapi saya baru saja mengalami masalah yang sama dan terkejut dengan kurangnya solusi di luar sana. Solusinya sangat sederhana, tetapi Anda tidak akan bisa mengetahuinya berdasarkan pada bantuan ESRI yang praktis tidak ada:

Jangan sertakan ekstensi shapefile. ...Itu dia.

newSource = os.path.join(currDir, lyrZones + "_Dep" + dirNum + ".shp")

Harus dibaca:

newSource = os.path.join(currDir, '{}_Dep{}'.format(lyrZones, dirNum))
Tom
sumber
1
Pertanyaan dan jawaban berkaitan dengan shapefile. Namun saya mengalami masalah serupa dengan kelas fitur di Enterprise Geodatabase (alias SDE). Ternyata arcpy. Eksis membutuhkan nama yang sepenuhnya memenuhi syarat. Namun, layer.replaceDataSource gagal jika Anda menggunakan nama yang sepenuhnya memenuhi syarat, tetapi berfungsi jika Anda hanya menggunakan nama fitur dan meninggalkan database dan nama pengguna.
dvdhns
1

Bersenang-senang dengan debugging! Coba ini:

for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.name == lyrZones:
        if lyr.supports("DATASOURCE"):
            print lyr.dataSource
            print currDir
            print newSource
            lyr.replaceDataSource(currDir, "SHAPEFILE_WORKSPACE", newSource, TRUE)
            print "Did we crash yet?"
            print lyr.dataSource
        else:
            print "Layer isn't supported!"
Mintx
sumber
Setidaknya saya tahu Datasource didukung. Mendapat pesan kesalahan yang sama. Hancur pada "lyr.replaceDataSource (currDir," SHAPEFILE_WORKSPACE ", newSource, True)". Tidak sampai ke "Apakah kita sudah crash?". Frustasi ...
fgcartographix
Argh, itu menyebalkan. Apa tujuan akhir yang ingin Anda capai? Mungkin ada cara lain untuk melakukannya.
Mintx
Saya memiliki 5 templat dan antara 14 dan 50 peta yang harus dikerjakan (total 128 peta). Saya memiliki dua lapisan untuk memperbarui masing-masing. Yang pertama hanya Def. Kueri yang saya tangani seperti bos;) (lyr.definitionQuery = defQueryLines). Yang lainnya adalah lapisan poligon yang memiliki simbologi warna bertingkat, tetapi file tersebut harus berubah. Saya menulis sebuah skrip yang menciptakan output untuk setiap peta dan saya perlu memperbarui sumber dan mengubah nilai simbologi (tapi saya pikir 10,1 yang melakukan itu. Saya punya 10,0) sehingga saya dapat menjaga simbologinya ...
fgcartographix
Untuk saat ini, saya memperbarui file secara manual (batch pertama memiliki 20 peta sehingga tidak membosankan), tetapi yang berikutnya akan memiliki 50 peta jadi ...
fgcartographix
Apakah alat harus bekerja dengan file .lyr? Mungkin saya bisa bekerja secara langsung pada .lyr di mana saya bisa berubah adalah sumber data. Saya tidak melihat properti apa pun untuk mengubah simbologi valye (bidang dilambangkan ...)
fgcartographix
1

Saya tidak tahu apakah ini membantu Anda atau tidak, tetapi saya mengalami kesalahan ini mencoba untuk beralih sumber data SDE untuk layer. Apa yang saya temukan adalah bahwa ketika saya menjalankan dari PyScripter, itu akan menggulung proses python.exe 64-bit. Saya akan mendapatkan ValueError. Jika saya memaksa skrip untuk menjalankan menggunakan python.exe 32-bit melalui Command Prompt, saya tidak akan mendapatkan kesalahan. Saya tidak tahu apakah itu akan membantu masalah Anda atau tidak, tetapi patut dicoba!

Bryan
sumber
Terima kasih. Semuanya 32-bit, jadi tidak masalah, tapi saya akan mengingatnya ketika saya akan mencoba geoprocessing 64-bit. Untuk saat ini, saya telah meninggalkan bagian itu dari skrip saya dan mengganti sumbernya dengan tangan ... :(
fgcartographix
1

Sebagian besar info tentang ini ada di sini . Tetapi untuk mengatasi ini saya pergi ke jendela python dalam ArcCatalog untuk memeriksa definisi ESRI dari setiap parameter dalam fungsi .replaceDataSource.

.replaceDataSource (workspace, workspace_type, dataset_name)

workspace = ruang kerja sumber data baru

workspace_type = jenis ruang kerja aktual yang tercantum di bagian ganti sumber data dari bantuan yang ditautkan.

dataset_name = nama file tanpa tipe file (IE: .shp), bukan nama dataset dalam daftar isi. Tidak perlu direktori di depannya juga.

littlenerrie86
sumber