Atrybut funkcyjny w GeoMedia obliczający liczbę punktów o danej wartości atrybutu


Tomasz Bartuś



OPROGRAMOWANIE:

Geomedia Professional: 06.01.11.13

PROBLEM:

Siatka kwadratowa o boku 500 m.

Siatka punktów o różnych wartościach atrybutu ranga
Fig. 1. Siatka punktów o różnych wartościach atrybutu ranga

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:

Entropia jednostkowa

gdzie:
qi
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]:

  1. 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.
  2. 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).
  3. 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):

    SUM(SUM(IF(Detail.ranga=1; 1; 0)); SUM(IF(Detail.ranga=2; 1; 0)); SUM(IF(Detail.ranga=3; 1; 0)); SUM(IF(Detail.ranga=5; 1; 0)); SUM(IF(Detail.ranga=6; 1; 0)); SUM(IF(Detail.ranga=7; 1; 0)); SUM(IF(Detail.ranga=8; 1; 0)))

    Utworzony atrybut funkcyjny zapisujemy pod nazwą: SUMAelementów_Lj.
  4. 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:

    SUM(IF(Detail.ranga=2; 1; 0)) -> nazwa: SUMA2
    SUM(IF(Detail.ranga=3; 1; 0)) -> nazwa: SUMA3
    SUM(IF(Detail.ranga=5; 1; 0)) -> nazwa: SUMA5
    SUM(IF(Detail.ranga=6; 1; 0)) -> nazwa: SUMA6
    SUM(IF(Detail.ranga=7; 1; 0)) -> nazwa: SUMA7
    SUM(IF(Detail.ranga=8; 1; 0)) -> nazwa: SUMA8

    Utworzone atrybuty funkcyjne, co prawda nie rozwiązują zasadniczego problemu ale staną się pomocne przy testowaniu poprawności głównej formuły.
  5. 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

    (CAST(SUM(IF(Detail.ranga=1; 1; 0))/Output.SUMAelementów_Lj; double))*(IF(SUM(IF(Detail.ranga=1; 1; 0))>0; (LN(CAST(SUM(IF(Detail.ranga=1; 1; 0))/Output.SUMAelementów_Lj; Double))); 0))

    i dalej kolejno:
    • (CAST(SUM(IF(Detail.ranga=2; 1; 0))/Output.SUMAelementów_Lj; double))*(IF(SUM(IF(Detail.ranga=2; 1; 0))>0; (LN(CAST(SUM(IF(Detail.ranga=2; 1; 0))/Output.SUMAelementów_Lj; Double))); 0))
    • (CAST(SUM(IF(Detail.ranga=3; 1; 0))/Output.SUMAelementów_Lj; double))*(IF(SUM(IF(Detail.ranga=3; 1; 0))>0; (LN(CAST(SUM(IF(Detail.ranga=3; 1; 0))/Output.SUMAelementów_Lj; Double))); 0))
    • (CAST(SUM(IF(Detail.ranga=5; 1; 0))/Output.SUMAelementów_Lj; double))*(IF(SUM(IF(Detail.ranga=5; 1; 0))>0; (LN(CAST(SUM(IF(Detail.ranga=5; 1; 0))/Output.SUMAelementów_Lj; Double))); 0))
    • (CAST(SUM(IF(Detail.ranga=6; 1; 0))/Output.SUMAelementów_Lj; double))*(IF(SUM(IF(Detail.ranga=6; 1; 0))>0; (LN(CAST(SUM(IF(Detail.ranga=6; 1; 0))/Output.SUMAelementów_Lj; Double))); 0))
    • (CAST(SUM(IF(Detail.ranga=7; 1; 0))/Output.SUMAelementów_Lj; double))*(IF(SUM(IF(Detail.ranga=7; 1; 0))>0; (LN(CAST(SUM(IF(Detail.ranga=7; 1; 0))/Output.SUMAelementów_Lj; Double))); 0))
    • (CAST(SUM(IF(Detail.ranga=8; 1; 0))/Output.SUMAelementów_Lj; double))*(IF(SUM(IF(Detail.ranga=8; 1; 0))>0; (LN(CAST(SUM(IF(Detail.ranga=8; 1; 0))/Output.SUMAelementów_Lj; Double))); 0))
  6. Łącząc utworzone elementy w sumę, tworzymy atrybut funkcyjny obliczający Hjed:

    -SUM(CAST(SUM(IF(Detail.ranga=1; 1; 0))/Output.SUMAelementów_Lj; Double)*IF(SUM(IF(Detail.ranga=1; 1; 0))>0; LN(CAST(SUM(IF(Detail.ranga=1; 1; 0))/Output.SUMAelementów_Lj; Double)); 0); CAST(SUM(IF(Detail.ranga=2; 1; 0))/Output.SUMAelementów_Lj; Double)*IF(SUM(IF(Detail.ranga=2; 1; 0))>0; LN(CAST(SUM(IF(Detail.ranga=2; 1; 0))/Output.SUMAelementów_Lj; Double)); 0); CAST(SUM(IF(Detail.ranga=3; 1; 0))/Output.SUMAelementów_Lj; Double)*IF(SUM(IF(Detail.ranga=3; 1; 0))>0; LN(CAST(SUM(IF(Detail.ranga=3; 1; 0))/Output.SUMAelementów_Lj; Double)); 0); CAST(SUM(IF(Detail.ranga=5; 1; 0))/Output.SUMAelementów_Lj; Double)*IF(SUM(IF(Detail.ranga=5; 1; 0))>0; LN(CAST(SUM(IF(Detail.ranga=5; 1; 0))/Output.SUMAelementów_Lj; Double)); 0); CAST(SUM(IF(Detail.ranga=6; 1; 0))/Output.SUMAelementów_Lj; Double)*IF(SUM(IF(Detail.ranga=6; 1; 0))>0; LN(CAST(SUM(IF(Detail.ranga=6; 1; 0))/Output.SUMAelementów_Lj; Double)); 0); CAST(SUM(IF(Detail.ranga=7; 1; 0))/Output.SUMAelementów_Lj; Double)*IF(SUM(IF(Detail.ranga=7; 1; 0))>0; LN(CAST(SUM(IF(Detail.ranga=7; 1; 0))/Output.SUMAelementów_Lj; Double)); 0); CAST(SUM(IF(Detail.ranga=8; 1; 0))/Output.SUMAelementów_Lj; Double)*IF(SUM(IF(Detail.ranga=8; 1; 0))>0; LN(CAST(SUM(IF(Detail.ranga=8; 1; 0))/Output.SUMAelementów_Lj; Double)); 0)) Atrybut nazywamy: Hjed.
  7. 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:

    IF(Output.SUMAelementów_Lj=0; 99; formuła atrybutu funkcyjnego Hjed)

    Teraz w oczkach siatki, w których brak jakichkolwiek elementów, w wyniku działania atrybutu, pojawi się wartość "99".
 
 

Informacje wstępne

 
 
 
 

Dane

 
 
Dane (arch.: 23MB, po rozpak.: 73MB)
 
 
 

Ćwiczenia

 
 

1. Wstęp do GIS

 
 
 
 
Wykład 1: Wstęp do GIS
 
Ćwiczenie 1: Wstęp do ArcGIS: Wycieczka po San Diego
 
Wykład 2: Aplikacja ArcGIS
Ćwiczenie 2: Szacowanie szkód wywołanych klęskami żywiołowymi
 
Wykład 3: Rozwiązywanie zadań przy użyciu GIS
Ćwiczenie 3: Wybór lokalizacji dla centrum młodzieżowego
 
 
 

2. Symbolizacja map

 
 
 
 
Wykład 4: Symbole i adnotacje
Ćwiczenie 4: Symbolizacja i etykietowanie obiektów na mapach
 
Wykład 5: Symbole bazujące na atrybutach
Ćwiczenie 5
 
Wykład 6: Metody klasyfikacji danych
Ćwiczenie 6: Klasyfikacja
 
Wykład 7: Mapy gęstości i proporcji
Ćwiczenie 7
 
 
 

3. Układy współrzędnych i odwzorowania kartograficzne

 
 
 
 
Wykład 8: Układy współrzędnych geograficznych
Ćwiczenie 8: Położenie kabla transatlantyckiego. Modyfikacje układów współrzędnych
 
Wykład 9: Odwzorowania kartograficzne
Ćwiczenie 9: Położenie kabla transatlantyckiego. Właściwości odwzorowań kartograficznych
 
 
 

4. Organizacja danych geograficznych

 
 
 
 
Wykład 10: Modele danych geograficznych
Ćwiczenie 10: Ocena zagrożenia powodziowego. Analiza danych geograficznych
 
Wykład 11: Geobazy
Ćwiczenie 11: Ocena zagrożenia powodziowego. Tworzenie przestrzennej bazy danych
 
 
 

5. Tworzenie i edycja danych

 
 
 
 
Wykład 12: Tworzenie i edycja danych GIS
Ćwiczenie 12: Centrum handlowe Galeria. Modyfikacja śladów budynków
 
Wykład 13: Topologia
Ćwiczenie 13: Centrum handlowe Galeria. Modyfikacja obiektów z zachowaniem topologii
 
Wykład 14: Edycja atrybutów obiektów
Ćwiczenie 14: Centrum handlowe Galeria. Modyfikacja atrybutów
 
Wykład 15: Tworzenie nowych obiektów
Ćwiczenie 16: Tworzenie nowych klas i ich atrybutów
 
 
 

6. Analizy GIS

 
 
 
 
Wykład 16: Procedura analiz GIS
Ćwiczenie 17: Definiowanie problemu i wybór danych do analiz
 
Wykład 17: Zapytania atrybutowe i przestrzenne, łączenie tabel
Ćwiczenie 18: Analiza GIS
 
Wykład 18: Prezentacja wyników analiz
Ćwiczenie 19: Przygotowanie map do prezentacji
 
Ćwiczenie 20: Tworzenie raportów
 
 
 

7. Geoprzetwarzanie i modelowanie

 
 
 
 
Wykład 19: Geoprzetwarzanie
Ćwiczenie 21: Ocena zniszczeń pożarowych
 
Wykład 20: Modele i modelowanie
Ćwiczenie 22: Tworzenie i obsługa prostych modeli
 
Ćwiczenie 23: Praca z istniejącymi modelami
 
 
 

8. Tworzenie profesjonalnych map

 
 
 
 
Wykład 21: Elementy mapy, praca w widoku układu
Ćwiczenie 24: Mapa zasobów drewna obszarów National Forest Tongass
 
Wykład 22: Tworzenie profesjonalnych map
Ćwiczenie 25: Profesjonalna mapa "Siedliska nietoperzy w południowo-zachodniej części Ameryki Północnej"