นี่คือคำสั่ง r.mapcalcgrass ที่สามารถเรียกใช้ในผู้ให้บริการโฮสติ้งฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
r.mapcalc - เครื่องคิดเลขแผนที่แรสเตอร์
KEYWORDS
แรสเตอร์ พีชคณิต
เรื่องย่อ
r.mapcalc
r.mapcalc --ช่วยด้วย
r.mapcalc [-s] [การแสดงออก=เชือก] [ไฟล์=ชื่อ] [เมล็ดพันธุ์=จำนวนเต็ม-เขียนทับ]
-ช่วย-ละเอียด-เงียบสงบ-ui]
ธง:
-s
สร้างเมล็ดพันธุ์สุ่ม (ผลลัพธ์ไม่ได้ถูกกำหนด)
--เขียนทับ
อนุญาตให้ไฟล์เอาต์พุตเขียนทับไฟล์ที่มีอยู่
--ช่วยด้วย
พิมพ์สรุปการใช้งาน
--รายละเอียด
เอาต์พุตโมดูล verbose
--เงียบ
เอาต์พุตโมดูลเงียบ
--UI
บังคับให้เปิดใช้กล่องโต้ตอบ GUI
พารามิเตอร์:
การแสดงออก=เชือก
การแสดงออกเพื่อประเมิน
ไฟล์=ชื่อ
ไฟล์ที่มีนิพจน์ที่จะประเมิน
เมล็ดพันธุ์=จำนวนเต็ม
ฟังก์ชัน Seed for rand()
DESCRIPTION
r.mapcalc ดำเนินการคำนวณในเลเยอร์แผนที่แรสเตอร์ สามารถสร้างเลเยอร์แผนที่แรสเตอร์ใหม่ได้
ซึ่งเป็นนิพจน์ทางคณิตศาสตร์ที่เกี่ยวข้องกับเลเยอร์แผนที่แรสเตอร์ที่มีอยู่ จำนวนเต็ม หรือลอยตัว
ค่าคงที่จุดและฟังก์ชัน
โครงการ ใช้
r.mapcalc นิพจน์มีรูปแบบ:
ผล = การแสดงออก
ที่ไหน ผล เป็นชื่อของเลเยอร์แผนที่แรสเตอร์เพื่อรวมผลลัพธ์ของการคำนวณ
และ การแสดงออก เป็นนิพจน์ทางคณิตศาสตร์ทางกฎหมายที่เกี่ยวข้องกับเลเยอร์แผนที่แรสเตอร์ที่มีอยู่
(ยกเว้น ผล เอง) ค่าคงที่จำนวนเต็มหรือค่าทศนิยม และฟังก์ชันที่ .รู้จัก
เครื่องคิดเลข วงเล็บสามารถใช้ได้ในนิพจน์และอาจซ้อนในระดับความลึกใดก็ได้
ผล จะถูกสร้างขึ้นในชุดแผนที่ปัจจุบันของผู้ใช้
As นิพจน์= เป็นตัวเลือกแรก เป็นค่าเริ่มต้น ซึ่งหมายความว่าผ่าน
นิพจน์บนบรรทัดคำสั่งเป็นไปได้ตราบใดที่นิพจน์ถูกยกมาและเว้นวรรค
รวมไว้ก่อน = เข้าสู่ระบบ. ตัวอย่าง ('foo' คือแผนที่ผลลัพธ์):
r.mapcalc "foo = 1"
หรือ:
r.mapcalc 'foo = 1'
นิพจน์ที่ไม่มีเครื่องหมายคำพูด (เช่น แยกอาร์กิวเมนต์หลายรายการ) จะไม่ทำงาน และจะไม่ละเว้น
ช่องว่างก่อนเครื่องหมาย =:
r.mapcalc 'foo=1'
เสียใจ, ไม่ใช่พารามิเตอร์ที่ถูกต้อง
หากต้องการอ่านคำสั่งจากไฟล์ ให้ใช้ file= อย่างชัดเจน เช่น:
ไฟล์ r.mapcalc=ไฟล์
หรือ:
r.mapcalc file=- < file
หรือ:
ไฟล์ r.mapcalc=- <
ฟู = 1
EOF
สูตรเข้าสู่ r.mapcalc โดยผู้ใช้จะถูกบันทึกไว้ทั้งใน ผล ชื่อแผนที่
(ซึ่งปรากฏในไฟล์หมวดหมู่สำหรับ ผล) และในไฟล์ประวัติสำหรับ ผล.
อักขระบางตัวมีความหมายพิเศษต่อเชลล์คำสั่ง หากผู้ใช้ป้อนอินพุต
ไปยัง r.mapcalc ในบรรทัดคำสั่ง นิพจน์ควรอยู่ภายในเครื่องหมายคำพูดเดี่ยว
ดูหมายเหตุด้านล่าง
โอเปอร์เตอร์-ผู้ประกอบการ และ ใบสั่ง 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] The &&& และ ||| ตัวดำเนินการจัดการค่า Null แตกต่างไปจากตัวดำเนินการอื่น ดู
ส่วนชื่อ NULL สนับสนุน ด้านล่างสำหรับรายละเอียดเพิ่มเติม
โอเปอเรเตอร์ถูกนำไปใช้จากซ้ายไปขวา โดยมีการใช้ลำดับความสำคัญที่สูงกว่า
ก่อนผู้ที่มีลำดับความสำคัญต่ำกว่า หารด้วย 0 และโมดูลัสด้วย 0 เป็นที่ยอมรับและ
ให้ผลลัพธ์เป็นโมฆะ ตัวดำเนินการเชิงตรรกะให้ผลลัพธ์ 1 หากการเปรียบเทียบเป็นจริง 0
มิฉะนั้น.
Raster แผนที่ ชั้น ชื่อ
สิ่งใดในนิพจน์ที่ไม่ใช่ตัวเลข ตัวดำเนินการ หรือชื่อฟังก์ชัน จะถูกนำไปที่
เป็นชื่อเลเยอร์แผนที่แรสเตอร์ ตัวอย่าง:
การยกระดับ
x3
3d.ของเขา
เลเยอร์แผนที่แรสเตอร์ GRASS ส่วนใหญ่เป็นไปตามหลักการตั้งชื่อนี้ แต่ถ้าเป็นเลเยอร์แผนที่แรสเตอร์
มีชื่อที่ขัดกับกฎข้างต้นก็ควรยกมา ตัวอย่างเช่น
การแสดงออก
x = แอ๊บ
จะถูกตีความว่า: x เท่ากับ a ลบ b ในขณะที่
x = "แอ๊บ"
จะถูกตีความว่า: x เท่ากับเลเยอร์แผนที่แรสเตอร์ที่ชื่อ ก
Also
x = 3107
จะสร้าง x เต็มไปด้วยหมายเลข 3107 ในขณะที่
x = "3107"
จะคัดลอกเลเยอร์แผนที่แรสเตอร์ 3107 ไปยังเลเยอร์แผนที่แรสเตอร์ x.
ไม่จำเป็นต้องใส่เครื่องหมายคำพูดเว้นแต่ชื่อเลเยอร์แผนที่แรสเตอร์จะมีลักษณะเป็นตัวเลขหรือมี
โอเปอเรเตอร์ หรือ เว้นแต่โปรแกรมจะรันแบบไม่โต้ตอบ ตัวอย่างที่ให้ไว้ที่นี่ถือว่า
โปรแกรมทำงานแบบโต้ตอบ ดูหมายเหตุด้านล่าง
r.mapcalc จะค้นหาเลเยอร์แผนที่แรสเตอร์ตามชุดแผนที่ปัจจุบันของผู้ใช้
เส้นทางการค้นหา เป็นไปได้ที่จะแทนที่เส้นทางการค้นหาและระบุชุดแผนที่ซึ่ง
เพื่อเลือกเลเยอร์แผนที่แรสเตอร์ ทำได้โดยการระบุชื่อเลเยอร์แผนที่แรสเตอร์ใน
แบบฟอร์ม:
ชื่อ@mapset
ตัวอย่างเช่น ต่อไปนี้เป็นนิพจน์ทางกฎหมาย:
ผลลัพธ์ = x@PERMANENT / y@SOILS
ชุดแผนที่ที่ระบุไม่จำเป็นต้องอยู่ในเส้นทางการค้นหาชุดแผนที่ (วิธีนี้ของ
การแทนที่เส้นทางการค้นหา mapset เป็นเรื่องปกติสำหรับคำสั่ง GRASS ทั้งหมด ไม่ใช่เพียงแค่ r.mapcalc.)
เทศกาล ย่าน เปลี่ยนแปลง
แผนที่และรูปภาพเป็นไฟล์ฐานข้อมูลที่จัดเก็บในรูปแบบแรสเตอร์ เช่น สองมิติ
เมทริกซ์ของค่าจำนวนเต็ม ใน r.mapcalc, แผนที่อาจจะตามด้วย ย่าน เปลี่ยนแปลง
ที่ระบุออฟเซ็ตสัมพัทธ์จากเซลล์ปัจจุบันที่กำลังประเมิน รูปแบบคือ
แผนที่[r,c]ที่นี่มี r คือออฟเซ็ตแถวและ c คือค่าชดเชยของคอลัมน์ ตัวอย่างเช่น, แผนที่[1,2]
หมายถึงเซลล์หนึ่งแถวด้านล่างและสองคอลัมน์ทางด้านขวาของเซลล์ปัจจุบัน
แผนที่[-2,-1] หมายถึงเซลล์สองแถวด้านบนและหนึ่งคอลัมน์ทางด้านซ้ายของกระแส
เซลล์และ แผนที่[0,1] หมายถึงเซลล์หนึ่งคอลัมน์ทางด้านขวาของเซลล์ปัจจุบัน นี้
ไวยากรณ์อนุญาตให้มีการพัฒนาตัวกรองประเภทพื้นที่ใกล้เคียงภายในแผนที่เดียวหรือข้าม
หลายแผนที่
Raster แผนที่ ชั้น ค่า รถในตำนานจากเกม หมวดหมู่ ไฟล์
บางครั้ง ขอแนะนำให้ใช้ค่าที่เกี่ยวข้องกับหมวดหมู่ของ ฉลาก แทนการ
หมวดหมู่มูลค่าตัวเอง หากชื่อเลเยอร์แผนที่แรสเตอร์นำหน้าด้วย @ โอเปอเรเตอร์ แล้ว
ป้ายกำกับในไฟล์หมวดหมู่สำหรับเลเยอร์แผนที่แรสเตอร์ใช้ในนิพจน์แทน
ค่าหมวดหมู่
ตัวอย่างเช่น สมมติว่าเลเยอร์แผนที่แรสเตอร์ ดิน.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
โปรดทราบว่าโอเปอเรเตอร์นี้สามารถใช้ได้กับเลเยอร์แผนที่แบบแรสเตอร์เท่านั้นและทำให้เกิดการลอยตัว
ค่าจุดในนิพจน์ ดังนั้น ป้ายหมวดหมู่ต้องขึ้นต้นด้วย valid
ตัวเลข. หากป้ายกำกับหมวดหมู่เป็นจำนวนเต็ม จะแสดงด้วยจุดลอยตัว
ตัวเลข. ฉันป้ายกำกับหมวดหมู่ไม่ได้ขึ้นต้นด้วยตัวเลขหรือหายไปจะเป็น
แสดงโดย NULL (ไม่มีข้อมูล) ในแผนที่แรสเตอร์ที่เป็นผลลัพธ์
สีเทา ขนาด เทียบเท่า และ สี แยก
มักจะเป็นประโยชน์ในการจัดการสีที่กำหนดให้กับหมวดหมู่แผนที่ นี่คือ
มีประโยชน์อย่างยิ่งเมื่อคุณสมบัติสเปกตรัมของเซลล์มีความหมาย (เช่นเดียวกับจินตภาพ
ข้อมูล) หรือเมื่อค่าหมวดหมู่แผนที่แสดงปริมาณจริง (เช่น เมื่อค่าหมวดหมู่
สะท้อนถึงค่าความสูงที่แท้จริง) การปรับแต่งสีของแผนที่ยังช่วยในการจดจำภาพ
และการพิมพ์แผนที่
ตัวดำเนินการ # สามารถใช้เพื่อแปลงค่าหมวดหมู่แผนที่เป็นระดับสีเทา
เทียบเท่าหรือแยกองค์ประกอบสีแดง สีเขียว หรือสีน้ำเงินของเลเยอร์แผนที่แรสเตอร์ลงใน
แยกเลเยอร์แผนที่แรสเตอร์
ผลลัพธ์ = #map
แปลงค่าแต่ละหมวดหมู่เป็น แผนที่ เป็นค่าในช่วง 0-255 ซึ่งแสดงถึง
ระดับระดับสีเทาโดยนัยตามสีสำหรับหมวดหมู่ หากแผนที่มีระดับสีเทา
ตาราง จากนั้นระดับสีเทาคือสิ่งที่ #map ประเมิน มิฉะนั้นจะคำนวณเป็น:
0.10 * แดง + 0.81 * เขียว + 0.01 * น้ำเงิน
หรือคุณสามารถใช้:
ผลลัพธ์ = y#map
ในการใช้การถ่วงน้ำหนัก 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 ใหม่ สีแดง, ผู้ใช้งาน
สามารถพิมพ์:
สีแดง = r#map
ในการกำหนดสีเทาของแผนที่นี้ ให้พิมพ์:
r.แผนที่สี=สีแดง=กฎ
สีดำ
ขาว
หากต้องการกำหนดสีแดงให้แผนที่นี้ ให้พิมพ์:
r.แผนที่สี=สีแดง=กฎ
สีดำ
สีแดง
ฟังก์ชั่น
ฟังก์ชันที่รองรับในปัจจุบันแสดงอยู่ในตารางด้านล่าง ประเภทของผลลัพธ์
ระบุไว้ในคอลัมน์สุดท้าย 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
exp(x,y) x ยกกำลัง y F
float(x) แปลง x เป็นจุดลอยตัวที่มีความแม่นยำเพียงจุดเดียว F
graph(x,x1,y1[x2,y2..]) แปลง x เป็น ay ตามจุดในกราฟ F
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
บันทึก (x,b) บันทึกของ x ฐาน b F
max(x,y[,z...]) มูลค่าสูงสุดในรายการ *
ค่ามัธยฐาน(x,y[,z...]) ค่ามัธยฐานของรายการที่ระบุ *
min(x,y[,z...]) ค่าที่น้อยที่สุดในรายการ *
mode(x,y[,z...]) ค่าโหมดของรายการเหล่านั้น *
nmax(x,y[,z...]) มูลค่าสูงสุดในรายการ ไม่รวมค่า NULL *
nmedian(x,y[,z...]) ค่ามัธยฐานของรายการ ไม่รวมค่า NULL *
nmin(x,y[,z...]) ค่าที่น้อยที่สุดในรายการ ยกเว้นค่า NULL *
nmode(x,y[,z...]) ค่าโหมดของรายการ ไม่รวมค่า NULL *
ไม่ใช่ (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() คอลัมน์ปัจจุบันของหน้าต่างที่กำลังเคลื่อนที่
x() พิกัด x ปัจจุบันของหน้าต่างเคลื่อนที่
y() พิกัด y ปัจจุบันของหน้าต่างเคลื่อนที่
ewres() ความละเอียดปัจจุบันตะวันออก - ตะวันตก
nsres() ความละเอียดเหนือ-ใต้ปัจจุบัน
null() ค่า NULL
โปรดทราบว่าการจัดทำดัชนี row() และ col() เริ่มต้นด้วย 1
ลอย จุด ค่า in การแสดงออก
อนุญาตให้ใช้ตัวเลขทศนิยมในนิพจน์ เลขทศนิยมคือตัวเลข
ซึ่งมีจุดทศนิยม:
2.3 12.0 12. .81
ค่าทศนิยมในนิพจน์จะได้รับการจัดการในลักษณะพิเศษ ด้วยเลขคณิตและ
ตัวดำเนินการเชิงตรรกะ ถ้าตัวถูกดำเนินการใดเป็น float ตัวดำเนินการอื่นจะถูกแปลงเป็น float และ
ผลการดำเนินการลอยตัว ซึ่งหมายความว่าโดยเฉพาะการหารจำนวนเต็ม
ส่งผลให้จำนวนเต็ม (ถูกตัดทอน) ในขณะที่การหารทุ่นจะส่งผลให้ลอยตัวได้อย่างแม่นยำ
ค่าจุด ด้วยฟังก์ชันประเภท * (ดูตารางด้านบน) ผลลัพธ์จะลอยถ้ามี
อาร์กิวเมนต์เป็น float มิฉะนั้นจำนวนเต็ม
หมายเหตุ: หากคุณคำนวณด้วยตัวเลขจำนวนเต็ม แผนที่ผลลัพธ์จะเป็นจำนวนเต็ม ถ้าคุณ
ต้องการได้ผลลัพธ์แบบลอยตัว ให้เพิ่มจุดทศนิยมให้กับตัวเลขจำนวนเต็ม
หากคุณต้องการหารจุดทศนิยม อย่างน้อยหนึ่งอาร์กิวเมนต์จะต้องเป็นทศนิยม
ค่าจุด การคูณหนึ่งในนั้นด้วย 1.0 จะให้ผลลัพธ์เป็นทศนิยมตามต้องการ
ใช้ float():
r.mapcalc "ndvi = float(lsat.4 - lsat.3) / (lsat.4 + lsat.3)"
NULL สนับสนุน
· การหารด้วยศูนย์ควรส่งผลให้เป็น NULL
· โมดูลัสโดยศูนย์ควรส่งผลให้เป็นโมฆะ
· ค่า NULL ในการดำเนินการทางคณิตศาสตร์หรือตรรกะใดๆ ควรส่งผลให้เป็น NULL
(อย่างไรก็ตาม &&& และ ||| ได้รับการปฏิบัติเป็นพิเศษตามที่อธิบายไว้ด้านล่าง)
· &&& และ ||| ตัวดำเนินการสังเกตสัจพจน์ต่อไปนี้แม้ว่า x จะเป็น NULL:
x &&& เท็จ == เท็จ
เท็จ &&& x == เท็จ
x ||| จริง == จริง
จริง ||| x == จริง
· ค่า NULL ในอาร์กิวเมนต์ของฟังก์ชันควรส่งผลให้ NULL (อย่างไรก็ตาม if(), eval() และ
isnull() ได้รับการปฏิบัติเป็นพิเศษ ตามที่อธิบายไว้ด้านล่าง)
· ฟังก์ชัน eval() จะคืนค่าอาร์กิวเมนต์ตัวสุดท้ายเสมอ
· สถานการณ์สำหรับ if() คือ:
ถ้า(x)
NULL ถ้า x เป็น NULL; 0 ถ้า x เป็นศูนย์; 1 อย่างอื่น
ถ้า(x,ก)
NULL ถ้า x เป็น NULL; a ถ้า x ไม่ใช่ศูนย์ 0 อย่างอื่น
ถ้า(x,a,b)
NULL ถ้า x เป็น NULL; a ถ้า x ไม่ใช่ศูนย์ ข อย่างอื่น
ถ้า(x,n,z,p)
NULL ถ้า x เป็น NULL; n ถ้า x เป็นลบ;
z ถ้า x เป็นศูนย์; p ถ้า x เป็นบวก
· ฟังก์ชัน (ใหม่) isnull(x) คืนค่า: 1 ถ้า x เป็น NULL; 0 อย่างอื่น ใหม่)
ฟังก์ชัน null() (ซึ่งไม่มีอาร์กิวเมนต์) ส่งกลับค่า NULL ของจำนวนเต็ม
· ไม่ใช่ NULL แต่ไม่ถูกต้อง อาร์กิวเมนต์ของฟังก์ชันควรส่งผลให้เป็น NULL
ตัวอย่าง:
บันทึก(-2)
ตร.ว.(-2)
pow(a,b) โดยที่ a เป็นลบ และ b ไม่ใช่จำนวนเต็ม
การสนับสนุน NULL: โปรดทราบว่าคณิตศาสตร์ใดๆ ที่ทำกับเซลล์ NULL จะส่งผลให้เป็น NULL . เสมอ
ค่าสำหรับเซลล์เหล่านี้ หากคุณต้องการแทนที่เซลล์ NULL ทันที ให้ใช้ isnull()
ทดสอบฟังก์ชันในคำสั่ง if
ตัวอย่าง: ผู้ใช้ต้องการให้เซลล์ที่มีค่า NULL ได้รับการปฏิบัติเหมือนเป็นศูนย์ ในการเพิ่มแผนที่ A และ
B (โดยที่ B มี NULL) เพื่อรับแผนที่ C ที่ผู้ใช้สามารถใช้สิ่งปลูกสร้าง เช่น:
C = A + ถ้า(เป็นค่าว่าง(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) = อย่างอื่น (เช่น x ไม่ใช่ NULL หรือ 0)
สำหรับรูปแบบอาร์กิวเมนต์ทั้งสาม:
if(x,a,b) = NULL ถ้า x เป็น NULL
if(x,a,b) = b ถ้า x = 0
if(x,a,b) = อย่างอื่น (เช่น 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 ถ้า *ใดๆ* ของอาร์กิวเมนต์
เป็นโมฆะ
ฟังก์ชัน if(), isnull() และ eval() เป็นข้อยกเว้น
ฟังก์ชัน isnull() คืนค่า 1 หากอาร์กิวเมนต์เป็น NULL และ 0 มิฉะนั้น หากผู้ใช้
ต้องการตรงกันข้าม ! ต้องใช้ตัวดำเนินการ เช่น "!isnull(x)"
if() ทุกรูปแบบคืนค่า NULL ถ้าอาร์กิวเมนต์แรกเป็น NULL รูปแบบอาร์กิวเมนต์ 2, 3 และ 4
ของ if() คืนค่า NULL หากอาร์กิวเมนต์ "selected" เป็น 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" ก็เช่นกัน
ไม่ทราบ; หากทั้งคู่มีค่าที่ไม่รู้จัก ผู้ใช้จะไม่รู้ว่าทั้งคู่มีค่าหรือไม่
มีค่าเท่ากัน
หมายเหตุ
การใช้ รถในตำนานจากเกม คำสั่ง เส้น
ต้องใช้ความระมัดระวังเป็นพิเศษหากมีการกำหนดนิพจน์ในบรรทัดคำสั่ง ตัวละครบางตัว
มีความหมายพิเศษต่อเชลล์ UNIX ซึ่งรวมถึง:
* ( ) > & |
ขอแนะนำให้ใส่เครื่องหมายคำพูดเดี่ยวรอบนิพจน์ เช่น:
'ผลลัพธ์ = ระดับความสูง * 2'
หากไม่มีเครื่องหมายคำพูด * ซึ่งมีความหมายพิเศษกับเชลล์ UNIX จะมีการเปลี่ยนแปลง
และ 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 < file
หรือ:
r.mapcalc <
ฟู = 1
EOF
แต่ถ้าคุณไม่ต้องการความเข้ากันได้กับ GRASS GIS เวอร์ชันก่อนหน้า ให้ใช้ file= อย่างชัดเจน
ตามที่ระบุไว้ข้างต้น.
เมื่อชื่อแผนที่มีอักษรตัวพิมพ์ใหญ่หรือจุดที่ไม่สามารถระบุได้
ชื่อตัวเลือกโมดูล the r.mapcalc คำสั่งจะใช้ได้โดยไม่มีเครื่องหมายอัญประกาศ:
r.mapcalc ระดับความสูง_A=1
r.mapcalc ระดับความสูง.1=1
อย่างไรก็ตาม ไวยากรณ์นี้ไม่แนะนำให้ใช้เป็นเครื่องหมายคำพูดตามที่ระบุไว้ข้างต้นว่าปลอดภัยกว่า การใช้คำพูด
เป็นทั้งความเข้ากันได้ย้อนหลังและใช้ได้ในอนาคต
อินเตอร์แอคที อินพุต in คำสั่ง เส้น
สำหรับสูตรที่ผู้ใช้ป้อนจากอินพุตมาตรฐาน (แทนที่จะเป็นจากบรรทัดคำสั่ง)
ขณะนี้มีคุณลักษณะความต่อเนื่องของบรรทัด หากผู้ใช้เพิ่มแบ็กสแลชต่อท้าย an
สายอินพุต, r.mapcalc ถือว่าสูตรที่ผู้ใช้ป้อนต่อไปยัง
บรรทัดอินพุตถัดไป ไม่จำกัดจำนวนสายอินพุตที่เป็นไปได้หรือถึง
ความยาวของสูตร
ถ้า r.mapcalc สูตรที่ผู้ใช้กรอกยาวมาก ชื่อแผนที่จะมีเท่านั้น
บางส่วน แต่ส่วนใหญ่ (ถ้าไม่ใช่ทั้งหมด) ของสูตรจะอยู่ในไฟล์ประวัติสำหรับ
ผล แผนที่.
เมื่อผู้ใช้ป้อนข้อมูลไปที่ r.mapcalc ไม่โต้ตอบบนบรรทัดคำสั่งโปรแกรม
จะไม่เตือนผู้ใช้ว่าอย่าเขียนทับเลเยอร์แผนที่ที่มีอยู่ ผู้ใช้จึงควรรับประทาน
ดูแลกำหนดโปรแกรมเอาท์พุตชื่อแผนที่แรสเตอร์ที่ยังไม่มีอยู่ในปัจจุบัน
แมปเซ็ต
Raster หน้ากาก การจัดการ
r.mapcalc เป็นไปตามพฤติกรรมทั่วไปของ GRASS ในการจัดการ MASK แรสเตอร์ ดังนั้น MASK จึงเป็นเท่านั้น
ใช้เมื่ออ่านแผนที่แรสเตอร์ GRASS ที่มีอยู่ นี่หมายความว่า ตัวอย่างเช่น
คำสั่ง:
r.mapcalc "elevation_exaggerated = ระดับความสูง * 3"
สร้างแผนที่โดยคำนึงถึงพิกเซลที่ปิดบังหาก MASK ทำงานอยู่
อย่างไรก็ตาม เมื่อสร้างแผนที่ที่ไม่ยึดตามแผนที่ใดๆ เช่น แผนที่จากค่าคงที่:
r.mapcalc "base_height = 200.0"
แผนที่แรสเตอร์ที่สร้างขึ้นถูกจำกัดโดยพื้นที่การคำนวณเท่านั้น แต่ไม่ได้รับผลกระทบจาก
มาสก์ที่ใช้งานอยู่ เป็นที่คาดหวังเพราะดังที่กล่าวไว้ข้างต้น MASK ใช้เฉพาะเมื่อ
การอ่านไม่ใช่เมื่อเขียนแผนที่แรสเตอร์
หากในกรณีนี้ควรใช้ MASK คำสั่ง if() รวมถึง MASK
ควรใช้เช่น:
r.mapcalc "base_height = if(MASK, 200.0, null())"
เมื่อทดสอบนิพจน์ที่เกี่ยวข้องกับ MASK โปรดทราบว่าเมื่อ MASK ทำงานอยู่ คุณจะไม่เห็น
ข้อมูลในพื้นที่ปิดบังแม้ว่าจะไม่ใช่ NULL ดู ร.มาส์ก เพื่อดูรายละเอียด
ประเมิน ฟังก์ชัน
หากผลลัพธ์ของการคำนวณควรเป็นเพียงแผนที่เดียว แต่นิพจน์นั้นซับซ้อนมาก
ดีกว่าที่จะแยกออกเป็นหลายนิพจน์สามารถใช้ฟังก์ชัน eval ได้:
r.mapcalc << EOF
eval(elev_200 = ระดับความสูง - 200, \
elev_5 = 5 * ระดับความสูง \
elev_p = ธาร (elev_5, 2))
Elev_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.ข้อมูล.
หากคุณต้องการให้คนอื่นตรวจสอบผลลัพธ์ของคุณได้ ควรใช้เครื่องหมาย
เมล็ดพันธุ์ ตัวเลือกในการจัดหาเมล็ดพันธุ์ที่ระบุไว้ในสคริปต์หรือสร้างจาก
กระบวนการกำหนดเช่นตัวสร้างตัวเลขสุ่มหลอกให้เมล็ดที่ชัดเจน
โปรดทราบว่าฟังก์ชัน rand() จะสร้างข้อผิดพลาดร้ายแรงหากไม่มี เมล็ดพันธุ์ ตัวเลือกหรือ
-s ธงจะได้รับ
ตัวอย่าง
เพื่อคำนวณค่าเฉลี่ยของเลเยอร์แผนที่แรสเตอร์สองชั้น a และ b:
ave = (ก + ข)/2
ในการสร้างค่าเฉลี่ยถ่วงน้ำหนัก:
เฉลี่ย = (5*a + 3*b)/8.0
เพื่อสร้างการแสดงไบนารีของเลเยอร์แผนที่แรสเตอร์ a เพื่อให้หมวด 0 ยังคงเป็น 0
และหมวดหมู่อื่นๆ ทั้งหมดกลายเป็น 1:
หน้ากาก = != 0
นอกจากนี้ยังสามารถทำได้โดย:
หน้ากาก = ถ้า (ก)
เพื่อปิดบังเลเยอร์แผนที่แรสเตอร์ b โดยเลเยอร์แผนที่แรสเตอร์ a:
ผลลัพธ์ = ถ้า (a,b)
ในการเปลี่ยนค่าทั้งหมดที่ต่ำกว่า 5 เป็น NULL:
newmap = if(map<5, null(), 5)
ฟังก์ชัน graph() อนุญาตให้ผู้ใช้ระบุการแปลง xy โดยใช้คู่ของ x,y
พิกัด. ในบางสถานการณ์การเปลี่ยนแปลงจากค่าหนึ่งไปอีกค่าหนึ่งนั้นไม่ง่าย
กำหนดทางคณิตศาสตร์ แต่สามารถแสดงด้วยกราฟ 2 มิติ แล้วจึงแสดงเป็นเส้นตรง
สอดแทรก ฟังก์ชัน graph() ให้โอกาสในการทำสิ่งนี้ให้สำเร็จ แกน x
ค่าถูกจัดเตรียมให้กับฟังก์ชันกราฟพร้อมกับกราฟที่เกี่ยวข้องซึ่งแสดงโดยa
อนุกรมของคู่ x,y ค่า x ต้องเพิ่มขึ้นอย่างซ้ำซากจำเจ (แต่ละค่ามากกว่า or
เท่ากับครั้งก่อน) ฟังก์ชันกราฟจะสอดแทรกเป็นเส้นตรงระหว่างคู่ต่างๆ ใดๆ x
ค่าที่ต่ำกว่าค่า x ต่ำสุด (เช่นก่อน) จะมีค่า y ที่เกี่ยวข้องส่งคืน
ค่า x ใดๆ ที่สูงกว่าค่าสุดท้ายจะคืนค่า y ที่เกี่ยวข้องในทำนองเดียวกัน
พิจารณาคำขอ:
แผนที่ใหม่ = กราฟ (แผนที่, 1,10, 2,25, 3,50)
ค่า X (แผนที่) ที่ให้มาและค่า y (แผนที่ใหม่) ที่ส่งคืน:
0, 10
1, 10
1.5, 17.5
2.9, 47.5
4, 50
100, 50
ที่รู้จักกัน ประเด็น
บรรทัดต่อเนื่องต้องลงท้ายด้วย \ และ have ไม่ พื้นที่สีขาวต่อท้าย (ช่องว่างหรือแท็บ) ถ้า
ผู้ใช้เว้นช่องว่างที่ท้ายบรรทัดต่อเนื่อง ข้อความแสดงข้อผิดพลาด
ที่ผลิตโดย r.mapcalc จะไม่มีความหมายและสมการจะไม่ทำงานเหมือนผู้ใช้
ตั้งใจ. นี่เป็นสิ่งสำคัญอย่างยิ่งสำหรับฟังก์ชัน eval()
ปัจจุบันไม่มีกลไกแสดงความคิดเห็นใน r.mapcalc. อาจเพิ่มความสามารถที่
จะทำให้ทั้งบรรทัดถูกละเว้นเมื่อผู้ใช้ใส่ # ที่จุดเริ่มต้นของa
เส้นราวกับว่ามันไม่ได้อยู่จะทำเคล็ดลับ
ฟังก์ชันควรกำหนดให้ผู้ใช้พิมพ์ "end" หรือ "exit" แทนการเว้นว่าง
ไลน์. สิ่งนี้จะทำให้การแยกสคริปต์หลายตัวแยกจากกันด้วยช่องว่าง
r.mapcalc ไม่พิมพ์คำเตือนในกรณีที่ดำเนินการกับเซลล์ NULL เหลือไว้ให้
ผู้ใช้เพื่อใช้ฟังก์ชัน isnull()
ใช้ r.mapcalcgrass ออนไลน์โดยใช้บริการ onworks.net