To jest polecenie r.mapcalcgrass, które można uruchomić w bezpłatnym dostawcy hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu MAC OS
PROGRAM:
IMIĘ
r.mapcalc - Kalkulator mapy rastrowej.
SŁOWA KLUCZOWE
raster, algebra
STRESZCZENIE
r.mapcalc
r.mapcalc --help
r.mapcalc [-s] [wyrażenie=ciąg] [filet=Nazwa] [nasienie=liczba całkowita] [--przepisać]
[--pomoc] [--gadatliwy] [--cichy] [--ui]
Flagi:
-s
Wygeneruj losowy materiał siewny (wynik jest niedeterministyczny)
--przepisać
Zezwalaj plikom wyjściowym na zastępowanie istniejących plików
--help
Wydrukuj podsumowanie wykorzystania
--gadatliwy
Pełne wyjście modułu
--cichy
Cichy moduł wyjściowy
--UI
Wymuś uruchomienie okna GUI
Parametry:
wyrażenie=ciąg
Wyrażenie do oceny
filet=Nazwa
Plik zawierający wyrażenia do oceny
nasienie=liczba całkowita
Ziarno funkcji Rand().
OPIS
r.mapcalc wykonuje arytmetykę na warstwach mapy rastrowej. Można tworzyć nowe warstwy mapy rastrowej
które są wyrażeniami arytmetycznymi obejmującymi istniejące warstwy mapy rastrowej, liczbami całkowitymi lub zmiennymi
stałe punktowe i funkcje.
Program posługiwać się
r.mapcalc wyrażenie ma postać:
dalsze = wyrażenie
gdzie dalsze to nazwa warstwy mapy rastrowej, która ma zawierać wynik obliczeń
i wyrażenie to dowolne legalne wyrażenie arytmetyczne obejmujące istniejące warstwy mapy rastrowej
(z wyjątkiem dalsze sama w sobie), stałe całkowite lub zmiennoprzecinkowe oraz funkcje znane programistom
kalkulator. Nawiasy są dozwolone w wyrażeniu i mogą być zagnieżdżane na dowolnej głębokości.
dalsze zostanie utworzony w bieżącym zestawie map użytkownika.
As wyrażenie= jest pierwszą opcją, jest to opcja domyślna. Oznacza to, że przejście przez
wyrażenie w wierszu poleceń jest możliwe pod warunkiem, że wyrażenie znajduje się w cudzysłowie i spacji
jest zawarte przed pierwszym = podpisać. Przykład („foo” to wynikowa mapa):
r.mapcalc "foo = 1"
lub:
r.mapcalc 'foo = 1'
Wyrażenie bez cudzysłowu (tzn. podzielone na wiele argumentów) nie zadziała, podobnie jak pominięcie
spacja przed znakiem =:
r.mapcalc 'foo=1'
Przepraszam, nie jest prawidłowym parametrem
Aby odczytać polecenie z pliku, użyj jawnie file= , np .:
r.mapcalc plik=plik
lub:
r.mapcalc plik=- <plik
lub:
plik r.mapcalc=- <
foo = 1
EOF
Formuła wpisana do r.mapcalc przez użytkownika jest zapisywane zarówno w dalsze tytuł mapy
(który pojawia się w pliku kategorii dla dalsze) oraz w pliku historii dla dalsze.
Niektóre znaki mają specjalne znaczenie dla powłoki poleceń. Jeśli użytkownik wprowadza input
do r.mapcalc w wierszu poleceń wyrażenia należy ująć w pojedyncze cudzysłowy.
Patrz UWAGI poniżej.
Operatorzy i zamówienie of precedens
Obsługiwane są następujące operatory:
Operator Znaczenie Pierwszeństwo typu
-------------------------------------------------- ------------
- negacja Arytmetyka 12
~ uzupełnienie Bitwise 12
! nielogiczne 12
^ potęgowanie Arytmetyka 11
Moduł % Arytmetyka 10
/ dzielenie Arytmetyka 10
* mnożenie Arytmetyka 10
+ dodatek Arytmetyka 9
- odejmowanie Arytmetyka 9
<< przesunięcie w lewo Bitowe 8
>> przesunięcie w prawo Bitowe 8
>>> przesunięcie w prawo (bez znaku) Bitowo 8
> większe niż logiczne 7
>= większe lub równe Logiczne 7
< mniej niż Logiczne 7
<= mniejsze lub równe Logiczne 7
== równe Logiczne 6
!= nie równe Logiczne 6
& bitowe i Bitowe 5
| bitowy lub bitowy 4
&& logiczne i logiczne 3
&&& logiczne i[1] Logiczne 3
|| logiczne lub logiczne 2
||| logiczne lub[1] Logiczne 2
?: warunkowy Logiczny 1
(moduł to reszta z dzielenia)
[1] &&& i ||| operatory obsługują wartości null inaczej niż inne operatory. Zobacz
sekcja pt NULL wsparcie poniżej, aby uzyskać więcej informacji.
Operatory są stosowane od lewej do prawej, przy czym stosowane są operatory o wyższym priorytecie
przed tymi, które mają niższy priorytet. Dopuszczalne jest dzielenie przez 0 i moduł przez 0
dać wynik NULL. Operatory logiczne dają wynik 1, jeśli porównanie jest prawdziwe, 0
Inaczej.
Ruszt mapa warstwa Nazwy
Uwzględniane jest wszystko w wyrażeniu, co nie jest liczbą, operatorem lub nazwą funkcji
będzie nazwą warstwy mapy rastrowej. Przykłady:
podniesienie
x3
3d.jego
Większość warstw map rastrowych GRASS spełnia tę konwencję nazewnictwa. Jednakże, jeśli warstwa mapy rastrowej
ma nazwę sprzeczną z powyższą zasadą, należy ją podać. Na przykład
wyrażenie
x = ok
będzie interpretowane jako: x równa się a minus b, natomiast
x = „ab”
będzie interpretowane jako: x równa się nazwanej warstwie mapy rastrowej ab
Również
x = 3107
stworzyłby x wypełniony liczbą 3107, podczas gdy
x = „3107”
skopiowałoby warstwę mapy rastrowej 3107 do warstwy mapy rastrowej x.
Cytaty nie są wymagane, chyba że nazwy warstw mapy rastrowej wyglądają jak liczby lub zawierają
operatorów LUB, chyba że program jest uruchamiany w sposób nieinteraktywny. Podane tutaj przykłady zakładają, że
program jest uruchamiany interaktywnie. Patrz UWAGI poniżej.
r.mapcalc będzie szukać warstw mapy rastrowej zgodnie z bieżącym zestawem map użytkownika
ścieżka wyszukiwania. Możliwe jest nadpisanie ścieżki wyszukiwania i określenie zestawu map, z którego
, aby wybrać warstwę mapy rastrowej. Odbywa się to poprzez podanie nazwy warstwy mapy rastrowej w pliku
formularz:
nazwa@zestaw map
Na przykład poniższe wyrażenie jest wyrażeniem prawnym:
wynik = x@STAŁY / y@GLEBY
Określony zbiór map nie musi znajdować się w ścieżce wyszukiwania zestawu map. (Ta metoda
zastąpienie ścieżki wyszukiwania zestawu map jest wspólne dla wszystkich poleceń GRASS, nie tylko r.mapcalc.)
Kurs sąsiedztwo modyfikator
Mapy i obrazy to pliki baz danych przechowywane w formacie rastrowym, czyli dwuwymiarowym
macierze wartości całkowitych. W r.mapcalc, po mapach może następować a sąsiedztwo modyfikator
który określa względne przesunięcie od bieżącej ocenianej komórki. Format jest
mapa[r,c], Gdzie r jest przesunięciem wiersza i c jest przesunięciem kolumny. Na przykład, mapa[1,2]
odnosi się do komórki znajdującej się jeden wiersz poniżej i dwie kolumny na prawo od bieżącej komórki,
mapa[-2,-1] odnosi się do komórki dwa wiersze powyżej i jedną kolumnę na lewo od bieżącego
komórka i mapa[0,1] odnosi się do komórki znajdującej się o jedną kolumnę na prawo od bieżącej komórki. Ten
składnia pozwala na tworzenie filtrów typu sąsiedzkiego w ramach pojedynczej mapy lub w poprzek
wiele map.
Ruszt mapa warstwa wartości od dotychczasowy kategoria filet
Czasami pożądane jest użycie wartości powiązanej z kategorią etykieta zamiast tego
sama wartość kategorii. Jeśli nazwa warstwy mapy rastrowej jest poprzedzona znakiem @ operator, następnie
zamiast tego w wyrażeniu używane są etykiety z pliku kategorii warstwy mapy rastrowej
wartość kategorii.
Załóżmy na przykład, że warstwa mapy rastrowej gleba.ph (reprezentujący wartości pH gleby) ma
plik kategorii z następującymi etykietami:
etykieta kota
------------------
0 brak danych
1 1.4
2 2.4
3 3.5
4 5.8
5 7.2
6 8.8
7 9.4
Następnie wyrażenie:
wynik = @gleby.ph
dałoby wynik o wartościach kategorii 0, 1.4, 2.4, 3.5, 5.8, 7.2, 8.8 i 9.4.
Należy pamiętać, że ten operator może być stosowany tylko do warstw mapy rastrowej i powoduje utworzenie efektu swobodnego
wartość punktowa w wyrażeniu. Dlatego etykieta kategorii musi zaczynać się od prawidłowego
numer. Jeśli etykieta kategorii jest liczbą całkowitą, będzie reprezentowana przez liczbę zmiennoprzecinkową
numer. Jeśli etykieta kategorii nie zaczyna się od cyfry lub jej brakuje, tak będzie
reprezentowany przez NULL (brak danych) na wynikowej mapie rastrowej.
Szary skala odpowiedniki i kolor oddziela
Często pomocne jest manipulowanie kolorami przypisanymi do kategorii map. To jest
szczególnie przydatne, gdy właściwości widmowe komórek mają znaczenie (jak w przypadku obrazów
dane) lub gdy wartości kategorii mapy reprezentują ilości rzeczywiste (jak w przypadku wartości kategorii
odzwierciedlają rzeczywiste wartości wysokości). Manipulowanie kolorami mapy może również pomóc w rozpoznawaniu wizualnym,
i drukowanie map.
Operatora # można użyć do konwersji wartości kategorii mapy na ich skalę szarości
odpowiedników lub wyodrębnić do nich czerwone, zielone lub niebieskie komponenty warstwy mapy rastrowej
oddzielne warstwy mapy rastrowej.
wynik = #mapa
konwertuje każdą wartość kategorii w mapa do wartości z zakresu 0-255, która reprezentuje
poziom skali szarości sugerowany przez kolor kategorii. Jeśli mapa ma kolor w skali szarości
table, wówczas #map ocenia poziom szarości. W przeciwnym razie oblicza się to w następujący sposób:
0.10 * czerwony + 0.81 * zielony + 0.01 * niebieski
Alternatywnie możesz użyć:
wynik = y#mapa
aby użyć wag NTSC:
0.30 * czerwony + 0.59 * zielony + 0.11 * niebieski
Możesz też użyć:
wynik = i#mapa
aby zastosować równe wagi:
0.33 * czerwony + 0.33 * zielony + 0.33 * niebieski
Operator # ma trzy inne formy: r#map, g#map, b#map. Wyodrębniają one kolor czerwony, zielony,
lub niebieskie komponenty odpowiednio na nazwanej mapie rastrowej. Skrypt powłoki GRASS r.mieszanka
wyodrębnia każdy z tych komponentów z dwóch warstw mapy rastrowej i łączy je za pomocą a
procent określony przez użytkownika. Formy te pozwalają na dokonanie separacji kolorów. Na przykład do
wyodrębnij czerwony komponent z mapa i zapisz go w nowej warstwie mapy 0-255 czerwony, użytkownik
mógłby wpisać:
czerwony = r#mapa
Aby przypisać szare kolory tej mapy, wpisz:
r.colors mapa=czerwony kolor=zasady
czarny
biały
Aby przypisać tej mapie czerwone kolory, wpisz:
r.colors mapa=czerwony kolor=zasady
czarny
czerwony
Funkcje
Aktualnie obsługiwane funkcje są wymienione w poniższej tabeli. Rodzaj wyniku
wskazano w ostatniej kolumnie. F oznacza, że funkcje zawsze dają wynik zmiennoprzecinkowy
Wartość punktu, I oznacza, że funkcja daje wynik w postaci liczby całkowitej, oraz * wskazuje, że
wynik jest zmiennoprzecinkowy, jeśli którykolwiek z argumentów funkcji jest wartością zmiennoprzecinkową i
liczba całkowita, jeśli wszystkie argumenty są liczbami całkowitymi.
typ opisu funkcji
-------------------------------------------------- -------------------------
abs(x) zwraca wartość bezwzględną x *
acos(x) odwrotny cosinus x (wynik w stopniach) F
asin(x) odwrotny sinus x (wynik w stopniach) F
atan(x) odwrotny tangens x (wynik w stopniach) F
atan(x,y) odwrotny tangens y/x (wynik w stopniach) F
cos(x) cosinus x (x jest w stopniach) F
double(x) konwertuje x na liczbę zmiennoprzecinkową podwójnej precyzji F
eval([x,y,...,]z) ocenia wartości podanych wyrażeń, przekazuje wyniki do z
exp(x) funkcja wykładnicza x F
exp(x,y) x do potęgi y F
float(x) konwertuje x na zmiennoprzecinkowy F o pojedynczej precyzji
graph(x,x1,y1[x2,y2..]) przekonwertuj x na y w oparciu o punkty na wykresie F
graph2(x,x1[,x2,..],y1[,y2..])
alternatywna forma graph() F
jeśli opcje decyzji: *
if(x) 1 jeśli x nie jest zerem, 0 w przeciwnym razie
if(x,a) a jeśli x nie jest zerem, w przeciwnym razie 0
if(x,a,b) a jeśli x nie jest zerem, b w przeciwnym razie
if(x,a,b,c) a jeśli x > 0, b jeśli x wynosi zero, c jeśli x < 0
int(x) konwertuje x na liczbę całkowitą [ obcina ] I
isnull(x) sprawdź, czy x = NULL
log(x) log naturalny x F
log(x,b) log o podstawie x b F
max(x,y[,z...]) największa wartość z podanych *
mediana(x,y[,z...]) mediana wartości wymienionych *
min(x,y[,z...]) najmniejsza wartość z podanych *
mode(x,y[,z...]) wartość trybu z listy *
nmax(x,y[,z...]) największa wartość z listy, z wyłączeniem NULL *
nmedian(x,y[,z...]) mediana wartości wymienionych, z wyłączeniem wartości NULL *
nmin(x,y[,z...]) najmniejsza wartość z listy, z wyłączeniem NULL *
nmode(x,y[,z...]) wartość trybu z listy, z wyłączeniem wartości NULL *
not(x) 1 jeśli x wynosi zero, 0 w przeciwnym razie
pow(x,y) x do potęgi y *
rand(a,b) wartość losowa x : a <= x < b *
round(x) zaokrąglij x do najbliższej liczby całkowitej I
round(x,y) zaokrągla x do najbliższej wielokrotności y
round(x,y,z) zaokrąglij x do najbliższego y*i+z dla pewnej liczby całkowitej i
sin(x) sinus x (x jest w stopniach) F
sqrt(x) pierwiastek kwadratowy z x F
tan(x) tangens x (x jest w stopniach) F
xor(x,y) wyłączne-lub (XOR) x i y I
Zmienne wewnętrzne:
row() bieżący wiersz ruchomego okna
col() bieżąca kolumna ruchomego okna
x() bieżąca współrzędna x ruchomego okna
y() bieżąca współrzędna y ruchomego okna
ewres() bieżąca rozdzielczość wschód-zachód
nsres() bieżąca rozdzielczość północ-południe
null() Wartość NULL
Należy pamiętać, że indeksowanie row() i col() zaczyna się od 1.
Pływające punkt wartości in dotychczasowy wyrażenie
W wyrażeniu dozwolone są liczby zmiennoprzecinkowe. Liczba zmiennoprzecinkowa jest liczbą
który zawiera kropkę dziesiętną:
2.3 12.0 12. .81
Wartości zmiennoprzecinkowe w wyrażeniu są obsługiwane w specjalny sposób. Z arytmetyką i
operatory logiczne, jeśli którykolwiek z operandów jest zmiennoprzecinkowy, drugi jest konwertowany na zmiennoprzecinkowy, a
wynikiem operacji jest float. Oznacza to w szczególności dzielenie liczb całkowitych
daje (obciętą) liczbę całkowitą, podczas gdy dzielenie liczb zmiennoprzecinkowych daje dokładną liczbę zmiennoprzecinkową
Wartość punktu. W przypadku funkcji typu * (patrz tabela powyżej) wynikiem jest float, jeśli taki istnieje
argumentem jest liczba zmiennoprzecinkowa, w przeciwnym razie liczba całkowita.
Uwaga: jeśli wykonasz obliczenia na liczbach całkowitych, wynikowa mapa będzie liczbą całkowitą. Jeśli ty
chcesz uzyskać wynik zmiennoprzecinkowy, dodaj przecinek dziesiętny do liczb całkowitych.
Jeśli chcesz dzielić zmiennoprzecinkowo, co najmniej jeden z argumentów musi być liczbą zmiennoprzecinkową
Wartość punktu. Pomnożenie jednego z nich przez 1.0 da wynik zmiennoprzecinkowy
używając float():
r.mapcalc "ndvi = float(lsat.4 - lsat.3) / (lsat.4 + lsat.3)"
NULL wsparcie
· Dzielenie przez zero powinno dać NULL.
· Moduł przy zera powinien dać NULL.
· Wartości NULL w dowolnej operacji arytmetycznej lub logicznej powinny skutkować NULL.
(jednak &&& i ||| są traktowane specjalnie, jak opisano poniżej).
· &&& i ||| operatory przestrzegają następujących aksjomatów, nawet jeśli x ma wartość NULL:
x &&& fałsz == fałsz
fałsz &&& x == fałsz
x ||| prawda == prawda
prawda ||| x == prawda
· Wartości NULL w argumentach funkcji powinny skutkować NULL (jednakże if(), eval() i
isnull() są traktowane specjalnie, jak opisano poniżej).
· Funkcja eval() zawsze zwraca swój ostatni argument
· Sytuacja dla if() jest następująca:
jeśli(x)
NULL, jeśli x ma wartość NULL; 0, jeśli x wynosi zero; 1 inaczej
jeśli (x, a)
NULL, jeśli x ma wartość NULL; a jeśli x jest niezerowe; 0 w przeciwnym razie
jeśli (x, a, b)
NULL, jeśli x ma wartość NULL; a jeśli x jest niezerowe; b. inaczej
if(x,n,z,p)
NULL, jeśli x ma wartość NULL; n jeśli x jest ujemne;
z jeśli x wynosi zero; p, jeśli x jest dodatnie
· (Nowa) funkcja isnull(x) zwraca: 1 jeśli x ma wartość NULL; 0 w przeciwnym razie. Nowa)
funkcja null() (która nie ma argumentów) zwraca liczbę całkowitą NULL.
· Argumenty funkcji inne niż NULL, ale nieprawidłowe, powinny skutkować NULL.
Przykłady:
log(-2)
kwadrat(-2)
pow(a,b) gdzie a jest liczbą ujemną, a b nie jest liczbą całkowitą
Obsługa wartości NULL: Należy pamiętać, że wszelkie obliczenia matematyczne wykonywane na komórkach NULL zawsze dają wartość NULL
wartość tych komórek. Jeśli chcesz na bieżąco zamienić komórkę NULL, użyj funkcji isnull()
funkcja testowa w instrukcji if.
Przykład: użytkownik chce, aby komórki o wartości NULL były traktowane jak zera. Aby dodać mapy A i
B (gdzie B zawiera wartości NULL), aby uzyskać mapę C, użytkownik może użyć konstrukcji takiej jak:
C = A + if(isnull(B),0,B)
NULL i warunki:
Dla postaci z jednym argumentem:
if(x) = NULL, jeśli x ma wartość NULL
jeśli(x) = 0, jeśli x = 0
if(x) = 1 w przeciwnym razie (tzn. x nie jest ani NULL, ani 0).
Dla postaci z dwoma argumentami:
if(x,a) = NULL, jeśli x ma wartość NULL
jeśli(x,a) = 0 jeśli x = 0
if(x,a) = a w przeciwnym razie (tzn. x nie jest ani NULL, ani 0).
Dla postaci z trzema argumentami:
if(x,a,b) = NULL, jeśli x ma wartość NULL
if(x,a,b) = b jeśli x = 0
if(x,a,b) = a w przeciwnym razie (tzn. x nie jest ani NULL, ani 0).
Dla postaci z czterema argumentami:
if(x,a,b,c) = NULL, jeśli x ma wartość NULL
if(x,a,b,c) = a jeśli x > 0
if(x,a,b,c) = b jeśli x = 0
if(x,a,b,c) = c, jeśli x < 0
Mówiąc bardziej ogólnie, wszystkie operatory i większość funkcji zwraca NULL, jeśli *dowolny* ze swoich argumentów
mają wartość NULL.
Funkcje if(), isnull() i eval() stanowią wyjątek.
Funkcja isnull() zwraca 1, jeśli jej argument ma wartość NULL i 0 w przeciwnym razie. Jeśli użytkownik
chce czegoś przeciwnego, ! należy użyć operatora, np. „!isnull(x)”.
Wszystkie formy if() zwracają NULL, jeśli pierwszy argument ma wartość NULL. Formy argumentów 2, 3 i 4
funkcji if() zwraca NULL, jeśli „wybrany” argument ma wartość NULL, np.:
if(0,a,b) = b niezależnie od tego, czy a ma wartość NULL
if(1,a,b) = a niezależnie od tego, czy b ma wartość NULL
eval() zawsze zwraca swój ostatni argument, więc zwraca NULL tylko wtedy, gdy ostatnim argumentem jest
ZERO.
Note: Użytkownik nie może sprawdzić wartości NULL za pomocą operatora ==, ponieważ w takim przypadku zwróci wartość NULL
lub oba argumenty mają wartość NULL, tj. jeśli oba x i y mają wartość NULL, wówczas „x == y” i „x != y” są
oba NULL zamiast odpowiednio 1 i 0.
Zachowanie to ma sens, jeśli użytkownik uważa NULL za reprezentującą nieznaną ilość.
Np. jeśli obydwa x i y są nieznane, wówczas wartości „x == y” i „x != y” są również
nieznany; jeśli oba mają nieznane wartości, użytkownik nie wie, czy oba
mają tę samą wartość.
UWAGI
Stosowanie od komenda linia
Należy zachować szczególną ostrożność, jeśli wyrażenie zostanie podane w wierszu poleceń. Niektóre postacie
mają specjalne znaczenie dla powłoki UNIX. Należą do nich między innymi:
* ( ) > i |
Wskazane jest umieszczenie wyrażenia w cudzysłowie; np:
„wynik = wysokość * 2”
Bez cudzysłowów *, który ma specjalne znaczenie dla powłoki UNIX, zostałby zmieniony
i r.mapcalc zobaczyłby coś innego niż plik *.
Wielokrotność obliczenia
Ogólnie rzecz biorąc, lepiej jest zrobić jak najwięcej w każdym poleceniu r.mapcalc. Np
zamiast:
r.mapcalc "$GIS_OPT_OUTPUT.r = r#$GIS_OPT_FIRST * .$GIS_OPT_PERCENT + (1.0 - .$GIS_OPT_PERCENT) * r#$GIS_OPT_SECOND"
r.mapcalc "$GIS_OPT_OUTPUT.g = g#$GIS_OPT_FIRST * .$GIS_OPT_PERCENT + (1.0 - .$GIS_OPT_PERCENT) * g#$GIS_OPT_SECOND"
r.mapcalc "$GIS_OPT_OUTPUT.b = b#$GIS_OPT_FIRST * .$GIS_OPT_PERCENT + (1.0 - .$GIS_OPT_PERCENT) * b#$GIS_OPT_SECOND"
posługiwać się:
r.mapcalc <
$GIS_OPT_OUTPUT.r = r#$GIS_OPT_FIRST * .$GIS_OPT_PERCENT + (1.0 - .$GIS_OPT_PERCENT) * r#$GIS_OPT_SECOND
$GIS_OPT_OUTPUT.g = g#$GIS_OPT_FIRST * .$GIS_OPT_PERCENT + (1.0 - .$GIS_OPT_PERCENT) * g#$GIS_OPT_SECOND
$GIS_OPT_OUTPUT.b = b#$GIS_OPT_FIRST * .$GIS_OPT_PERCENT + (1.0 - .$GIS_OPT_PERCENT) * b#$GIS_OPT_SECOND
EOF
ponieważ ten ostatni odczyta każdą mapę wejściową tylko raz.
Wstecz zgodność
W celu zapewnienia kompatybilności wstecznej z GRASS 6, jeśli nie podano żadnych opcji, jest on produkowany
file=- (który czyta ze standardowego wejścia), więc możesz nadal używać np.:
r.mapcalc < plik
lub:
r.mapcalc <
foo = 1
EOF
Ale jeśli nie potrzebujesz zgodności z poprzednimi wersjami GRASS GIS, użyj jawnie file=,
jak stwierdzono powyżej.
Gdy nazwa mapy zawiera niedozwolone litery lub kropki
nazwy opcji modułu, r.mapcalc polecenie będzie ważne także bez cudzysłowów:
r.mapcalc wysokość_A=1
r.mapcalc wysokość.1=1
Jednakże ta składnia nie jest zalecana, ponieważ cytaty, jak stwierdzono powyżej, są bezpieczniejsze. Używanie cytatów
jest kompatybilny wstecz i ważny w przyszłości.
Interaktywny wkład in komenda linia
W przypadku formuł wprowadzanych przez użytkownika ze standardowego wejścia (a nie z wiersza poleceń):
istnieje teraz funkcja kontynuacji linii. Jeśli użytkownik doda ukośnik odwrotny na końcu pliku
linia wejściowa, r.mapcalc zakłada, że formuła wprowadzona przez użytkownika będzie kontynuowana
następną linię wejściową. Nie ma ograniczeń co do możliwej liczby linii wejściowych ani rozmiaru
długość formuły.
Jeśli r.mapcalc formuła wprowadzona przez użytkownika jest bardzo długa, tytuł mapy będzie zawierał tylko
część, ale większość (jeśli nie całość) formuły zostanie umieszczona w pliku historii
dotychczasowy dalsze mapa
Gdy użytkownik wprowadzi dane wejściowe do r.mapcalc nieinteraktywnie w wierszu poleceń, program
nie ostrzeże użytkownika, aby nie nadpisywał istniejących warstw mapy. Użytkownicy powinni zatem wziąć
należy przypisać wynikom programu nazwy map rastrowych, które jeszcze nie istnieją w ich aktualnej wersji
zestawy map.
Ruszt MASKA obsługa
r.mapcalc podąża za typowym zachowaniem GRASS podczas obsługi MASKI rastrowej, więc MASKA jest tylko
stosowane podczas czytania istniejącej mapy rastrowej GRASS. Oznacza to, że np
polecenie:
r.mapcalc "elevation_exaggerated = wysokość * 3"
utwórz mapę uwzględniającą zamaskowane piksele, jeśli MASKA jest aktywna.
Natomiast w przypadku tworzenia mapy, która nie jest oparta na żadnej mapie, np. mapy ze stałej:
r.mapcalc "wysokość_podstawowa = 200.0"
utworzona mapa rastrowa jest ograniczona jedynie przez obszar obliczeniowy, ale nie ma na nią wpływu
aktywna MASKA. Jest to oczekiwane, ponieważ, jak wspomniano powyżej, MASKA jest stosowana tylko wtedy, gdy
czytania, a nie podczas pisania mapy rastrowej.
Jeśli również w tym przypadku należy zastosować MASKĘ, instrukcja if() zawierająca MASKĘ
należy zastosować np.:
r.mapcalc "wysokość_podstawowa = if(MASKA, 200.0, null())"
Podczas testowania wyrażeń związanych z MASKĄ pamiętaj, że gdy MASK jest aktywna, nie widzisz
dane w zamaskowanych obszarach, nawet jeśli nie mają wartości NULL. Widzieć r.maska .
eval funkcjonować
Jeśli wynikiem obliczeń powinna być tylko jedna mapa, ale wyrażenie jest tak złożone
że lepiej podzielić to na kilka wyrażeń, można zastosować funkcję eval:
r.mapcalc << EOF
eval(elev_200 = wysokość - 200,
wysokość_5 = 5 * wysokość,
wysokość_p = pow(wysokość_5, 2))
wynik_wysokości = (0.5 * wysokość_200) + 0.8 * wysokość_p
EOF
W tym przykładzie zastosowano uniksową składnię << EOF w celu zapewnienia danych wejściowych r.mapcalc.
Należy pamiętać, że zmienne tymczasowe (mapy) nie są tworzone i dlatego nie ma to znaczenia
czy istnieją czy nie. W powyższym przykładzie, jeśli mapa elev_200 istnieje, to nie będzie
nadpisane i nie zostanie wygenerowany żaden błąd. Powodem jest to, że nazwa elev_200 jest teraz
oznacza zmienną tymczasową (mapę), a nie istniejącą mapę. Kolejne części ww
wyrażenie użyje tymczasowej wysokości_200, a istniejąca wysokość_200 pozostanie nienaruszona
i nie będzie używany. Jeśli użytkownik chce skorzystać z istniejącej mapy, należy podać nazwę tymczasową
zmienna (mapa) musi zostać zmieniona.
Losowy numer generator inicjalizacji
Generator liczb pseudolosowych używany przez funkcję Rand() można zainicjować w postaci a
określoną wartość za pomocą nasienie opcja. Można to wykorzystać do odtworzenia poprzedniego
obliczenie.
Alternatywnie można go zainicjować na podstawie czasu systemowego i PID za pomocą -r flag.
Powinno to spowodować, że za każdym razem zostanie użyte inne ziarno.
W obu przypadkach ziarno zostanie zapisane w historii mapy i będzie można je zobaczyć za pomocą
r.informacje.
Jeśli chcesz, aby inne osoby mogły zweryfikować Twoje wyniki, lepiej skorzystać z narzędzia
nasienie opcja dostarczenia materiału siewnego określonego w skrypcie lub wygenerowanego z pliku
proces deterministyczny, taki jak generator liczb pseudolosowych z jawnym ziarnem.
Należy pamiętać, że funkcja Rand() wygeneruje błąd krytyczny, jeśli żadna z funkcji nasienie opcja nor
dotychczasowy -s flaga jest podana.
PRZYKŁADY
Aby obliczyć średnią z dwóch warstw mapy rastrowej a i b:
średnia = (a + b)/2
Aby utworzyć średnią ważoną:
średnia = (5*a + 3*b)/8.0
Aby utworzyć binarną reprezentację warstwy mapy rastrowej a tak aby kategoria 0 pozostała 0
a wszystkie pozostałe kategorie stają się 1:
maska = a != 0
Można to również osiągnąć poprzez:
maska = if(a)
Aby zamaskować warstwę mapy rastrowej b według warstwy mapy rastrowej a:
wynik = jeśli (a, b)
Aby zmienić wszystkie wartości poniżej 5 na NULL:
nowamapa = if(mapa<5, null(), 5)
Funkcja graph() umożliwia użytkownikom określenie konwersji xy przy użyciu par x,y
współrzędne. W niektórych sytuacjach transformacja z jednej wartości na drugą nie jest łatwa
ustalona matematycznie, ale można ją przedstawić za pomocą wykresu 2-D, a następnie liniowo
interpolowane. Funkcja graph() umożliwia osiągnięcie tego celu. Oś X
wartość jest dostarczana do funkcji wykresu wraz z powiązanym wykresem reprezentowanym przez a
szereg par x, y. Wartości x muszą rosnąć monotonicznie (każda większa niż lub
równy poprzedniemu). Funkcja wykresu interpoluje liniowo pomiędzy parami. Dowolny x
wartość niższa Najniższa wartość x (tj. pierwsza) spowoduje zwrócenie powiązanej wartości y.
Dowolna wartość x wyższa od ostatniej będzie podobnie zwracać powiązaną wartość y.
Rozważ prośbę:
nowamapa = wykres(mapa, 1,10, 2,25, 3,50)
Dostarczone wartości X (mapa) i zwrócone wartości y (nowa mapa):
0, 10
1, 10
1.5, 17.5
2.9, 47.5
4, 50
100, 50
ZNANE ZAGADNIENIA
Linie kontynuacji muszą kończyć się \ i mieć Nie końcowy biały znak (spacje lub tabulatory). Jeśli
użytkownik pozostawia białe znaki na końcu linii kontynuacji, czyli komunikaty o błędach
wyprodukowany przez r.mapcalc będzie bez znaczenia i równanie nie będzie działać jako użytkownik
przeznaczony. Jest to szczególnie ważne w przypadku funkcji eval().
Obecnie nie ma mechanizmu komentowania r.mapcalc. Być może dodanie takiej możliwości
spowodowałoby zignorowanie całej linii, gdy użytkownik wstawiłby # na początku a
line, jakby jej nie było, załatwi sprawę.
Funkcja powinna wymagać od użytkownika wpisania „end” lub „exit” zamiast po prostu pustego miejsca
linia. Dzięki temu separacja wielu skryptów będzie możliwa do oddzielenia białą spacją.
r.mapcalc nie drukuje ostrzeżenia w przypadku operacji na komórkach NULL. Pozostaje do
użytkownikowi możliwość korzystania z funkcji isnull().
Korzystaj z r.mapcalcgrass online, korzystając z usług onworks.net