Łączna długość linii wewnątrz ob. poligonowych

OPROGRAMOWANIE:

Geomedia Professional: 06.01.11.13

PROBLEM:

Mamy dwie klasy: jedną o geometrii liniowej i drugą o geometrii poligonowej:

  • Hydro_cieki_powierzchniowe (Fig. 1),
  • siatka - siatka kwadratowa o boku 500 m (Fig. 2).
Fig. 1. Klasa: Hydro_cieki_powierzchniowe
Fig. 1. Klasa: Hydro_cieki_powierzchniowe

Klasa: siatka
Fig. 2. Klasa: siatka (nałożona na klasę Hydro_cieki_powierzchniowe)

Stawiamy sobie za cel obliczenie sumarycznej długości wszystkich odcinków obiektów klasy o geometrii liniowej (w tym przypadku Hydro_cieki_powierzchniowe) przypadajacych na każde oczko klasy siatka (Fig. 3).

Długość liniowych odcinków klasy Hydro_cieki_powierzchniowe przypadających na przykładowe oczko klasy siatka
Fig. 3. Długość liniowych odcinków klasy Hydro_cieki_powierzchniowe przypadających na przykładowe oczko klasy siatka

Aby dokonać niezbędnych obliczeń będziemy musieli podzielić obiekty klasy liniowej na fragmenty odpowiadające przestrzennym zakresom obiektów klasy siatka. W ten sposób otrzymamy pofragmentowane odcinki cieków powierzchniowych. W tak przygotowanych danych, za pomoca atrybutu funkcyjnego obliczymy długość każdego z odcinków klasy cieki_powierzchniowe. Na koniec, za pomocą narzędzia: Aggregation dokonamy zsumowania długości wszystkich odcinków liniowych występujących w każdym oczku siatki.

ROZWIĄZANIE:

  1. W oknie dialogowym Feature Class, otwieramy kolejno klasę liniową (np: Hydro_cieki_powierzchniowe) i klasę siatki (np: siatka) i zmieniamy mazwy ich kluczy podstawowych na intuicyjne, kolejno: ID_cieki_powierzchniowe oraz ID_siatka. Krok ten nie jest konieczny ale ułatwi nam późniejsze prace.
  2. Obliczamy iloczyn przestrzenny Spartial intersection klasy obiektów liniowych (Hydro_cieki_powierzchniowe) i klasy siatki (siatka) (zapytanie wynikowe: cieki_powierzchniowe_siatka). Nowemu zapytaniu nadajemy nazwę: Hydro_cieki_pow_1_w_siatce. Każdy z fragmentów cieków powierzchniowych otrzymuje w ten sposób dodatkowy atrybut opisujący jego położenie względem oczek siatki (ID_siatka).
  3. Otwiieramy okno: Analysis->Functional Atributes i przy pomocy utworzonego atrybutu:

    LENGTH(Input.IntersectionGeometry; ProjectedMeas; Meter)
    tworzymy zapytanie o długość każdego odcinka liniowego zapytania Hydro_cieki_pow_1_w_siatce (Fig. 4). Utworzonemu atrybutowi funkcyjnemu nadajemy nazwę: dlugosc_ciekow. Utworzonemu zapytaniu nadajemy nazwę: Hydro_cieki_pow_2_dlugosc_potokow.
    Okno dialogowe Functional Attribute z formułą obliczającą długość linii
    Fig. 4. Okno dialogowe Functional Attribute z formułą obliczającą długość linii
    W wyniku jego działania, w tabeli atrybutowej zapytania pojawia się kolumna zawierająca wartości długości wszystkich odcinków cieków powierzchniowych (Fig. 5).
    Tabela atrybutowa zapytania zawierająca obliczone wartości atrybutu dlugosc_ciekow
    Fig. 5. Tabela atrybutowa zapytania zawierająca obliczone wartości atrybutu dlugosc_ciekow
  4. Za pomoca polecenia Aggregation, dla każdego okna siatki, dokonujemy obliczeń długości wszystkich linii. Aggregate to summary features in: siatka; From detail features in: Hydro_cieki_pow_2_dlugosc_potokow; Spartial Aggregation: touch; Attribute Aggregation Id_siatka/Id_siatka; Output: NEW. Tworzymy atrybut funkcyjny obliczający dla każdego okna siatki sumaryczną długość wszystich odcinków linii (nazwa: Suma_dlugosci_potokow) (Fig. 6):
  5. SUM(Detail.dlugosc_potokow)
    Okno dialogowe Aggregation, zakladka Attribute Aggregation - wybór atrybutów
    Fig. 6. Okno dialogowe Aggregation, zakladka Attribute Aggregation - wybór atrybutów
  6. W wyniku uruchomienia utworzonego zapytania otrzymujemy siatkę, w którego atrybutach odnajdziemy Suma_dlugosci_potokow (Fig. 7).
    Długość linii obliczona dla wybranego oczka siatki  Długość linii obliczona dla wybranego oczka siatki
    Fig. 7. Sumaryczna długość linii obliczona dla wybranego oczka siatki