Daha çox

Arcpy.mapping mətn elementi sıfırlanır

Arcpy.mapping mətn elementi sıfırlanır


Minlərlə xəritələr yaratmaq üçün bir skript yazıram və hər xəritəni yeniləyən bir cədvəl yaratmağa çalışıram. Əsasən hər bir xəritəyə xas olan məlumatların yenilənən cədvəli. Layihə görünüşünə bir excel cədvəli bağlamağa çalışıram, amma arcın bu funksiyaya malik olmadığı görünür. Bunun əvəzinə etdiyim şey, nizam görünüşündə bir əl masası yaratmaqdır. Bir lüğətdə saxladığım hər bir xəritə üçün 27 dəyərim var (məlumatı çıxarmaq və lüğətdə saxlamaq üçün axtarış kursorlarından istifadə etməklə).

Cədvəlimi bura kopyalayıb yapışdıra bilmirəm, amma mahiyyətcə belə görünür:

Reseptorlar AEGbuffer CONbuffer ERGbuffer tampon 1 10 19 məktəb 2 11 20 uşaq baxçaları 3 12 21 xəstəxanalar 4 13 22 tibb bacısı evləri 5 14 23 tənqidi 6 15 24 sw 7 16 25 axınlar 8 17 26 respop 9 18 27

sıralanan k, v üçün (table.items ()): arcpy.mapping.ListLayoutElements içərisində qaraciyər üçün (mxd, "TEXT_ELEMENT"): əgər elm.text == "1": əgər k == 'AEGbuffer': qarağac. text = v əgər elm.text == "2": əgər k == 'AEGschools': elm.text = v əgər elm.text == "3": əgər k == 'AEGchildcares': elm.text = v əgər elm.text == "4": əgər k == 'AEGhospitals': elm.text = v əgər elm.text == "5": əgər k == 'AEGnursinghomes': elm.text = v əgər elm.text = = "6": əgər k == 'AEGcritical': elm.text = v əgər elm.text == "7": k == 'AEGsw' olarsa: elm.text = v əgər elm.text == "8" : əgər k == 'AEGstreams': elm.text = v əgər elm.text == "9": k == 'AEGrespop' olarsa: elm.text = v

bu yalnız birinci sıra üçündür, kodun qalan hissəsi lüğət dəyərlərinin yapışdırılması üçün eyni prosesdir.

sıxışdığım yer: Yeni dəyişdirilmiş dəyərləri orijinal 1-27 dəyərlərinə necə düzgün bir şəkildə sıfırlayacağımı bilmirəm, beləliklə növbəti xəritə asanlıqla istehsal oluna bilər. bunun üçün bir vasitə və ya hiylə varmı?

sınadıqlarım: xəritəni ixrac etdikdən sonra mətn elementlərini yenidən açıram və prosesi tərsinə çevirirəm ...

sıralanan k, v üçün (table.items ()): arcpy.mapping.ListLayoutElements (mxd, "TEXT_ELEMENT") üçün qaraciyər üçün: k == 'AEGbuffer': əgər elm.text == v: elm.text = "1" və s.

amma bu yanaşma çox yaxşı nəticə vermədi. eyni dəyərlər masada bir neçə dəfə olduqda dəyərlərin bir neçəsi səhvdir.


Hər bir elementin mətn məzmununu təyin etmək əvəzinə, adını "Mətn1" kimi bir şeyə qoyun və ya daha da yaxşı, element adlarını masanızdakı 'AEGbuffer' kimi əsas adlarla uyğunlaşdıra bilərsiniz. Mən olsaydım, sahələrə bir sonluq da əlavə edərdim ki, yalnız masa elementlərində işlədiyimdən əmin olum. Daha sonra geri qayıda və masa döngənizə daxil etmək istəmədiyiniz mətn elementləri əlavə edə bilərsiniz.

Sonra nəhəng döngəniz belə görünə bilər

arcpy.mapping.ListLayoutElements -də table_elm üçün (mxd, "TEXT_ELEMENT", "*_table"): əgər text_elm.name == k: text_elm.text = v

Səni sıfırlamaq üçün

arcpy.mapping.ListLayoutElements -də table_elm üçün (mxd, "TEXT_ELEMENT", "*_table"): table_elm.text = ""

EDIT: Şərhlərinizə əsasən, əsl probleminizin məlumat formatınız olduğunu düşünürəm.

{'xəstəxanalar': {'AEGBuffer': 'Heç biri', 'ConBuffer': '65, 200 ',' ERGBuffer ':' Heç biri '},' məktəblər ': {' AEGBuffer ':' 600 ',' ConBuffer ':' 7,300 ',' ERGBuffer ':' 550 '},' respop ': {}}

etməyə imkan verir:

#sənin k indi satır adı olacaq, yəni xəstəxanalar və v sıralanmış k, v üçün başqa bir lüğət olacaq (table.items ()): #bu, bufferType üçün hospitalERGBuffer, schoolCONBuffer və s. adlandırılan elementlərə əsaslanır. , bufferValue in v.items (): fieldName = str (k + bufferType) # ie 'hospitalERGBuffer' table_elm = arcpy.mapping.ListLayoutElements (mxd, "TEXT_ELEMENT", fieldName + "*") [0] # yalnız bunu düzgün etdinizsə biri olun. table_elm.text = bufferValue

Mətn elementlərini sıfırlamağa çalışarkən səliqəli bir hiylə anladım. Mxd yolunuzu keçdiyiniz döngəyə daxil etsəniz, mətn elementlərinizi sıfırlamaq üçün kod yazmağa ehtiyac yoxdur

Əl ilə yenidən qurmağın ilk yolu:

mxd = "yol" fc -də yatmaq üçün: ## text_elements -də x üçün xəritə üçün məlumat çıxarın: əgər x == "söz": x = "sayı" arcpy.export_pdf ("xəritə") x in x üçün x mətn elementlərində: əgər x == "nömrə": x = "söz"

mxd yolunu əsas döngənizə daxil etsəniz, mətn elementlərini sıfırlamanıza ehtiyac yoxdur!

for lay in fc: mxd = "path" ## text_elements -də x üçün xəritə üçün məlumat çıxarın: əgər x == "söz": x = "nömrə"