این دستور r.mapcalcgrass است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.
برنامه:
نام
r.mapcalc - ماشین حساب نقشه شطرنجی.
واژگان کلیدی
شطرنجی، جبر
خلاصه
r.mapcalc
r.mapcalc --کمک
r.mapcalc [-s] [بیان=رشته] [پرونده=نام] [دانه=عدد صحیح] [--زیاد نوشتن]
[--کمک] [--واژگان] [--ساکت] [--ui]
پرچم ها:
-s
تولید دانه تصادفی (نتیجه غیر قطعی است)
--زیاد نوشتن
به فایل های خروجی اجازه بازنویسی فایل های موجود را بدهید
--کمک
خلاصه استفاده از چاپ
-- پرحرف
خروجی ماژول گویا
--ساکت
خروجی ماژول بی صدا
--ui
راه اندازی اجباری گفتگوی رابط کاربری گرافیکی
پارامترهای:
بیان=رشته
بیان برای ارزیابی
پرونده=نام
فایل حاوی عبارت(های) برای ارزیابی
دانه=عدد صحیح
Seed برای تابع rand().
شرح
r.mapcalc محاسبه را روی لایه های نقشه شطرنجی انجام می دهد. می توان لایه های جدید نقشه شطرنجی ایجاد کرد
که عبارت های حسابی شامل لایه های نقشه شطرنجی موجود، عدد صحیح یا شناور هستند
ثابت های نقطه ای و توابع
برنامه استفاده کنید
r.mapcalc عبارت به شکل زیر است:
نتیجه = بیان
جایی که نتیجه نام یک لایه نقشه شطرنجی است که حاوی نتیجه محاسبه است
و بیان هر عبارت حسابی قانونی شامل لایه های نقشه شطرنجی موجود است
(بجز نتیجه خود)، ثابت های اعداد صحیح یا ممیز شناور، و توابع شناخته شده برای
ماشین حساب. پرانتز در عبارت مجاز است و ممکن است تا هر عمقی تو در تو باشد.
نتیجه در Mapset فعلی کاربر ایجاد خواهد شد.
As بیان= اولین گزینه است، پیش فرض است. این بدان معنی است که عبور از یک
بیان در خط فرمان تا زمانی امکان پذیر است که عبارت نقل قول و فاصله باشد
قبل از اول گنجانده شده است = امضا کردن. مثال ('foo' نقشه حاصل است):
r.mapcalc "foo = 1"
و یا:
r.mapcalc 'foo = 1'
یک عبارت نقل قول نشده (یعنی تقسیم بر چندین آرگومان) کار نخواهد کرد و حذف نخواهد شد
فاصله قبل از علامت =:
r.mapcalc 'foo=1'
متاسف، یک پارامتر معتبر نیست
برای خواندن دستور از فایل، از file= به طور واضح استفاده کنید، به عنوان مثال:
r.mapcalc file=file
و یا:
فایل r.mapcalc=- < فایل
و یا:
فایل r.mapcalc=- <
فو = 1
EOF
فرمول وارد شده به r.mapcalc توسط کاربر هر دو در ثبت می شود نتیجه عنوان نقشه
(که در فایل دسته بندی برای نتیجه) و در فایل تاریخچه برای نتیجه.
برخی از کاراکترها معنای خاصی برای پوسته فرمان دارند. اگر کاربر ورودی را وارد می کند
به r.mapcalc در خط فرمان، عبارات باید در یک نقل قول محصور شوند.
به یادداشت های زیر مراجعه کنید.
اپراتورها و سفارش of تقدم
اپراتورهای زیر پشتیبانی می شوند:
عملگر به معنای تقدم نوع
-------------------------------------------------- ------------
- نفی حساب 12
~ مکمل یک نفر Bitwise 12
! منطقی نیست 12
^ توان حسابی 11
مدول درصد حسابی 10
/ تقسیم حساب 10
* ضرب حساب 10
+ جمع حساب 9
- تفریق حساب 9
<< شیفت سمت چپ Bitwise 8
>> Shift Bitwise 8 به راست
>>> تغییر سمت راست (بدون علامت) Bitwise 8
> بزرگتر از Logical 7
>= بزرگتر یا مساوی Logical 7
< کمتر از منطقی 7
<= کمتر یا مساوی Logical 7
== برابر با منطق 6
!= معادل منطقی 6 نیست
& bitwise و bitwise 5
| bitwise یا bitwise 4
&& منطقی و منطقی 3
&&& منطقی و[1] منطقی 3
|| منطقی یا منطقی 2
||| منطقی یا [1] منطقی 2
?: منطقی شرطی 1
(مدول باقیمانده پس از تقسیم است)
[1] &&& و ||| اپراتورها مقادیر تهی را متفاوت از سایر عملگرها مدیریت می کنند. را ببینید
بخش با عنوان NULL پشتیبانی در زیر برای جزئیات بیشتر
عملگرها از چپ به راست اعمال می شوند و اپراتورهایی که اولویت بیشتری دارند اعمال می شوند
قبل از کسانی که اولویت کمتری دارند. تقسیم بر 0 و مدول بر 0 قابل قبول است و
نتیجه NULL بدهد. اگر مقایسه درست باشد عملگرهای منطقی 1 نتیجه می دهند، 0
در غیر این صورت.
محل تصویر نقشه لایه نام
هر چیزی در عبارت که عدد، عملگر یا نام تابع نباشد به آن گرفته می شود
نام لایه نقشه شطرنجی باشد. مثال ها:
ارتفاع
x3
3d.his
اکثر لایه های نقشه شطرنجی GRASS با این قرارداد نامگذاری مطابقت دارند. با این حال، اگر یک لایه نقشه شطرنجی
نامی دارد که با قاعده فوق مغایرت دارد، باید نقل شود. به عنوان مثال
بیان
x = ab
اینگونه تفسیر می شود: x برابر با منهای b است، در حالی که
x = "ab"
اینگونه تفسیر می شود: x برابر با لایه نقشه شطرنجی نامگذاری شده است اب
پس
X = 3107
ایجاد خواهد کرد x پر شده با عدد 3107، در حالی که
x = "3107"
لایه نقشه شطرنجی را کپی می کند 3107 به لایه نقشه شطرنجی x.
نقل قول لازم نیست مگر اینکه نام لایه های نقشه شطرنجی شبیه اعداد یا حاوی باشد
اپراتورها، OR مگر اینکه برنامه به صورت غیر تعاملی اجرا شود. مثال های ارائه شده در اینجا فرض می کنند
برنامه به صورت تعاملی اجرا می شود به یادداشت های زیر مراجعه کنید.
r.mapcalc طبق نقشه مجموعه فعلی کاربر به دنبال لایه های نقشه شطرنجی خواهد بود
مسیر جستجو می توان مسیر جستجو را نادیده گرفت و نقشه ست را مشخص کرد که از آن
برای انتخاب لایه نقشه شطرنجی. این کار با تعیین نام لایه نقشه شطرنجی در آن انجام می شود
فرم:
name@mapset
به عنوان مثال، عبارت زیر یک عبارت قانونی است:
نتیجه = x@دائمی / y@خاک
نقشه ست مشخص شده لازم نیست در مسیر جستجوی نقشه ست باشد. (این روش از
نادیده گرفتن مسیر جستجوی mapset برای همه دستورات GRASS مشترک است، نه فقط r.mapcalc.)
La همسایگی تغییر
نقشه ها و تصاویر فایل های پایگاه داده ای هستند که در قالب شطرنجی، یعنی دو بعدی ذخیره می شوند
ماتریس های مقادیر صحیح که در r.mapcalc، نقشه ها ممکن است با a دنبال شوند همسایگی تغییر
که یک افست نسبی از سلول فعلی در حال ارزیابی را مشخص می کند. فرمت است
نقشه[r,c]، که در آن r است ردیف افست و c افست ستون است. مثلا، نقشه[1,2،XNUMX]
به سلول یک ردیف زیر و دو ستون در سمت راست سلول فعلی اشاره دارد،
نقشه[-2،-1] به سلول دو ردیف بالا و یک ستون در سمت چپ جریان اشاره دارد
سلول، و نقشه[0,1،XNUMX] به سلول یک ستون سمت راست سلول فعلی اشاره دارد. این
نحو اجازه توسعه فیلترهای نوع محله را در یک نقشه واحد یا در عرض می دهد
چندین نقشه
محل تصویر نقشه لایه ارزش از جانب la دسته پرونده
گاهی اوقات مطلوب است که از یک مقدار مرتبط با یک دسته استفاده شود برچسب به جای
خود ارزش دسته اگر قبل از نام لایه نقشه شطرنجی عبارت باشد @ اپراتور، سپس
برچسبها در فایل دسته برای لایه نقشه شطرنجی در عبارت به جای استفاده میشوند
ارزش دسته
به عنوان مثال، فرض کنید که لایه نقشه شطرنجی خاک.ph (نماینده مقادیر pH خاک) دارای الف
فایل دسته بندی با برچسب های زیر:
برچسب گربه
------------------
0 بدون داده
1 1.4
2 2.4
3 3.5
4 5.8
5 7.2
6 8.8
7 9.4
سپس عبارت:
نتیجه = @soils.ph
نتیجه ای با مقادیر دسته 0، 1.4، 2.4، 3.5، 5.8، 7.2، 8.8 و 9.4 ایجاد می کند.
توجه داشته باشید که این عملگر ممکن است فقط برای لایه های نقشه شطرنجی اعمال شود و یک شناور تولید کند
مقدار نقطه در عبارت بنابراین، برچسب دسته باید با یک معتبر شروع شود
عدد. اگر برچسب دسته عدد صحیح باشد، با یک ممیز شناور نمایش داده می شود
عدد. من برچسب دسته با یک عدد شروع نمی شود یا گم شده است، خواهد بود
در نقشه شطرنجی حاصل با NULL (بدون داده) نشان داده شده است.
خاکستری مقیاس معادل ها و رنگ جدا می شود
دستکاری رنگ های اختصاص داده شده به دسته های نقشه اغلب مفید است. این هست
به ویژه زمانی مفید است که ویژگی های طیفی سلول ها معنی داشته باشند (مانند تصاویر
داده)، یا زمانی که مقادیر دسته بندی نقشه مقادیر واقعی را نشان می دهد (مانند مقادیر دسته
منعکس کننده مقادیر واقعی ارتفاع). دستکاری رنگ نقشه همچنین می تواند به تشخیص بصری کمک کند،
و چاپ نقشه
عملگر # می تواند برای تبدیل مقادیر دسته بندی نقشه به مقیاس خاکستری آنها استفاده شود
معادل ها یا استخراج مولفه های قرمز، سبز یا آبی یک لایه نقشه شطرنجی در
لایه های نقشه شطرنجی جدا
نتیجه = #نقشه
مقدار هر دسته را به تبدیل می کند نقشه به مقداری در محدوده 0-255 که نشان دهنده مقدار است
سطح مقیاس خاکستری که توسط رنگ برای دسته مشخص می شود. اگر نقشه دارای مقیاس خاکستری باشد
جدول، سپس سطح خاکستری چیزی است که #map به آن ارزیابی می کند. در غیر این صورت به صورت زیر محاسبه می شود:
0.10 * قرمز + 0.81 * سبز + 0.01 * آبی
به طور متناوب، می توانید استفاده کنید:
نتیجه = y#نقشه
برای استفاده از وزن های NTSC:
0.30 * قرمز + 0.59 * سبز + 0.11 * آبی
یا می توانید استفاده کنید:
نتیجه = i#map
برای استفاده از وزن های مساوی:
0.33 * قرمز + 0.33 * سبز + 0.33 * آبی
عملگر # سه شکل دیگر دارد: r#map، g#map، b#map. اینها رنگ قرمز، سبز را استخراج می کنند
یا اجزای آبی در نقشه شطرنجی نامگذاری شده به ترتیب. اسکریپت پوسته GRASS r.blend
هر یک از این اجزا را از دو لایه نقشه شطرنجی استخراج می کند و آنها را با a ترکیب می کند
درصد مشخص شده توسط کاربر این فرم ها امکان جداسازی رنگ ها را فراهم می کنند. به عنوان مثال، به
جزء قرمز را از آن استخراج کنید نقشه و آن را در لایه نقشه جدید 0-255 ذخیره کنید قرمز، کاربر
می تواند تایپ کند:
قرمز = r# map
برای تخصیص این نقشه رنگ خاکستری نوع:
r.colors map=رنگ قرمز=قوانين
سیاه
سفید
برای اختصاص دادن رنگ های قرمز به این نقشه تایپ کنید:
r.colors map=رنگ قرمز=قوانين
سیاه
قرمز
توابع
توابع پشتیبانی شده در حال حاضر در جدول زیر فهرست شده است. نوع نتیجه
در ستون آخر نشان داده شده است. F به این معنی که توابع همیشه به یک شناور منجر می شوند
ارزش امتیاز، I به این معنی است که تابع یک نتیجه عدد صحیح می دهد و * نشان می دهد که
اگر هر یک از آرگومان های تابع مقادیر ممیز شناور باشد، نتیجه float است
اگر همه آرگومان ها عدد صحیح باشند.
نوع توصیف عملکرد
-------------------------------------------------- -------------------------
abs(x) مقدار مطلق x * را برمی گرداند
acos(x) کسینوس معکوس x (نتیجه بر حسب درجه است) F
asin(x) سینوس معکوس x (نتیجه بر حسب درجه است) F
atan(x) مماس معکوس x (نتیجه بر حسب درجه است) F
atan(x,y) مماس معکوس y/x (نتیجه بر حسب درجه است) F
cos(x) کسینوس x (x بر حسب درجه است) F
double(x) x را به نقطه شناور با دقت دوگانه F تبدیل می کند
eval([x,y,...,]z) مقادیر expr فهرست شده را ارزیابی کنید، نتایج را به z ارسال کنید
exp(x) تابع نمایی x F
exp(x,y) x به توان y F
float(x) x را به نقطه شناور تک دقیق F تبدیل می کند
نمودار (x,x1,y1[x2,y2..]) x را بر اساس نقاط نمودار F به ay تبدیل می کند
graph2(x,x1[,x2,..],y1[,y2..])
شکل جایگزین گراف() F
اگر گزینه های تصمیم گیری: *
if(x) 1 اگر x صفر نباشد، 0 در غیر این صورت
if(x,a) a اگر x صفر نباشد، 0 در غیر این صورت
if(x,a,b) a اگر x صفر نباشد، b در غیر این صورت
if(x,a,b,c) a اگر x > 0، b اگر x صفر باشد، c اگر x < 0
int(x) x را به عدد صحیح تبدیل می کند [ کوتاه می کند ] I
isnull(x) بررسی کنید x = NULL
log(x) گزارش طبیعی x F
log(x,b) log از پایه x b F
max(x,y[,z...]) بزرگترین مقدار لیست شده *
میانه (x,y[,z...]) مقدار میانه موارد لیست شده *
min(x,y[,z...]) کوچکترین مقدار لیست شده *
حالت (x,y[,z...]) مقدار حالت موارد لیست شده *
nmax(x,y[,z...]) بزرگترین مقدار لیست شده، به استثنای NULL *
nmedian(x,y[,z...]) مقدار میانه موارد لیست شده، به استثنای NULL ها *
nmin(x,y[,z...]) کوچکترین مقدار لیست شده، به استثنای NULL *
مقدار حالت nmode(x,y[,z...]) از موارد لیست شده، به استثنای NULL ها *
not(x) 1 اگر x صفر باشد، 0 در غیر این صورت
pow(x,y) x به توان y *
rand(a,b) مقدار تصادفی x : a <= x <b *
دور (x) x را به نزدیکترین عدد صحیح I گرد کنید
گرد(x,y) x را به نزدیکترین مضرب y گرد آورید
دور(x,y,z) x را به نزدیکترین y*i+z برای مقداری صحیح i گرد کنید
sin(x) سینوس x (x بر حسب درجه است) F
sqrt(x) جذر x F
tan(x) مماس x (x بر حسب درجه است) F
xor(x,y) انحصاری-یا (XOR) x و y I
متغیرهای داخلی:
row() ردیف فعلی پنجره متحرک
col() col فعلی پنجره متحرک
x() مختصات x فعلی پنجره متحرک
y() مختصات فعلی y پنجره متحرک
()ewres وضوح فعلی شرق به غرب
nsres() وضوح فعلی شمال به جنوب
null() مقدار NULL
توجه داشته باشید که نمایه سازی row() و col() با 1 شروع می شود.
شناور نقطه ارزش in la بیان
اعداد ممیز شناور در عبارت مجاز هستند. عدد ممیز شناور یک عدد است
که دارای یک نقطه اعشار است:
2.3 12.0 12. .81
مقادیر ممیز شناور در عبارت به روش خاصی مدیریت می شوند. با حساب و
عملگرهای منطقی، اگر هر یک از عملوندها float باشد، دیگری به float و the تبدیل می شود
نتیجه عملیات شناور است. این به ویژه به معنای تقسیم اعداد صحیح است
منجر به یک عدد صحیح (قطع شده) می شود، در حالی که تقسیم شناورها منجر به یک شناور دقیق می شود.
ارزش نقطه با توابع نوع * (جدول بالا را ببینید)، در صورت وجود، نتیجه شناور است
آرگومان شناور است، در غیر این صورت عدد صحیح است.
نکته: اگر با اعداد صحیح محاسبه کنید، نقشه حاصل عدد صحیح خواهد بود. اگر شما
می خواهید یک نتیجه شناور دریافت کنید، نقطه اعشار را به اعداد صحیح اضافه کنید.
اگر می خواهید تقسیم ممیز شناور باشد، حداقل یکی از آرگومان ها باید شناور باشد
ارزش نقطه ضرب یکی از آنها در 1.0 یک نتیجه ممیز شناور ایجاد می کند
با استفاده از float():
r.mapcalc "ndvi = float(lsat.4 - lsat.3) / (lsat.4 + lsat.3)"
NULL پشتیبانی
· تقسیم بر صفر باید به NULL منجر شود.
· مدول صفر باید به NULL منجر شود.
· مقادیر NULL در هر عملیات حسابی یا منطقی باید به NULL منجر شود.
(با این حال، &&& و ||| به طور خاص، همانطور که در زیر توضیح داده شده است) رفتار می شود.
· &&& و ||| عملگرها اصول زیر را رعایت می کنند حتی زمانی که x NULL باشد:
x &&& false == نادرست
نادرست &&& x == نادرست
x ||| درست == درست
درسته ||| x == درست است
· مقادیر NULL در آرگومان های تابع باید به NULL منجر شود (با این حال، if()، eval() و
isnull() به طور خاص، همانطور که در زیر توضیح داده شده است، درمان می شوند.
· تابع eval() همیشه آخرین آرگومان خود را برمی گرداند
· وضعیت if() به این صورت است:
اگر (x)
NULL اگر x NULL باشد. 0 اگر x صفر باشد. 1 در غیر این صورت
اگر (x,a)
NULL اگر x NULL باشد. اگر x غیر صفر باشد. 0 در غیر این صورت
اگر (x,a,b)
NULL اگر x NULL باشد. اگر x غیر صفر باشد. ب در غیر این صورت
if(x,n,z,p)
NULL اگر x NULL باشد. n اگر x منفی باشد.
z اگر x صفر باشد؛ p اگر x مثبت باشد
· تابع (جدید) isnull(x) برمی گرداند: 1 اگر x NULL باشد. 0 در غیر این صورت. جدید)
تابع null() (که هیچ آرگومان ندارد) یک عدد صحیح NULL را برمی گرداند.
· آرگومان های غیر NULL، اما نامعتبر برای توابع باید به NULL منجر شوند.
مثال:
ورود به سیستم (-2)
sqrt(-2)
pow(a,b) که در آن a منفی است و b یک عدد صحیح نیست
پشتیبانی NULL: لطفاً توجه داشته باشید که هر ریاضیی که با سلول های NULL انجام می شود همیشه به یک NULL منجر می شود
ارزش برای این سلول ها اگر می خواهید یک سلول NULL را جایگزین کنید، از isnull() استفاده کنید.
تابع تست در یک بیانیه if
مثال: کاربران میخواهند سلولهای با ارزش NULL مانند صفر رفتار شوند. برای افزودن نقشه های A و
B (جایی که B حاوی NULL است) برای بدست آوردن نقشه C کاربر می تواند از ساختاری مانند:
C = A + if(isnull(B)،0،B)
NULL و شرایط:
برای فرم یک استدلال:
if(x) = NULL اگر x NULL باشد
if(x) = 0 اگر x = 0
if(x) = 1 در غیر این صورت (یعنی x نه NULL است و نه 0).
برای فرم دو استدلال:
if(x,a) = NULL اگر x NULL باشد
if(x,a) = 0 اگر x = 0
if(x,a) = a در غیر این صورت (یعنی x نه NULL است و نه 0).
برای فرم سه استدلال:
if(x,a,b) = NULL اگر x NULL باشد
if(x,a,b) = b اگر x = 0
if(x,a,b) = a در غیر این صورت (یعنی x نه NULL است و نه 0).
برای فرم چهار استدلال:
if(x,a,b,c) = NULL اگر x NULL باشد
if(x,a,b,c) = a اگر x > 0
if(x,a,b,c) = b اگر x = 0
if(x,a,b,c) = c اگر x < 0
به طور کلیتر، همه عملگرها و اکثر توابع در صورت وجود *هر یک از آرگومانهایشان NULL را برمیگردانند
NULL هستند.
توابع if()، isnull() و eval() استثنا هستند.
تابع isnull() اگر آرگومان آن NULL باشد 1 و در غیر این صورت 0 برمی گرداند. اگر کاربر
برعکس می خواهد، ! عملگر، به عنوان مثال "!isnull(x)" باید استفاده شود.
اگر آرگومان اول NULL باشد، تمام اشکال if() NULL را برمیگردانند. آرگومان 2، 3 و 4 شکل می گیرد
اگر آرگومان "انتخاب" NULL باشد، if() NULL را برمی گرداند، به عنوان مثال:
if(0,a,b) = b صرف نظر از اینکه a NULL باشد
if(1,a,b) = a صرف نظر از اینکه b NULL باشد یا خیر
eval() همیشه آخرین آرگومان خود را برمی گرداند، بنابراین فقط در صورتی NULL را برمی گرداند که آخرین آرگومان باشد
خالی.
توجه داشته باشید:: کاربر نمی تواند NULL را با استفاده از عملگر == آزمایش کند، زیرا در این صورت، NULL را برمی گرداند
یا هر دو آرگومان NULL هستند، یعنی اگر x و y هر دو NULL هستند، "x == y" و "x != y" هستند
هر دو NULL به جای 1 و 0 به ترتیب.
اگر کاربر NULL را به عنوان یک کمیت ناشناخته در نظر بگیرد، این رفتار منطقی است.
به عنوان مثال، اگر x و y هر دو ناشناخته باشند، پس مقادیر "x == y" و "x != y" نیز هستند.
ناشناس؛ اگر هر دو مقادیر ناشناخته داشته باشند، کاربر نمی داند که آیا هر دوی آنها هستند یا خیر
ارزش یکسانی دارند
NOTES
استفاده از جانب فرمان خط
اگر عبارت در خط فرمان داده شود، باید دقت بیشتری شود. برخی از شخصیت ها
برای پوسته یونیکس معنای خاصی دارند. از جمله موارد زیر است:
* ( ) > & |
توصیه می شود نقل قول های تکی را در اطراف عبارت قرار دهید. به عنوان مثال:
"نتیجه = ارتفاع * 2"
بدون نقل قول، *، که معنای خاصی برای پوسته یونیکس دارد، تغییر می کند
و r.mapcalc چیزی غیر از * می بیند.
چندین محاسبات
به طور کلی، بهتر است تا حد امکان در هر دستور r.mapcalc انجام شود. به عنوان مثال
به جای:
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"
استفاده کنید:
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
زیرا دومی هر نقشه ورودی را فقط یک بار می خواند.
به عقب سازگاری
برای سازگاری عقب با GRASS 6، اگر هیچ گزینه ای ارائه نشود، تولید می کند
file=- (که از stdin خوانده می شود)، بنابراین می توانید به استفاده از آن ادامه دهید:
r.mapcalc < فایل
و یا:
r.mapcalc <
فو = 1
EOF
اما مگر اینکه نیاز به سازگاری با نسخه های قبلی GRASS GIS داشته باشید، از file= به طور صریح استفاده کنید.
همانطور که در بالا اشاره شد.
زمانی که نام نقشه حاوی حروف (های) بزرگ یا نقطه باشد که مجاز به قرار دادن آنها نیست
نام گزینه های ماژول، r.mapcalc دستور بدون نقل قول نیز معتبر خواهد بود:
r.mapcalc elevation_A=1
r.mapcalc elevation.1=1
با این حال، این نحو به عنوان نقل قول های ذکر شده در بالا، ایمن تر توصیه نمی شود. با استفاده از نقل قول
هم با عقب سازگار است و هم در آینده معتبر است.
سلامت ورودی in فرمان خط
برای فرمول هایی که کاربر از ورودی استاندارد (و نه از خط فرمان) وارد می کند.
یک ویژگی ادامه خط اکنون وجود دارد. اگر کاربر یک بک اسلش به انتهای an اضافه کند
خط ورودی، r.mapcalc فرض می کند که فرمول وارد شده توسط کاربر همچنان ادامه دارد
خط ورودی بعدی هیچ محدودیتی برای تعداد خطوط ورودی یا تعداد خطوط ورودی وجود ندارد
طول یک فرمول
اگر r.mapcalc فرمول وارد شده توسط کاربر بسیار طولانی است، عنوان نقشه فقط شامل خواهد شد
برخی از آن، اما بیشتر (اگر نه همه) فرمول در فایل تاریخچه قرار می گیرد
la نتیجه نقشه
هنگامی که کاربر ورودی را وارد می کند r.mapcalc به صورت غیر تعاملی در خط فرمان، برنامه
به کاربر هشدار نمی دهد که لایه های نقشه موجود را بازنویسی نکند. بنابراین کاربران باید استفاده کنند
دقت کنید که خروجی های برنامه را با نام های نقشه شطرنجی تخصیص دهید که هنوز در جریان فعلی آنها وجود ندارد
مجموعه نقشه ها
محل تصویر ماسک اداره
r.mapcalc از رفتار رایج GRASS در استفاده از MASK شطرنجی پیروی می کند، بنابراین MASK تنها است
هنگام خواندن نقشه شطرنجی GRASS موجود استفاده می شود. این به این معنی است که، برای مثال،
فرمان:
r.mapcalc "elevation_exaggerated = elevation * 3"
در صورت فعال بودن MASK، یک نقشه با رعایت پیکسل های ماسک شده ایجاد کنید.
با این حال، هنگام ایجاد نقشه ای که بر اساس هیچ نقشه ای نیست، به عنوان مثال نقشه ای از یک ثابت:
r.mapcalc "base_height = 200.0"
نقشه شطرنجی ایجاد شده فقط توسط یک منطقه محاسباتی محدود می شود اما تحت تأثیر قرار نمی گیرد
یک ماسک فعال این مورد انتظار است زیرا همانطور که در بالا ذکر شد، MASK فقط زمانی اعمال می شود
خواندن، نه هنگام نوشتن نقشه شطرنجی.
اگر در این مورد نیز MASK باید اعمال شود، یک عبارت if() شامل MASK
باید استفاده شود، به عنوان مثال:
r.mapcalc "base_height = if(MASK, 200.0, null())"
هنگام آزمایش عبارات مربوط به MASK به خاطر داشته باشید که وقتی MASK فعال است شما نمی بینید
داده ها در مناطق پوشانده شده حتی اگر NULL نباشند. دیدن r.mask برای جزئیات بیشتر.
ارزیابی تابع
اگر خروجی محاسبات باید فقط یک نقشه باشد اما عبارت بسیار پیچیده است
که بهتر است آن را به چند عبارت تقسیم کنیم، می توان از تابع eval استفاده کرد:
r.mapcalc << EOF
eval(elev_200 = elevation - 200,
elev_5 = 5 * ارتفاع،
elev_p = pow (elev_5, 2))
elevation_result = (0.5 * elev_200) + 0.8 * elev_p
EOF
این مثال از نحو یونیکس مانند << EOF برای ارائه ورودی به آن استفاده می کند r.mapcalc.
توجه داشته باشید که متغیرهای موقت (نقشه ها) ایجاد نمی شوند و بنابراین مهم نیست
وجود دارند یا نه در مثال بالا، اگر نقشه elev_200 وجود داشته باشد، وجود نخواهد داشت
رونویسی شده و هیچ خطایی ایجاد نخواهد شد. دلیل آن این است که نام elev_200 در حال حاضر
نشان دهنده متغیر موقت (نقشه) است و نه نقشه موجود. بخش های زیر از
عبارت از elev_200 موقت استفاده می کند و elev_200 موجود دست نخورده باقی می ماند.
و استفاده نخواهد شد. اگر کاربر می خواهد از نقشه موجود استفاده کند، نام نقشه موقت
متغیر (نقشه) باید تغییر کند.
تصادفی عدد ژنراتور مقدار دهی اولیه
مولد اعداد شبه تصادفی که توسط تابع rand() استفاده می شود را می توان به a مقداردهی اولیه کرد
مقدار خاص با استفاده از دانه گزینه. این می تواند برای تکرار یک قبلی استفاده شود
محاسبه
متناوبا، می توان آن را از زمان سیستم و PID با استفاده از -r پرچم.
این باید منجر به استفاده از یک دانه متفاوت در هر بار شود.
در هر صورت، دانه در تاریخچه نقشه نوشته می شود و با استفاده از آن قابل مشاهده است
r.info.
اگر میخواهید افراد دیگر بتوانند نتایج شما را تأیید کنند، ترجیحاً از آن استفاده کنید
دانه گزینه ای برای ارائه یک دانه که یا در اسکریپت مشخص شده است یا از a ایجاد شده است
فرآیند تعیینی مانند یک مولد اعداد شبه تصادفی که یک دانه صریح داده می شود.
توجه داشته باشید که تابع rand() یک خطای کشنده ایجاد می کند اگر هیچ کدام از اینها نباشند دانه گزینه نه
la -s پرچم داده شده است.
مثال ها
برای محاسبه میانگین دو لایه نقشه شطرنجی a و b:
ave = (a + b)/2
برای تشکیل میانگین وزنی:
ave = (5*a + 3*b)/8.0
برای تولید یک نمایش باینری از لایه نقشه شطرنجی a بنابراین دسته 0 0 باقی می ماند
و همه دسته های دیگر 1 می شوند:
ماسک = a!= 0
این نیز می تواند توسط:
ماسک = اگر (الف)
برای پوشاندن لایه نقشه شطرنجی b توسط لایه نقشه شطرنجی a:
نتیجه = اگر (الف، ب)
برای تغییر تمام مقادیر زیر 5 به NULL:
newmap = if(map<5، null()، 5)
تابع graph() به کاربران اجازه می دهد تا با استفاده از جفت های x,y تبدیل xy را مشخص کنند
مختصات در برخی شرایط، تبدیل از یک مقدار به مقدار دیگر به راحتی امکان پذیر نیست
به صورت ریاضی ایجاد می شود، اما می توان آن را با یک نمودار دو بعدی و سپس به صورت خطی نشان داد
درون یابی شده است. تابع graph() فرصتی برای انجام این کار فراهم می کند. یک محور x
مقدار به تابع گراف همراه با نمودار مرتبط ارائه شده توسط a ارائه می شود
سری از جفت x،y. مقادیر x باید بطور یکنواخت در حال افزایش باشند (هر کدام بزرگتر از یا
برابر قبلی). تابع گراف به صورت خطی بین جفت ها درون یابی می کند. هر x
مقدار کمتر، کمترین مقدار x (یعنی اول) مقدار y مربوطه را برمی گرداند.
هر مقدار x بالاتر از آخرین مقدار به طور مشابه مقدار y مربوطه را برگرداند.
درخواست را در نظر بگیرید:
نقشه جدید = نمودار (نقشه، 1,10،2,25، 3,50،XNUMX، XNUMX،XNUMX)
مقادیر X (نقشه) ارائه شده و مقادیر y (نقشه جدید) برگردانده شده است:
0، 10
1، 10
1.5، 17.5
2.9، 47.5
4، 50
100، 50
شناخته شده مسائل
خطوط ادامه باید با \ و داشته باشند نه فضای سفید انتهایی (جاهای خالی یا زبانه ها). اگر
کاربر فضای خالی را در انتهای خطوط ادامه، یعنی پیام های خطا، باقی می گذارد
تولید شده توسط r.mapcalc بی معنی خواهد بود و معادله به عنوان کاربر کار نخواهد کرد
مورد نظر. این به ویژه برای تابع ()eval مهم است.
در حال حاضر، مکانیسم اظهار نظر در آن وجود ندارد r.mapcalc. شاید افزودن قابلیتی که
وقتی کاربر یک # را در ابتدای a وارد میکند، کل خط نادیده گرفته میشود
خط به عنوان اگر آن را وجود نداشت، ترفند را انجام دهد.
این تابع باید از کاربر بخواهد که به جای یک خالی، «پایان» یا «خروج» را تایپ کند
خط این باعث می شود که چندین اسکریپت با فضای سفید جدا شوند.
r.mapcalc در صورت انجام عملیات روی سلول های NULL هشداری را چاپ نمی کند. به آن واگذار شده است
کاربر برای استفاده از تابع isnull()
با استفاده از خدمات onworks.net از r.mapcalcgrass به صورت آنلاین استفاده کنید