Daha çox

Masaüstü üçün ArcGIS -in Sahə Kalkulyatorunda təsadüfi olaraq birdən çox sahədən birini seçirsiniz?

Masaüstü üçün ArcGIS -in Sahə Kalkulyatorunda təsadüfi olaraq birdən çox sahədən birini seçirsiniz?


Masaüstü üçün ArcGIS -də Sahə Kalkulyatorundan istifadə edərək, 10 sahə (sətir) siyahısından təsadüfi bir sahə seçmək istəyirəm.

İşləyən Excel ekvivalenti belədir:= İNDEKS (A2: J2; ​​rnd ()*10+1).

Bunu tercihen VBScript -də (və ya Pythonda) necə edə bilərəm?


Python'u ayrıştırıcınız olaraq istifadə edərək, sahələrinizin siyahısını yaradın və sonra təsadüfi olaraq çıxarmaq üçün təsadüfi bir ədəd istifadə edin.

Qeyd 1:təsadüfiModulun mövcud olduğundan əmin olmaq üçün kod blokuna daxil edilməlidir.

Qeyd 2: Bunu daha çox və ya daha az sahə dəyərləri üçün dəyişdirməli olsanız, son rəqəmi (9 olaraq göstərilir) siyahının eksi 1 uzunluğuna uyğunlaşdırın.


Düşünürəm ki, bu, VBScript ilə əlaqəli olacaq, nümunənizdən istifadə edərək (0-9) indeksdən seçmək üçün 10 sahə:

int (10*rnd)

… Və numpy istifadə edərək Python kod bloku ilə:

num defy.random kimi R def getRandom (numFlds): int (R.random ()*numFlds) qaytar

Yuxarıdakı Python bloku çağırılacaqdı (yenə 10 sahə nümunəsi ilə):

getRandom (10)

Bunu bir az da genişləndirərək, deyək ki, həqiqi sahə adlarını (indeks əvəzinə) qaytarmaq üçün yaradılan təsadüfi indeksi istifadə etmək istədiniz, bu Python istifadə etməklə əlverişlidir (standart məlumat çərçivəsindəki 1 -ci qatdan istifadə edir):

num Fpl.random kimi R Flds = arcpy.ListFields (arcpy.mapping.ListLayers (arcpy.mapping.MapDocument ('CARİ' '),'*') [0]) numFlds = len (Flds) def getRandom () olaraq idxal edin: Flds -i qaytarın [int (R.random ()*numFlds)] adı

Əlbəttə ki, bunu hesablamanın əsaslandığı eyni cədvəlin sonuna əlavə edilmiş "layihə" sahəsində hesablayırsınızsa və bu sahəni təsadüfi generatora daxil etmək istəmirsinizsə, o zaman sadəcə defFormatından əvvəl numFlds var'dan 'layihə' sahələrinin sayı, yəni bu hesablamanı aparmaq üçün cədvəlin sonuna yalnız bir mətn sahəsi əlavə edilərsə (və xaric edilməlidir), onda numFlds = len (Flds) - 1 [numFlds = len əvəzinə (Flds)].