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

ArcGIS Desktop: 23MB (73MB)
ArcGIS Pro: 94MB (1,07GB)
 

1. Wstęp do GIS

Wykład 1: Wstęp do GIS
 
Ćwiczenie 1: Wycieczka po San Diego. Wstęp do ArcGIS
 
Wykład 2: Aplikacja ArcGIS
Ćwiczenie 2: Szacowanie szkód wywołanych przez tornado. Od metainformacji do wyników analizy
 
Wykład 3: Rozwiązywanie zadań przy użyciu GIS
Ćwiczenie 3: Wybór lokalizacji dla centrum młodzieżowego. Zapytania atrybutowe i przestrzenne
 

2. Symbolizacja map

Wykład 4: Symbole i adnotacje
Ćwiczenie 4: Lokalizacja ośrodka dziennego dla seniorów. Symbolizacja i etykietowanie obiektów na mapach
 
Wykład 5: Symbole bazujące na atrybutach
Ćwiczenie 5: Lokalizacja ośrodka dziennego dla seniorów. Symbole oparte na atrybutach
 
Wykład 6: Metody klasyfikacji danych
Ćwiczenie 6: Lokalizacja ośrodka dziennego dla seniorów. Klasyfikacja danych
 
Wykład 7: Mapy gęstości i proporcji
Ćwiczenie 7: Lokalizacja ośrodka dziennego dla seniorów. Mapy gęstości i normalizacja danych
 

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
 
Ćwiczenie 12: Salzburg. Geobaza wspierająca branżę turystyczną
 
 

5. Tworzenie i edycja danych

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

6. Analizy GIS

Wykład 16: Procedura analiz GIS
 
Ćwiczenie 17: Poszukiwania nieruchomości spełniającej kryteria. Definiowanie problemu i wybór danych do analiz
 
Wykład 17: Zapytania atrybutowe i przestrzenne, łączenie tabel
 
Ćwiczenie 18: Poszukiwania nieruchomości spełniającej kryteria. Analiza GIS
 
Wykład 18: Prezentacja wyników analiz
 
Ćwiczenie 19: Poszukiwania nieruchomości spełniającej kryteria. Przygotowanie mapy prezentacyjnej
 
Ćwiczenie 20: Poszukiwania nieruchomości spełniającej kryteria. Tworzenie raportów
 

7. Geoprzetwarzanie i modelowanie

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

8. Tworzenie profesjonalnych map

Wykład 21: Elementy mapy, praca w widoku układu
 
Ćwiczenie 24: Przetarg na zakup drewna. Praca z układami
 
Wykład 22: Tworzenie profesjonalnych map
 
Ćwiczenie 25: Siedliska nietoperzy w południowo zachodniej części Ameryki Północnej. Tworzenie profesjonalnych map"