هذا هو الأمر r.mapcalcgrass الذي يمكن تشغيله في موفر الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت
برنامج:
اسم
ص - حاسبة الخريطة النقطية.
الكلمات الرئيسية
النقطية، الجبر
موجز
ص
ص --مساعدة
ص [-s] [التعبير=سلسلة] [ملف=الاسم] [بذرة=عدد صحيح] [-اعادة الكتابة]
[-مساعدة] [-مطنب] [-هدوء] [-ui]
الأعلام:
-s
توليد بذور عشوائية (النتيجة غير حتمية)
--الكتابة فوق
السماح لملفات الإخراج بالكتابة فوق الملفات الموجودة
--مساعدة
طباعة ملخص الاستخدام
- الإسراف
إخراج وحدة مطول
--هادئ
إخراج وحدة هادئة
--ui
فرض إطلاق مربع حوار واجهة المستخدم الرسومية
المعلمات:
التعبير=سلسلة
التعبير لتقييم
ملف=الاسم
ملف يحتوي على تعبير (تعبيرات) للتقييم
بذرة=عدد صحيح
البذور لوظيفة rand ().
الوصف
ص ينفذ العمليات الحسابية على طبقات الخريطة النقطية. يمكن إنشاء طبقات خريطة نقطية جديدة
وهي عبارة عن تعبيرات حسابية تتضمن طبقات خريطة نقطية موجودة، أو عددًا صحيحًا أو عائمًا
ثوابت النقطة، والدوال.
البرنامج تستخدم
ص التعبير له النموذج:
نتيجة = التعبير
أين نتيجة هو اسم طبقة الخريطة النقطية التي تحتوي على نتيجة الحساب
التعبير هو أي تعبير حسابي قانوني يتضمن طبقات الخريطة النقطية الموجودة
(إلا نتيجة نفسها)، ثوابت الأعداد الصحيحة أو الفاصلة العائمة، والوظائف المعروفة
آلة حاسبة. يُسمح بالأقواس في التعبير ويمكن أن تكون متداخلة بأي عمق.
نتيجة سيتم إنشاؤه في مجموعة الخرائط الحالية للمستخدم.
As التعبير= هو الخيار الأول، وهو الافتراضي. وهذا يعني أن تمرير
التعبير في سطر الأوامر ممكن طالما أن التعبير مقتبس ومسافة
يتم تضمينه قبل الأول = لافتة. مثال ('foo' هي الخريطة الناتجة):
r.mapcalc "فو = 1"
أو:
r.mapcalc 'foo = 1'
لن يعمل التعبير غير المقتبس (أي التقسيم على وسيطات متعددة)، ولن يتم حذفه
المسافة قبل علامة =:
r.mapcalc 'foo=1'
آسف، ليست معلمة صالحة
لقراءة الأمر من الملف، استخدم file= بشكل صريح، على سبيل المثال:
r.mapcalc file=file
أو:
ملف r.mapcalc=- < ملف
أو:
ملف r.mapcalc=- <
فو = 1
EOF
دخلت الصيغة إلى ص من قبل المستخدم يتم تسجيلها في كل من نتيجة عنوان الخريطة
(الذي يظهر في ملف الفئة لـ نتيجة) وفي ملف التاريخ لـ نتيجة.
بعض الأحرف لها معنى خاص لقذيفة الأوامر. إذا كان المستخدم يدخل الإدخال
إلى ص في سطر الأوامر، يجب وضع التعبيرات ضمن علامات اقتباس مفردة.
انظر الملاحظات أدناه.
مشغلي طلب of الأولوية
العوامل التالية مدعومة:
المشغل يعني نوع الأسبقية
-------------------------------------------------- ------------
- النفي الحسابي 12
~ مكمل واحد Bitwise 12
! غير منطقي 12
^ الأس الحسابي 11
النسبة المئوية للمعامل الحسابي 10
/ القسمة الحسابية 10
* الضرب الحسابي 10
+ الإضافة الحسابية 9
- الطرح الحسابي 9
<< التحول الأيسر Bitwise 8
>> التحول الأيمن Bitwise 8
>>> التحول الأيمن (غير موقع) Bitwise 8
> أكبر من المنطقي 7
>= أكبر من أو يساوي المنطق 7
<أقل من المنطقي 7
<= أقل من أو يساوي المنطقي 7
== يساوي منطقي 6
!= لا يساوي منطقي 6
& bitwise و bitwise 5
| bitwise أو bitwise 4
&& منطقي ومنطقي 3
&&& منطقي و[1] منطقي 3
|| منطقي أو منطقي 2
||| منطقي أو[1] منطقي 2
؟: شرط منطقي 1
(المعامل هو الباقي عند القسمة)
[1] &&& و ||| يتعامل المشغلون مع القيم الخالية بشكل مختلف عن المشغلين الآخرين. انظر
قسم بعنوان اغية تقنية أدناه لمزيد من التفاصيل.
يتم تطبيق عوامل التشغيل من اليسار إلى اليمين، مع تطبيق عوامل الأسبقية الأعلى
قبل تلك ذات الأسبقية الأقل. القسمة على 0 والمعامل على 0 مقبولة و
إعطاء نتيجة فارغة. تعطي العوامل المنطقية نتيجة 1 إذا كانت المقارنة صحيحة، 0
غير ذلك.
النقطية رسم خريطة طبقة أسماء
يتم أخذ أي شيء في التعبير ليس رقمًا أو عامل تشغيل أو اسم وظيفة
يكون اسم طبقة الخريطة النقطية. أمثلة:
ارتفاع
x3
3d.his
تتوافق معظم طبقات خرائط GRASS النقطية مع اصطلاح التسمية هذا. ومع ذلك، إذا كانت طبقة الخريطة النقطية
إذا كان له اسم يتعارض مع القاعدة المذكورة أعلاه، فيجب نقله. على سبيل المثال،
التعبير
س = أب
سيتم تفسيرها على النحو التالي: x يساوي ناقص b، في حين أن
س = "أب"
سيتم تفسيره على النحو التالي: x يساوي طبقة الخريطة النقطية المسماة أ
أيضا
س = 3107
من شأنه أن يخلق x مليئة بالرقم 3107، بينما
س = "3107"
سيتم نسخ طبقة الخريطة النقطية 3107 إلى طبقة الخريطة النقطية x.
علامات الاقتباس ليست مطلوبة إلا إذا كانت أسماء طبقات الخريطة النقطية تبدو وكأنها أرقام أو تحتوي على
المشغلين، أو ما لم يتم تشغيل البرنامج بشكل غير تفاعلي. تفترض الأمثلة الواردة هنا
يتم تشغيل البرنامج بشكل تفاعلي. انظر الملاحظات أدناه.
ص سيبحث عن طبقات الخريطة النقطية وفقًا لمجموعة الخرائط الحالية للمستخدم
مسار البحث. من الممكن تجاوز مسار البحث وتحديد مجموعة الخرائط منه
لتحديد طبقة الخريطة النقطية. يتم ذلك عن طريق تحديد اسم طبقة الخريطة النقطية
النموذج:
name@mapset
على سبيل المثال، ما يلي هو تعبير قانوني:
النتيجة = x@PERMANENT / y@SOILS
لا يجب أن تكون مجموعة الخرائط المحددة في مسار بحث مجموعة الخرائط. ( هذه الطريقة
يعد تجاوز مسار بحث مجموعة الخرائط أمرًا شائعًا في جميع أوامر GRASS، وليس فقط ص.)
إنّ حي تغيير
الخرائط والصور هي ملفات قاعدة بيانات مخزنة بتنسيق نقطي، أي ثنائي الأبعاد
مصفوفات القيم الصحيحة. في ص، قد يتبع الخرائط أ حي تغيير
الذي يحدد الإزاحة النسبية من الخلية الحالية التي يتم تقييمها. التنسيق هو
خريطة [ص، ج]، حيث r هو إزاحة الصف و c هو إزاحة العمود. على سبيل المثال، الخريطة[1,2،XNUMX،XNUMX]
يشير إلى الخلية التي تحتوي على صف واحد أسفلها وعمودين على يمين الخلية الحالية،
الخريطة[-2,-1] يشير إلى الخلية صفين أعلاه وعمود واحد على يسار التيار
الخلية، و الخريطة[0,1،XNUMX،XNUMX] يشير إلى الخلية بعمود واحد على يمين الخلية الحالية. هذا
يسمح بناء الجملة بتطوير مرشحات من نوع الأحياء داخل خريطة واحدة أو عبرها
خرائط متعددة.
النقطية رسم خريطة طبقة القيم تبدأ من هيه الفئة ملف
في بعض الأحيان يكون من المرغوب فيه استخدام قيمة مرتبطة بفئة ما ملصق بدلا من ال
قيمة الفئة نفسها. إذا كان اسم طبقة الخريطة النقطية مسبوقًا بـ @ المشغل، ثم
يتم استخدام التسميات الموجودة في ملف الفئة لطبقة الخريطة النقطية في التعبير بدلاً من ذلك
قيمة الفئة.
على سبيل المثال، لنفترض أن طبقة الخريطة النقطية التربة.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 * أزرق
بدلاً من ذلك ، يمكنك استخدام:
النتيجة = ص#خريطة
لاستخدام أوزان NTSC:
0.30 * أحمر + 0.59 * أخضر + 0.11 * أزرق
أو يمكنك استخدام:
النتيجة = i#map
لاستخدام الأوزان المتساوية:
0.33 * أحمر + 0.33 * أخضر + 0.33 * أزرق
العامل # له ثلاثة أشكال أخرى: r#map، g#map، b#map. هذه تستخرج اللون الأحمر، الأخضر،
أو المكونات الزرقاء في الخريطة النقطية المسماة، على التوالي. البرنامج النصي لقذيفة GRASS r. مزيج
يستخرج كل مكون من هذه المكونات من طبقتين للخريطة النقطية، ويجمعهما بواسطة a
النسبة المئوية المحددة من قبل المستخدم. تسمح هذه الأشكال بفصل الألوان. على سبيل المثال، ل
استخراج المكون الأحمر من رسم خريطة وقم بتخزينها في طبقة الخريطة الجديدة 0-255 أحمر، المستخدم
يمكن أن تكتب:
red = r#map
لتعيين الألوان الرمادية لهذه الخريطة، اكتب:
r.colors Map=اللون الأحمر=القواعد
اسود
أبيض
لتعيين الألوان الحمراء لهذه الخريطة، اكتب:
r.colors Map=اللون الأحمر=القواعد
اسود
أحمر
وظائف
الوظائف المدعومة حاليًا مدرجة في الجدول أدناه. نوع النتيجة
يشار إليه في العمود الأخير. F يعني أن الوظائف تؤدي دائمًا إلى عائمة
قيمة النقطة، I يعني أن الدالة تعطي نتيجة صحيحة، و * يشير إلى أن
تكون النتيجة عائمة إذا كانت أي من وسيطات الدالة عبارة عن قيم فاصلة عائمة و
عدد صحيح إذا كانت كافة الوسائط عدداً صحيحاً.
نوع وصف الوظيفة
-------------------------------------------------- -------------------------
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
EX(x,y) x للقوة y F
تعويم (x) تحويل x إلى نقطة عائمة ذات دقة واحدة F
الرسم البياني (x,x1,y1[x2,y2..]) تحويل x إلى ay بناءً على النقاط في الرسم البياني F
graph2(x,x1[,x2,..],y1[,y2..])
شكل بديل للرسم البياني () F
إذا خيارات القرار: *
إذا كان (x) 1 إذا كان x ليس صفراً، وإلا 0
إذا (x,a) a إذا x ليس صفراً، 0 وإلا
إذا (x,a,b) a إذا كانت x ليست صفرًا، b بخلاف ذلك
إذا (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 of x base b F
max(x,y[,z...]) أكبر قيمة لتلك المدرجة *
الوسيط (x،y[،z...]) القيمة المتوسطة لتلك المدرجة *
min(x,y[,z...]) أصغر قيمة لتلك المدرجة *
mode(x,y[,z...]) قيمة الوضع لتلك المدرجة *
nmax(x,y[,z...]) أكبر قيمة لتلك المدرجة، باستثناء القيم الخالية *
nmedian(x,y[,z...]) القيمة المتوسطة لتلك المدرجة، باستثناء القيم الخالية *
nmin(x,y[,z...]) أصغر قيمة لتلك المدرجة، باستثناء القيم الخالية *
قيمة الوضع nmode(x,y[,z...]) لتلك المدرجة، باستثناء القيم الخالية *
ليس (x) 1 إذا كانت x صفرًا، وإلا 0
الأسرى(x,y) x إلى القوة y *
rand(a,b) قيمة عشوائية x : a <= x < b *
تقريب (x) تقريب x إلى أقرب عدد صحيح I
round(x,y) round x إلى أقرب مضاعف لـ y
round(x,y,z) round x إلى أقرب y*i+z لبعض الأعداد الصحيحة i
sin(x) جيب x (x بالدرجات) F
الجذر التربيعي (x) الجذر التربيعي لـ x F
tan(x) ظل x (x بالدرجات) F
xor(x,y) حصريًا-أو (XOR) لـ x وy I
المتغيرات الداخلية:
Row() الصف الحالي للنافذة المتحركة
col() العمود الحالي للنافذة المتحركة
x() إحداثي x الحالي للنافذة المتحركة
y() إحداثي y الحالي للنافذة المتحركة
ewres() الدقة الحالية بين الشرق والغرب
nsres() الدقة الحالية بين الشمال والجنوب
فارغة () قيمة فارغة
لاحظ أن فهرسة الصف () وcol () تبدأ بالرقم 1.
عائم نقطة القيم in هيه التعبير
يُسمح بأرقام الفاصلة العائمة في التعبير. رقم النقطة العائمة هو رقم
الذي يحتوي على علامة عشرية:
2.3 12.0 12. .81
تتم معالجة قيم النقطة العائمة في التعبير بطريقة خاصة. مع الحساب و
العوامل المنطقية، إذا كان أحد المعاملين عائمًا، فسيتم تحويل الآخر إلى تعويم و
نتيجة العملية تعويم. وهذا يعني، على وجه الخصوص، تقسيم الأعداد الصحيحة
ينتج عنه عدد صحيح (مقطوع)، بينما يؤدي تقسيم العوامات إلى تعويم دقيق
قيمة النقطة. مع الدوال من النوع * (انظر الجدول أعلاه)، تكون النتيجة عائمة إن وجدت
الوسيطة عائمة، وعدد صحيح على خلاف ذلك.
ملاحظة: إذا قمت بالحساب باستخدام أرقام صحيحة، فستكون الخريطة الناتجة عددًا صحيحًا. اذا أنت
تريد الحصول على نتيجة عائمة، أضف العلامة العشرية إلى عدد (أرقام) صحيحة.
إذا كنت تريد تقسيم الفاصلة العائمة، فيجب أن تكون إحدى الوسيطات على الأقل عائمة
قيمة النقطة. سيؤدي ضرب أحدهما في 1.0 إلى الحصول على نتيجة الفاصلة العائمة، أيضًا
باستخدام تعويم ():
r.mapcalc "ndvi = float(lsat.4 - lsat.3) / (lsat.4 + lsat.3)"
اغية تقنية
· القسمة على صفر يجب أن تؤدي إلى NULL.
· المعامل بمقدار صفر يجب أن يؤدي إلى NULL.
· القيم الخالية في أي عملية حسابية أو منطقية يجب أن تؤدي إلى قيمة فارغة.
(ومع ذلك، يتم التعامل مع &&& و ||| بشكل خاص، كما هو موضح أدناه).
· &&& و ||| يلاحظ المشغلون البديهيات التالية حتى عندما تكون x فارغة:
x &&& false == false
خطأ &&& س == خطأ
س ||| صحيح == صحيح
صحيح ||| س == صحيح
· القيم الخالية في وسيطات الدالة يجب أن تؤدي إلى NULL (ومع ذلك، if() و eval() و
isnull() بشكل خاص، كما هو موضح أدناه).
· تقوم الدالة eval() دائمًا بإرجاع وسيطتها الأخيرة
· حالة if() هي:
إذا (خ)
NULL إذا كانت x فارغة؛ 0 إذا كانت x صفراً؛ 1 غير ذلك
إذا (س، أ)
NULL إذا كانت x فارغة؛ إذا كانت x غير صفرية؛ 0 غير ذلك
إذا (س، أ، ب)
NULL إذا كانت x فارغة؛ إذا كانت x غير صفرية؛ ب غير ذلك
إذا (س، ن، ض، ع)
NULL إذا كانت x فارغة؛ n إذا كانت x سالبة؛
z إذا كانت x صفرًا؛ p إذا كانت x موجبة
· الدالة (الجديدة) isnull(x) تُرجع: 1 إذا كانت x فارغة؛ 0 خلاف ذلك. الجديد)
تقوم الدالة null() (التي لا تحتوي على وسائط) بإرجاع عدد صحيح NULL.
· يجب أن تؤدي وسيطات الوظائف غير الفارغة، ولكنها غير صالحة، إلى NULL.
أمثلة:
سجل(-2)
الجذر التربيعي (-2)
pow(a,b) حيث a سالب وb ليس عددًا صحيحًا
دعم NULL: يرجى ملاحظة أن أي عملية حسابية يتم إجراؤها باستخدام خلايا NULL تؤدي دائمًا إلى نتيجة NULL
قيمة هذه الخلايا. إذا كنت تريد استبدال خلية فارغة بشكل سريع، فاستخدم الدالة isnull()
وظيفة الاختبار في بيان if.
مثال: يريد المستخدمون أن يتم التعامل مع الخلايا ذات القيمة الخالية كأصفار. لإضافة الخرائط A و
B (حيث يحتوي B على القيم الخالية) للحصول على الخريطة C، يمكن للمستخدم استخدام بناء مثل:
ج = أ + إذا (ليس فارغا (ب)،0، ب)
اغية الظروف:
بالنسبة لنموذج الوسيطة الواحدة:
إذا (x) = NULL إذا كانت x فارغة
إذا (س) = 0 إذا س = 0
إذا (x) = 1 وإلا (أي x ليس NULL ولا 0).
بالنسبة لنموذج الوسيطتين:
إذا (x,a) = NULL إذا كانت x فارغة
إذا (س، أ) = 0 إذا س = 0
إذا (x,a) = خلاف ذلك (أي x ليس NULL ولا 0).
بالنسبة لنموذج الوسيطة الثلاثة:
إذا (x,a,b) = NULL إذا كانت x فارغة
إذا (س، أ، ب) = ب إذا س = 0
إذا (x,a,b) = a خلاف ذلك (أي x ليس NULL ولا 0).
بالنسبة لنموذج الوسيطة الأربعة:
إذا (x,a,b,c) = NULL إذا كانت x فارغة
إذا (س، أ، ب، ج) = أ إذا س > 0
إذا (س، أ، ب، ج) = ب إذا س = 0
إذا (س، أ، ب، ج) = ج إذا س < 0
بشكل أكثر عمومية، تُرجع كافة العوامل ومعظم الوظائف NULL إذا كان هناك *أي* من الوسائط الخاصة بها
فارغة.
الدالات if() وisnull() وeval() هي استثناءات.
الدالة isnull() ترجع 1 إذا كانت وسيطتها NULL و0 بخلاف ذلك. إذا كان المستخدم
يريد العكس ! يجب استخدام عامل التشغيل، على سبيل المثال "!isnull(x)".
جميع أشكال if() تُرجع NULL إذا كانت الوسيطة الأولى NULL. نماذج الوسيطات 2 و 3 و 4
if() تُرجع NULL إذا كانت الوسيطة "المحددة" NULL، على سبيل المثال:
if(0,a,b) = b بغض النظر عما إذا كانت a فارغة أم لا
إذا (1، أ، ب) = أ بغض النظر عما إذا كانت ب فارغة أم لا
تقوم eval() دائمًا بإرجاع وسيطتها الأخيرة، لذا فهي تُرجع NULL فقط إذا كانت الوسيطة الأخيرة كذلك
باطل.
ملاحظات: لا يمكن للمستخدم اختبار NULL باستخدام عامل التشغيل ==، حيث يؤدي ذلك إلى إرجاع NULL إذا كان أي منهما
أو كلا الوسيطتين NULL، أي إذا كان x وy كلاهما NULL، فإن "x == y" و"x != y" تكونان فارغتين
كلاهما NULL بدلاً من 1 و0 على التوالي.
يكون السلوك منطقيًا إذا اعتبر المستخدم NULL بمثابة كمية غير معروفة.
على سبيل المثال، إذا كان كل من x وy غير معروفين، فإن قيم "x == y" و"x != y" تكون أيضًا
مجهول؛ إذا كان كلاهما لهما قيم غير معروفة، فلن يعرف المستخدم ما إذا كان كلاهما أم لا
لها نفس القيمة.
الملاحظات
الأستعمال تبدأ من أمر خط
يجب توخي الحذر الشديد إذا تم إعطاء التعبير في سطر الأوامر. بعض الشخصيات
لها معنى خاص لقذيفة UNIX. وتشمل هذه، من بين أمور أخرى:
* ( ) > & |
يُنصح بوضع علامات اقتباس مفردة حول التعبير؛ على سبيل المثال:
'النتيجة = الارتفاع * 2'
بدون علامات الاقتباس، سيتم تغيير *، الذي له معنى خاص لقذيفة UNIX
ص سوف نرى شيئا آخر غير *.
قد يؤدي إجراء الحسابات
بشكل عام، من الأفضل القيام بأكبر قدر ممكن في كل أمر 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 elevation_A=1
r.mapcalc الارتفاع.1=1
ومع ذلك، لا ينصح ببناء الجملة هذا لأن علامات الاقتباس كما هو مذكور أعلاه أكثر أمانًا. باستخدام الاقتباسات
متوافق مع الإصدارات السابقة وصالح في المستقبل.
تفاعلي إدخال in أمر خط
بالنسبة للصيغ التي يدخلها المستخدم من الإدخال القياسي (بدلاً من سطر الأوامر)،
توجد الآن ميزة استمرار الخط. إذا قام المستخدم بإضافة شرطة مائلة عكسية إلى نهاية
خط الإدخال, ص يفترض أن الصيغة التي أدخلها المستخدم تستمر في العمل
خط الإدخال التالي لا يوجد حد للعدد المحتمل لخطوط الإدخال أو ل
طول الصيغة.
إذا كان ص الصيغة التي أدخلها المستخدم طويلة جدًا، وسيحتوي عنوان الخريطة فقط على
سيتم وضع بعض منها، ولكن معظم (إن لم يكن كلها) من الصيغة في ملف السجل لـ
هيه نتيجة خريطة.
عندما يقوم المستخدم بإدخال الإدخال إلى ص بشكل غير تفاعلي على سطر الأوامر، البرنامج
لن يحذر المستخدم من الكتابة فوق طبقات الخريطة الموجودة. ولذلك يجب على المستخدمين أن يأخذوا
الحرص على تعيين أسماء الخرائط النقطية لمخرجات البرنامج التي لا توجد بعد في وضعها الحالي
مجموعات الخرائط.
النقطية MASK معالجة
ص يتبع سلوك GRASS الشائع للتعامل مع قناع البيانات النقطية، لذا فإن MASK هو فقط
يتم تطبيقه عند قراءة خريطة GRASS النقطية الموجودة. وهذا يعني، على سبيل المثال، أن
أمر:
r.mapcalc "elevation_exaggerated = الارتفاع * 3"
قم بإنشاء خريطة تحترم وحدات البكسل المقنعة إذا كان MASK نشطًا.
ومع ذلك، عند إنشاء خريطة لا تعتمد على أي خريطة، على سبيل المثال، خريطة من ثابت:
r.mapcalc "base_height = 200.0"
تقتصر الخريطة النقطية التي تم إنشاؤها على منطقة حسابية فقط ولكنها لا تتأثر بها
قناع نشط. وهذا أمر متوقع لأنه، كما ذكر أعلاه، يتم تطبيق MASK فقط عندما
القراءة، وليس عند كتابة الخريطة النقطية.
إذا كان يجب أيضًا في هذه الحالة تطبيق القناع، فستتضمن عبارة if() القناع
ينبغي استخدامها، على سبيل المثال:
r.mapcalc "base_height = if(MASK, 200.0, null())"
عند اختبار التعبيرات ذات الصلة بـ MASK، ضع في اعتبارك أنه عندما يكون MASK نشطًا، فإنك لا ترى ذلك
البيانات في المناطق المقنعة حتى لو لم تكن فارغة. يرى r قناع للتفاصيل.
وحدة التقييم وظيفة
إذا كان يجب أن يكون ناتج الحساب عبارة عن خريطة واحدة فقط ولكن التعبير معقد للغاية
ومن الأفضل تقسيمها إلى عدة تعبيرات، فيمكن استخدام دالة التقييم:
r.mapcalc << EOF
تقييم (elev_200 = الارتفاع - 200، \
elev_5 = 5 * الارتفاع، \
elev_p = الأسرى (elev_5، 2))
elevation_result = (0.5 * elev_200) + 0.8 * elev_p
EOF
يستخدم هذا المثال بناء جملة << EOF المشابه لنظام التشغيل Unix لتوفير المدخلات إليه ص.
لاحظ أنه لا يتم إنشاء المتغيرات المؤقتة (الخرائط) وبالتالي لا يهم
سواء كانوا موجودين أم لا. في المثال أعلاه، إذا كانت الخريطة elev_200 موجودة فلن تكون موجودة
سيتم الكتابة فوقه ولن يتم إنشاء أي خطأ. والسبب هو أن الاسم elev_200 الآن
تشير إلى المتغير المؤقت (الخريطة) وليس الخريطة الموجودة. الأجزاء التالية من
سيستخدم التعبير elev_200 المؤقت وسيتم ترك elev_200 الحالي كما هو
ولن يتم استخدامها. إذا كان المستخدم يريد استخدام الخريطة الموجودة، اسم المؤقتة
يجب تغيير المتغير (الخريطة).
عشوائية عدد مولد كهربائي التهيئة
يمكن تهيئة مولد الأرقام العشوائية الزائفة الذي تستخدمه الدالة rand() إلى a
قيمة محددة باستخدام بذرة خيار. يمكن استخدام هذا لتكرار السابق
عملية حسابية.
وبدلاً من ذلك، يمكن تهيئته من وقت النظام ومعرف PID باستخدام ملف -r العلم.
يجب أن يؤدي ذلك إلى استخدام بذرة مختلفة في كل مرة.
في كلتا الحالتين، سيتم كتابة البذرة في سجل الخريطة، ويمكن رؤيتها باستخدام
r.info.
إذا كنت تريد أن يتمكن الآخرون من التحقق من نتائجك، فمن الأفضل استخدام
بذرة خيار توفير بذرة محددة في البرنامج النصي أو تم إنشاؤها من ملف
عملية حتمية مثل مولد أرقام عشوائية زائفة مع إعطاء بذرة واضحة.
لاحظ أن الدالة rand() ستنشئ خطأ فادحًا إذا لم يكن الأمر كذلك بذرة خيار ولا
هيه -s يتم إعطاء العلم.
أمثلة
لحساب متوسط طبقتين من الخريطة النقطية a b:
افي = (أ + ب)/2
لتكوين المتوسط المرجح:
افي = (5*أ + 3*ب)/8.0
لإنتاج تمثيل ثنائي لطبقة الخريطة النقطية a بحيث تظل هذه الفئة 0 0
وجميع الفئات الأخرى تصبح 1:
القناع = أ ! = 0
ويمكن تحقيق ذلك أيضًا عن طريق:
قناع = إذا (أ)
لإخفاء طبقة الخريطة النقطية b بواسطة طبقة الخريطة النقطية a:
النتيجة = إذا (أ، ب)
لتغيير كافة القيم أدناه 5 إلى NULL:
خريطة جديدة = إذا (خريطة <5، فارغة ()، 5)
تتيح الدالة graph() للمستخدمين تحديد تحويل xy باستخدام أزواج x وy
الإحداثيات. في بعض الحالات، لا يكون التحول من قيمة إلى أخرى أمراً سهلاً
تم تأسيسها رياضيا، ولكن يمكن تمثيلها برسم بياني ثنائي الأبعاد ثم خطيا
محرف. توفر الدالة graph() الفرصة لإنجاز ذلك. محور س
يتم توفير القيمة لوظيفة الرسم البياني مع الرسم البياني المرتبط الذي يمثله a
سلسلة من أزواج x،y. يجب أن تكون قيم 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
معروف قضايا
يجب أن تنتهي خطوط الاستمرار بـ \ وhave لا مسافة بيضاء زائدة (الفراغات أو علامات التبويب). لو
يترك المستخدم مساحة بيضاء في نهاية أسطر الاستمرار، رسائل الخطأ
التي تنتجها ص سيكون بلا معنى والمعادلة لن تعمل كمستخدم
منوي. وهذا مهم بشكل خاص لوظيفة eval().
حاليا، لا توجد آلية للتعليق في ص. ربما إضافة القدرة على ذلك
قد يتسبب في تجاهل السطر بأكمله عندما يقوم المستخدم بإدخال # في بداية a
الخط كما لو لم يكن موجودا، من شأنه أن يفي بالغرض.
يجب أن تتطلب الوظيفة من المستخدم كتابة "end" أو "exit" بدلاً من مجرد ترك مسافة فارغة
خط. وهذا من شأنه أن يجعل فصل البرامج النصية المتعددة قابلاً للفصل بمسافة بيضاء.
ص لا يطبع تحذيرا في حالة العمليات على الخلايا الفارغة. ويترك ل
المستخدم للاستفادة من وظيفة isnull().
استخدم r.mapcalcgrass عبر الإنترنت باستخدام خدمات onworks.net