Objektu skaits platības vienībā. Skaitam laukumus.

Objektu skaits platības vienībā ir diezgan izplatīts rādītājs, kas sniedz priekšstatu par lietām un parādībām. Mēs esam pieraduši salīdzināt valstis vadoties pēc iedzīvotāju skaita uz kvadrātkilometru. Topogrāfiskajām kartēm eksistē standarti, kas nosaka cik mērījumu punktiem ir jābūt katrā kartes kvadrātkilometrā. Nosakot dažādas saudzējamas teritorijas viens no kritērijiem ir saudzējamo objektu (augu u.c.) skaits uz platības vienību.
Šie visi gadījumi darbojas ļoti labi, ja objekti ir kā punkti (novērojumu vietas), bet ko darīt, ja skaitāmie objekti ir laukumi? Risinājums liekas tik vienkāršs – saskaitam centroīdu skaitu katrā kvadrātā un gatavs. Bet ko darīt, ja viens laukums var atrasties vairākos kvadrātos? Kuram kvadrātam tad tas tiks pieskaitīts?

Ideja par centroīdu skaitīšanu nebija nemaz tik peļama, vienīgi ir nepieciešams, lai laukumveida objektam būtu pa vienam centroīdam katrā no kvadrātiem, kas tiek izmantoti skaitīšanai. Šādu datu slāni var iegūt veicot divu laukumveida objektu slāņu ģeometriju šķelšanu (intersection). Pēc šķelšanas veikšanas, katrs kvadrātā esošais skaitāmais laukums būs kļuvis par patstāvīgu objektu ar savu centroīdu, kurus tad atliek tik saskaitīt. Tālāk dots piemērs kā to paveikt GRASS vidē izmantojot Spearfish datu paraugkopu.

Vispirms mums ir nepieciešams kilometru tīkls kuru mēs izmantosim skaitīšanai. Sākumpunkts ir brīvi novietots, viena elementa izmērs ir 1000×1000 m.
v.mkgrid map=soil_grid grid=7,9 position=coor coor=595000,4920000 box=1000,1000

Tagad veicam šķelšanu. Rezultējošajā datu kopā būs iekļauti tikai tie objekti, kuri pārklājas datu kopās A un B. Teritorijās, kur gan A, gan B objekti viscaur pārklājās, rezultāts būs identisks kā apvienošanas (union) darbībai.
v.overlay ainput=soil_grid atype=area binput=soils@PERMANENT btype=area output=soil_on_grid operator=and

Tagad mums ir centorīdi, kurus varam skaitīt. Pirms veicam skaitīšanu, nepieciešams iestatīt korektu rastra izšķirtspēju. Visvienkāršāk ir to izdarīt kā pamatu ņemot iepriekš izveidoto tīklu.
g.region vect=soil_grid res=1000
Pašu skaitīšanu ir visvienkāršāk veikt ar r.in.xyz palīdzību. Eksportējam datus ar v.out.ascii palīdzību, kas punktu režīmā eksportēs tikai laukumu centroīdus. Šo eksportu padodam r.in.xyz kā ievadu. Šis triks darbosies labi jebkurā normālā čaulā, savukārt Windows lietotājiem nāksies šo soli veikt divos piegājienos – saglabāt izvadi kā failu un tad ielādēt atkal no tā paša faila. Lai pasākumu padarītu interesantāku, skaitīsim tikai augsni, kuras kods ir “VaB”. Noskaidrot ko šis kods nozīmē, paliek kā mājas darbs lasītājiem pašiem.
v.out.ascii input=soil_on_grid format=point fs='|' dp=2 layer=1 where="b_label='VaB'" | r.in.xyz input=- output=VaB_count method=n

Dažas piezīmes par komandu – v.out.ascii pēc noklusējuma kā atdalītāju izmanto pipe | simbolu, kam ir speciāla nozīmē čaulā – pipe savieno vienas komandas izvadi ar otras komandas ievadi. Šī iemesla dēļ šo simbolu ir nepieciešams ievietot apastrofos, lai čaula ignorētu tā nozīmi. Principā tādēļ, ka fs parametra vērtība pēc noklusējuma jau ir ‘|’, to var arī nenorādīt, taču | nelikšana apastrofos ir pietiekami izplatīta kļūda, lai tai īpaši pievērstu uzmanību.
Ja v.out.ascii nenorādītu atribūtu filtru (where parametrs), tad tiktu skaitīti visi objekti (visas augsnes).
r.in.xyz kā ievades fails ir norādīta mīnusa zīme -, kas nozīmē standarta ievadi (tastatūra, cita programma).

Ja viss ir izdarīts pareizi, rezultātām vajadzētu izskatīties līdzīgi kā parādīts attēlā. Katram tīkla kvadrātam tagad tajā ietilpstošo “VaB” augsnes laukumu skaits ir kā īpašība, ko ir iespējams izmantot vizualizācijā.
Protams, arī šī pieeja nav perfekta – ja viena objekta divi vai vairāki “ragi” ienāk iekš kvadrāta, tie tiks pieskaitīti vairāk kā vienu reizi. To varētu novērst vispirms veicot vaicājumu datu bāzei un atlasot tikai unikālos kvadrātu/objektu daļu pārus.

Dalies priekā:

Birkas: , , ,

Viens komentārs to “Objektu skaits platības vienībā. Skaitam laukumus.”

  1. Ģirts saka:

    Man kā GRASS nepārzinātājam izskatās, ka šī operācija ir veicama vienkāršāk nekā arc’ā. Pie kam – elementāri skriptējama. Paldies par tutoriāli.

Atstāt savu komentāru