Daha çox

Arcpy Xüsusiyyət Dərslərini Xüsusi Xüsusiyyət Dataslarına Yenidən Yazmaqla Kopyalayın


Məqsəd - Məndə müəyyən bir verilənlər bazası adları və daxilində xüsusiyyət sinifləri (xüsusiyyətləri olmayan) bir hədəf GDB "şeması" var. Göndərmə məlumat bazası xüsusiyyət siniflərini həmin hədəfə kopyalamaq istəyirəm. Əvvəlcə hədəfi təqdim olunan koordinat sisteminə uyğunlaşdırmaq üçün yenidən hazırlayıram.

Python ilə etmək istədiyim şey, bütün xüsusiyyət siniflərini təqdim olunan şəxsdən hədəfə köçürməkdir, burada bir təqdim xüsusiyyət xüsusiyyət sinfi adı hədəf GDB ilə birinə uyğun gəlirsə, onu hədəf GDB-də xüsusiyyət dəsti olduğu yerdə dəyişdirmək istəyirəm. boş xüsusiyyət sinfi hədəfdə idi. Göndərilən xüsusiyyət sinifinin hədəf GDB-də ad uyğunluğu yoxdursa, onu hər hansı bir xüsusiyyət məlumat bazasının xaricindəki hədəf GDB-yə köçürmək istəyirəm.

Mən piton təcrübəsiziyəm. Http://support.esri.com/en/knowledgebase/techarticles/detail/40831 bir başlanğıc olaraq istifadə etdim və indi bütün xüsusiyyət siniflərini mənbə GDB-dən hədəf GDB-yə kopyalamaq üçün işləyən kod (aşağıda) xüsusiyyət sildim. mənbə və hədəf GDB-lər arasında uyğun adlar olan xüsusiyyət məlumat dəstləri içərisindəki siniflər, ancaq mənbə xüsusiyyət siniflərini uyğun olan xüsusiyyət xüsusiyyət siniflərinin hədəfdə olduğu xüsusiyyət məlumat dəstlərinə qoymağı ala bilmirəm, sadəcə onları heç bir xüsusiyyət verilənlər bazasına qoymur GDB-də.

YENİLƏNİB: Kod, təqdim etdiyim verilənlər bazasının bir nüsxəsini çıxardığım zaman işləyir. Bu, hədəf verilənlər bazası xüsusiyyət məlumat dəstlərimdə hazırladığım layihənin əvvəlcə bütün məkan istinad məlumatlarını gətirmədiyi üçün kodun təyin olunduğu kimi işləmədiyini ortaya qoydu. Bunun istədiyim şəkildə işləməsini təmin etmək üçün hədəf GDB-də hədəf xüsusiyyət məlumat dəstləri ilə eyni adlarla yeni xüsusiyyət məlumat dəstləri yaratmaq üçün kod əlavə etməli olduğumu düşünürəm. adların təqdim olunan adların hədəf adları ilə uyğunlaşdığı siniflər, sonra orijinal hədəf xüsusiyyət məlumat dəstlərini silmək (və ya yaratarkən yazmaq).

Aşağıdakı kod parçası şərh təlimatı ilə yeniləndi:

import arcpy, os, string arcpy.env.overwriteOutput = True def FeatureClassToFeatureClass_conversion (start_db, end_db): # İş yerlərini təyin et DatasList: fclist = arcpy.ListFeatureClasses ("*", "", Database) for fclist: print "Reading: {0}". format (fc) name = arcpy.Describe (fc) new_data = name.name əgər arcpy .Mövcuddur (wk2 + os.sep + new_data) == Doğru: arcpy.Delete_management (wk2 + os.sep + new_data) arcpy.Copy_management (fc, wk2 + os.sep + new_data) "Tamamlanmış nüsxə {0}" .format (new_data) başqa: arcpy.Copy_management (fc, wk2 + os.sep + new_data) yazdır "Tamamlanmış nüsxə {0}". format (new_data) # Clear yaddaş del fc əgər __name __ == "__main__": start_db = arcpy.GetParameterAsText (0) end_db = arcpy.GetParameterAsText (1) FeatureClassToFeatureClass_conversion (start_db, end_db)

Hədəf bazanızda bir ad uyğunluğu varsa, daha asan köçürülür və daha sürətli yerinə yetirilir

  • hədəf xüsusiyyət sinifini təmizləyin (sinifin özünü yox, obyektləri silin)

  • proyeksiyasını təqdim xüsusiyyət xüsusiyyətinin proyeksiyasına uyğunlaşdırın. Burada iki böyük fərziyyə: hədəf xüsusiyyət sinfi bir xüsusiyyət verilənlər bazasında YOXDUR və atribut cədvəli quruluşu eynidir. Beləliklə, bu iş axınınızdan asılıdır.

  • təqdim olunan xüsusiyyət sinifindəki qeydləri əlavə edin.

Əks təqdirdə, proyeksiya məsələləriniz üçün ətraf mühit dəyişkənlərini təyin etməyə cəhd edə bilərsiniz

arcpy.env.outputCoordinateSystem

və lazım olduqda:

arcpy.env.geographicTransformations

Sonda, mənə elə gəlir ki, bu açıqlama

wk2 + os.sep + new_data

hədəf verilənlər bazasına və xüsusiyyət sinif adına istinadlar, bu səbəbdən müstəqil xüsusiyyət sinifləri yaratırsınız. Hədəf veritabanı adını açıq şəkildə, sətir boyunca bir şey daxil etməlisiniz:

wk2 + os.sep + verilənlər + os.sep + yeni_data


Videoya baxın: ArcMap - Table join (Oktyabr 2021).