Wewnątrz oczek siatki znajdują się obiekty punktowe o różnej wartości atrybutu ranga. Dla każdego oczka siatki mamy wykonać proste obliczenie arytmetyczne dane wzorem:
gdzie:
m - liczba wszystkich jednostek w danym oczku siatki,
np: w przypadku przedstawionym na Fig. 1:
1) Oczko lewe górne (I):
liczba wszystkich jednostek w oczku siatki I: 6;
liczba elementów zielonych (A): 2;
liczba elementów czerwonych (B): 1;
liczba elementów niebieskich (C): 3;
HI=-Σ(qI*ln qI)=-[(2/6*ln2/6)+(1/6*ln1/6)+(3/6*ln3/6)]
2) Oczko prawe górne (II):
liczba wszystkich jednostek w oczku siatki II: 0;
liczba elementów zielonych (A): 0;
liczba elementów czerwonych (B): 0;
liczba elementów niebieskich (C): 0;
HII=-Σ(qII*ln qII)=0
3) Oczko lewe dolne (III):
liczba wszystkich jednostek w oczku siatki III: 1;
liczba elementów zielonych (A): 1;
liczba elementów czerwonych (B): 0;
liczba elementów niebieskich (C): 0;
HIII=-Σ(qIII*ln qIII)=-[(1/1*ln1/1)]=0
4) Oczko prawe dolne (IV):
liczba wszystkich jednostek w oczku siatki IV: 0;
liczba elementów zielonych (A): 0;
liczba elementów czerwonych (B): 0;
liczba elementów niebieskich (C): 0;
HIV=-Σ(qIV*ln qIV)=0
ROZWIĄZANIE:
[dziękuję za olbrzymią pomoc P. Leszkowi Nowickiemu]:
W oknie dialogowym Feature Class, otwieramy kolejno klasę punktów (np: geologia_punktowe) i klasę siatki (np: siatka) i zmieniamy mazwy ich kluczy podstawowych na intuicyjne, kolejno: ID_geologia_punkty oraz ID_siatka. Krok ten nie jest konieczny ale ułatwi nam późniejsze prace.
Obliczamy iloczyn przestrzenny Spartial intersection klasy punktów (geologia_punktowe) i klasy siatki (siatka) (zapytanie wynikowe: geol_pkt_siatka). Każdy z punktów otrzymuje w ten sposób dodatkowy atrybut opisujący jego położenie względem oczek siatki (ID_siatka).
Za pomoca polecenia Aggregation, dla każdego okna siatki, dokonujemy obliczeń liczby wszystkich elementów. Załóżmy, że mamy 8 typów obiektów punktowych (rang) (np: kamieniołomy, piaskownie, jaskinie, ostańce denudacyjne itd.). Sumujemy najpierw obiekty danej rangi, a później sumy wszystkich rang. Należy zauważyć, że w podanym poniżej wzorze wyeliminowano obiekty punktowe o randze "4" i nie biorą one udziału w obliczeniach. Aggregate to summary features in: siatka; From detail features in: geol_pkt_siatka; Spartial Aggregation: touch; Attribute Aggregation: Id_siatka/Id_siatka; Output: NEW.
Tworzymy atrybut funkcyjny dla każdego okna siatki obliczający liczbę wszystich punktów, tzn. m (Lj):
Utworzony atrybut funkcyjny zapisujemy pod nazwą: SUMAelementów_Lj.
Przechodzimy do kolejnego kroku, t.j. obliczenia dla każdego oczka siatki, liczby elementów danego typu (rangi). Jeżeli nie wychodziliśmy z okna Aggregation, wystarczy w zakładce: Output; obok okna Output functional attributes, kliknąć new i wprowadzić formułę:
SUM(IF(Detail.ranga=1; 1; 0)) zapisując ją pod nową nazwą atrybutu funkcyjnego np: SUMA1. To samo robimy dla kolejnych rang punktów:
Utworzone atrybuty funkcyjne, co prawda nie rozwiązują zasadniczego problemu ale staną się pomocne przy testowaniu poprawności głównej formuły.
Przechodzimy do najważniejszej cześci, t.j. opracowania atrybutu funkcyjnego dla każdego oczka siatki obliczającego wartość parametru Hjed. Możemy przyjąć, że formuła będzie miała następującą postać ogólną:
-SUM(
obliczenia dla rangi 1;
obliczenia dla rangi 2;
obliczenia dla rangi 3;
obliczenia dla rangi 5;
obliczenia dla rangi 6;
obliczenia dla rangi 7;
obliczenia dla rangi 8;
)
Tworzymy obliczenia dla rangi 1. W obliczeniach wykorzystujemy działanie utworzonego wcześniej atrybutu: SUMAelementów_Lj
Na koniec, choć to oczywiście nie jest niekonieczne, dla odróżnienia sytuacji, w której w oczku siatki brak jakichkolwiek elementów punktowych (Hjed=0), od sytuacji, w której mamy dowolną ilość punktów tej samej rangi (Hjed=0), możemy dołożyć warunek: