Daha çox

Topluda işləyən alətlərdə Dəyəri Hesabla (Yalnız Model Aləti) düzgün işləyir?


Modelimdə yalnız bir model vasitəsi varsa (Dəyəri Hesabla) və sonra modeli toplu bir proses kimi idarə etsəm, Dəyəri Hesabla ifadəsini işlədəcəyəmmi?

Excel fayllarından XY məlumatlarını yükləmək, təyin etmək, proyektləşdirmək (və klip) etmək üçün bir model yazdım. Təkrarlanan masalardan istifadə etməyi düşünmüşdüm, amma işə yaramadı. (Xlxs içərisində hansı iş səhifəsini seçməli olduğumu düşünürəm). Beləliklə, bir toplu iş görməyi düşündüm, amma bu görünür ki, qövs cədvəl adlarına əlavə olunan zəhlətökən $ (və əksər alətlərdə etibarsız bir xarakterdir ...)

Təxmin etdiyim budur ki, $ simi çıxaran Hesabla dəyəri topluda işləmir. Fikirlər? Təsdiqlər?


Dəyəri Hesabla adlanan Yalnız Model Aləti Toplu işləyə bilər.

Bunu özümə sübut etmək üçün aşağıdakıları etdim:

  1. Bir test xüsusiyyəti sinfi yaradın, bir xüsusiyyət və boş bir sahə əlavə edin - Short Integer istifadə etdim
  2. Üçün və Kopyala Xüsusiyyətləri adlı Iterator ilə ilk kiçik modeli yazın və test1, test2,…, test5 adlı test xüsusiyyət sinifinin beş nüsxəsini yaratmaq üçün işə salın.
  3. Bəlkə də 12 + 17 etmək üçün Dəyəri Hesabla alətindən istifadə edən ikinci kiçik modeli yazın və sonra çıxma_düzərini 1-ə əlavə olunmuş sahəni doldurmaq üçün istifadə edən Hesablama Sahəsi vasitəsinə verin.
  4. Batch-də ikinci modeli 2-də yaradılan beş xüsusiyyət sinfi ilə çalıştırın.

Nəticə, beş xüsusiyyət sinifinin hər biri üçün sahədəki 29 nömrəsidir Dəyəri hesablayın aracı Batch-də işə salındı.


Yuxarıdakı "sübut" zəif tərtib edilmişdir, çünki yalnız Dəstəkdə İşləyən Dəyəri Hesabla vasitəsinin Dəyəri Hesabla Batch Grid-də hər sıra üçün fərqli bir cavab verməyi düşünmədiyi zaman düzgün nəticə verdiyini sübut edir.

Nəticə etibarilə, indi bu modeli istifadə edərək başqa bir sıra testlər apardım.

Model bir xüsusiyyət sinifini (adında 5-ci simvol kimi bir tam ədədi olmalıdır, məsələn test1, test2) giriş olaraq götürür, 5-ci simvolu tutmaq və tam sayı kimi qaytarmaq üçün Hesablama Dəyərindən istifadə edir. NewCount adlı başqa bir sahəyə yazılmış bir dəyər əldə etmək üçün Count adlı bir sahənin dəyəri (hər zaman 1-ə bərabərdir). Bunu həyata keçirmək üçün dialoq parametrlərinin detalları aşağıdadır.

Alət Open istifadə edərək və ya bir sıra ilə Toplu olaraq istifadə edildikdə gözlənilən nəticəni verir.

Bununla birlikdə, alət test1 və test2 iki giriş xüsusiyyət sinfi istifadə edərək toplu şəkildə işlədildikdə, NewCount sahələrinin müvafiq olaraq 2 (= 1 + 1) və 3 (= 1 + 2) səviyyəsinə qədər yenilənməsini gözləyəcəksiniz. Bunun əvəzinə, nə olur ki, test1 toplu şəbəkənin birinci sətrindədirsə, hər ikisinə 2 yazılır və test2 əvvəldirsə, hər ikisinə 3 yazılır.

Aşağıdakılardan aydın olur ki, hər bir alət toplu şəbəkənin hər sətirində bir dəfə işlədilirsə, Dəyəri Hesabla aləti cəmi bir dəfə işləyir.

İcra: BatchGridBug C:  Support  MBarretts20  test.gdb  test1 Başlama vaxtı: 26 Oktyabr Cümə 15:17:26 2012 İcra (Parse Path): ParsePath C:  Support  MBarretts20  test.gdb  test1 ADI Başlama vaxtı: 26 Oktyabr Cümə 15:17:26 2012 İcra (Parse Path): ParsePath C:  Support  MBarretts20  test.gdb  test2 ADI 26 Oktyabr Cümə 15:17:26 2012-də (Keçən Saat: 0.00 saniyə) İcra edildi (Hesablayın Dəyər): CalculateValue UpdateValue ("test1") "def UpdateValue (Dəyər):  n Dəyər = Dəyər  [4: ]  n return int (Dəyər)" Variant Başlama vaxtı: Cümə 26 Oktyabr 15:17:26 2012 Dəyər = 1 Cümə 26 Oktyabrda 15:17:26 2012-də uğur qazandı (Keçən vaxt: 0.00 saniyə) İcra (Sahəni hesabla): CalculateField C:  Support  MBarretts20  test.gdb  test1 NewCount "! Say! + 1" PYTHON # Başlayın Saat: Cümə 26 Oktyabr 15:17:26 2012 Yürütmə (Sahəni Hesabla): CalculateField C:  Support  MBarretts20  test.gdb  test2 NewCount "! Say! + 1" PYTHON # 26 Oktyabr Cümə'de Uduldu 15:17:27 2012 (Keçən Zaman: 1.00 saniyə) 26 Oktyabr Cümə müvəffəq oldu 15:17:27 2012 (Keçən Saat: 1.0) 0 saniyə)

Redlands-dan yerli dəstək vasitəsi ilə geribildirim "İşi evdə sınaqdan keçirdik və gördük ki ... Sayı evdə təkrarlanır ... bu, Dəyər hesabla vasitəsi ilə bilinən bir limitdir ... NIM053898:" Dəyər hesablayın vasitəsi toplu rejimdə ilk ifadə dəyişkənliyindən sonra dayanır ( və ya dəyərlərin siyahısı kimi təyin edildikdə) "Hata vəziyyəti: Layihələndirildiyi kimi rədd edildi Rədd edilmə səbəbləri: Məlum limit. 10-da İterate multivalue istifadə edin." Bunun bilinən bir limit kimi qəbul edildiyindən məyus oldum, beləliklə bu vəziyyətin ən azından Dəyəri Hesabla və Toplu Şəbəkələrdən istifadə altında sənədləşdirilib-etdirilməməsini xahiş etdim.


Bu, bu mövzuda təsvir olunan məsələyə bənzəyir: Partiyanı prosesləri ardıcıl işləməyə məcbur edin

Əsasən, bir toplu iş rejimində bir model çalıştırdığınızda, modeldəki ilk addımı toplu dialoqdakı hər bir sıra üçün bir dəfə işlədir, növbəti mərhələyə keçir və hər bir sıra üçün işləyir və s.

Beləliklə, hər cür axmaq yan təsirlərə səbəb ola biləcək ardıcıllıqla deyil, paralel olaraq prosesləri bir şəkildə aparır və ESRI-dən niyə belə davrandığına dair heç bir açıqlama görmədim.

Bu cansıxıcı davranış ətrafında işləmək üçün bir çox modelimi Python skriptlərinə bağlamalı oldum.

Yeniləmə: Budur daha da sadə bir test (Dəyəri Hesabla istifadə etmir).

  1. ArcMap-ı açın və Kataloq pəncərəsindən istifadə edərək a ilə bir cədvəl yaradınUzun Tamsayısütun və sütun üçün dəyəri 1 olan 1 sıra ilə doldurun.
  2. ArcMap-da belə bir model yaradın:
    • Quraşdırın Sahə dəyərini əldə edin alət:
    • Quraşdırın Sahəni hesablayın alət:
  3. ArcMap-da düzəlişlərə başlayın (beləliklə Cache-i yenidən yükləmədən dəyişiklikləri görə bilərsiniz)
  4. Modeli normal çalıştırın (toplu iş rejimi deyil)
    • Diqqət yetirinSAYIhər çalıştırdığınızda dəyər 1 artır.
  5. Modeli toplu rejimdə, demək olar ki, 10 girişlə idarə edin.
    • Diqqət yetirinSAYInə qədər girişiniz olursa olsun, yalnız 1 artırın.

Baş verənlər ilk iterasiya zamanı (toplu grid satırı), Get Field Value Tool işləyir. Sonra yenidən işə salır. Və yenidən. Toplu şəbəkədəki hər bir sıra üçün eyni sahə dəyərini dəfələrlə alır.

Bununla bitdikdə, Sahəni Hesabla alətinə keçir və ilk toplu ızgara sətri üçün işləyir, sonra eyni sətir dəyəri ilə növbəti sətir və s. Üçün yenidən işə salır, buna görə heç vaxt artmır.

Beləliklə, mətn çıxışında belə bir şey görürsünüz:

İcra (Alan Dəyəri Alın): GetFieldValue batch_count COUNT Uzun 0 Yürütmə (Alan Dəyəri Alın): GetFieldValue batch_count COUNT Uzun 0 Yürütmə (Alan Dəyəri Alın): GetFieldValue batch_count COUNT Uzun 0 İcra (Alan Dəyəri Alın): GetFieldValue batch_count Sahə Dəyəri Alın): GetFieldValue batch_count COUNT Uzun 0 İcra olunur (Alan Dəyərini Alın): GetFieldValue batch_count COUNT Uzun 0 Yürütülür (Alan Dəyəri Alın): GetFieldValue batch_count COUNT Uzun 0 İcra olunur (Alan Dəyəri Alın): GetFieldValue batch_count COUNT Get Dəyər): GetFieldValue batch_count COUNT Uzun 0 İcra olunur (Alan Dəyərini Alın): GetFieldValue batch_count COUNT Uzun 0 İcra olunur (Sahəni Hesablayın): CalculateField batch_count COUNT "2 + 1" VB # Yürütmə (Hesablayın Alan): CalculateField batch_count COUNT "2 + 1" VB # Yürütmə (Sahəni Hesabla): CalculateField batch_count COUNT "2 + 1" VB # Yürütmə (Field Calculate): CalculateField batch_count COUNT "2 + 1" VB # Executioning (Hesapla Sahə): CalculateField batch_count COUNT "2 + 1" VB # İcra (Sahəni Hesablayın): CalculateField batch_count COUNT "2 + 1" VB # İcra (Hesabla Sahə): CalculateField batch_count COUNT "2 + 1" VB # İcra (Sahəni Hesablayın) : CalculateField batch_count COUNT "2 + 1" VB # İcra (Sahəni Hesabla): CalculateField batch_count COUNT "2 + 1" VB # İcra (Hesabla Sahə): CalculateField batch_count COUNT "2 + 1" VB # İcra (Sahəni Hesabla): CalculateField toplu_sayış COUNT "2 + 1" VB #

Susqunluq.