ค้นหาข้อมูลในบล็อก (Search in this blog)

Saturday, July 30, 2011

แปลงระบบพิกัด แบบหลายจุด ด้วย cs2cs

วิธีการนี้ ผมได้รับการแนะนำจาก พี่ วิโรจน์ (เทพองค์หนึ่งในงาน GeoInformatics ที่ใช้ Free.Open Source Software - FOSS) เมื่อนานมาแล้ว วันนี้ขอบันทึกไว้กันลืม ดังนี้ครับ
CS2CS นั้นเป็นโปรแกรมประยุกต์ตัวหนึ่งสำหรับการแปลงระบบพิกัดของค่าพิกัดแบบจุด (มีเฉพาะค่าพิกัดของแต่ละจุดเท่านั้น) นั่นหมายความว่า ข้อมูลต้องอยู่ในรูป คู่ของค่าพิกัด เช่น 525000 1800000 เป็นต้น
*** โปรแกรมประยุกต์นี้จะมีอยู่แล้วใน GDAL หรือที่ถูกรวมไว้แล้วใน FWTOOLS ครับ ดังนั้นไม่จำเป็นต้องดาวน์โหลดเพิ่มเติมครับ***
เรามาดูตัวอย่างกันเลยนะครับ ตัวอย่างผมมีข้อมูลแบบอักขระ (Text file) ที่เมื่อเปิดด้วย Text Editor ทั่วไป เช่น Notepad หรือ Notepad++ แล้วจะมีหน้าตาดังนี้ ชื่อไฟล์ EN.txt












ตัวอย่างทางเลือก (Option) ที่น่าสนใจ
-E ใช้ในกรณีที่ต้องการนำค่าจากไฟล์นต้นฉบับหรือไฟล์นำเข้า (Input) ไปใส่ไว้ในไฟล์ผลลัพธ์ (Output) ด้วย
-f ใช้สำหรับกำหนดรูปแบบไฟล์ผลลัพธ์ เช่น ความละเอียด(ระดับจุดทศนิยม)ของผลลัพธ์ที่ต้องการ ตัวอย่างการใช้งานคือ -f "%.9f" จะได้ผลลัพธ์ทีี่มีจุดทศนิยมจำนวน 9 ตำแหน่ง เป็นต้น
-r ใช้สำหรับสลับค่าพิกัดขอไฟล์ต้นฉบับ จาก XY เป็น YX หรือ Lat, Long ให้เป็น Long, Lat
-s ใช้สำหรับสลับค่าพิกัดขอไฟล์ผลลัพธ์ จาก XY เป็น YX หรือ Lat, Long ให้เป็น Long, Lat
**** ตรงนี้น่าสนใจครับ เพื่อไม่ให้เกิดความสับสน ผมแนะนำทุกท่านเตรียมข้อมูลให้อยู่ในแบบ (Easting, Northing) สำหรับระบบพิกัดกริด UTM โดยไม่จำเป็นต้องระบุทางเลือก -r หรือ -s
ส่วนตัวอย่างการใช้งานมีดังนี้

>>>cs2cs -E -f "%.9f" +init=epsg:32647 +to +init=epsg:4326 EN.txt

ผลลัพธ์ที่ได้มีดังภาพ






หรือถ้าต้องการแปลงผลลัพธ์ให้เป็นไฟล์อักขระ (Text file) ใหม่อีกไฟล์หนึ่งสามารถทำได้ดังนี้ครับ

>>>cs2cs -E -f "%.9f" +init=epsg:32647 +to +init=epsg:4326 EN.txt > LongLat.txt

ส่วนการแปลงค่าระบบภูมิศาสตร์ให้เป็นระบบพิกัดกริด UTM นั้นแนะนำให้ใช้รูปแบบ (Long, Lat) ครับ

เพื่อไม่ให้สับสนและอาจมีการระบุรูปแบบผิด ผมขอสรุปและแนะนำอีกที ดังนี้
ในกรณีที่ไม่ใช้ทางเลือก -r หรือ -s นั้น
  • การแปลง UTM2Geog ถ้ารูปแบบไฟล์ต้นฉบับคือ (Easting, Northing) จะได้ผลลัพธ์คือรูปแบบ (Long, Lat)
  • ส่วนการแปลง Geog2UTM ถ้ารูปแบบไฟล์ต้นฉบับคือ (Long, Lat) จะได้ผลลัพธ์คือรูปแบบ (Easting, Northing)

Wednesday, July 27, 2011

ความแตกต่างระหว่าง Objective และ Subjective

ไปอ่านเจอคำศัพท์ที่น่าสนใจ 2 คำคือ Objective และ Subjective ในบทความวิชาการและตำราหลายๆเล่ม แต่ผมก็ยังแยกความแตกต่างไม่ได้อย่างชัดเจนว่า สองคำนี้มีความแตกต่างกันอย่างไร วันนี้เลยต้องขอบันทึกความหมาย (ไม่ใช่การแปล) ที่พอจะสรุปได้จากการค้นคว้าดังนี้

Objective แปลโดย ศัพท์บัญญัติ ราชบัณฑิตยสถาน นั้น มีหลายความหมายได้แก่ เชิงวัตถุวิสัย, วัตถุประสงค์ หรือ ปรนัย ส่วน
Subjective นั้นแปลว่า ความรู้สึกแห่งตน, เชิงจิตวิสัย หรือ อัตนัย

แค่เพียงความหมายก็น่าจะพอสรุปได้ว่า Subjective นั้นต้องเกี่ยวข้องกับความเป็นตัวตนหรือส่วนบุคคล (อัต-) นั่นหมายถึงบริบทของคำนี้ ไม่อาจสรุปหรือประเมินได้อย่างเที่ยงตรง (ไม่เสถียร) หรือได้คำตอบเหมือนเดิมทุกครั้งในทุกๆการวัด เนื่องจากขึ้นอยู่กับสถานการณ์ ความรู้ ความชำนาญหรือเกณฑ์ของแต่ละบุคคลที่ใช้ในการวัด ดังเช่น ตัวอย่างความหมายของ Objective data และ Subjective data ที่มักพบเสมอในเรื่อง การตัดสินใจแบบหลายเกณฑ์ (Multi-Criteria Decision)

ดังนั้น ผมอาจสรุปได้ว่า Objective นั้นมีความเป็นสากล จริงแท้ เที่ยงตรง มากกว่า Subjective ซึ่งเกี่ยวข้องกับความเป็นส่วนบุคคล ครับ

ปล. การแปลความหมายจำเป็นต้องคำนึงถึงบริบทของคำศัพท์ด้วยเสมอนะครับ

Tuesday, June 21, 2011

ความแตกต่างระหว่าง Numerical methods และ Numerical Analysis

เป็นคำถามคาใจมานานมาก แต่ยังไม่ได้ค้นหาคำตอบอย่างจริงๆจังสักที ว่า "ความแตกต่างระหว่าง Numerical methods และ Numerical Analysis" คืออะไร วันนี้นึกครึ้มอะไรไม่รู้เลยเข้าห้องสมุดหาตำรามาเฉลยคำถามที่สงสัยมานาน...
จากการอ่านหนังสือ An Introduction to Numerical Methods and Analysis โดย James F. Epperson ผู้เขียนให้คำอธิบาย ความแตกต่าง คือ วิธีการเชิงเลข (Numerical methods) จะให้ความสำคัญการนำอัลกอริทึมไปทำให้เกิดผล (Implementation of algorithms) ซึ่งบางทีก็อาศัยทฤษฏีทางคณิตศาสตร์ในการอธิบายวิธีการทำงาน ส่วน การวิเคราะห์เชิงเลข (Numerical analysis) นั้นจะให้ความสำคัญกับทฤษฏีทางคณิตศาสตร์ (Mathematical theory) ผู้เขียนคิดว่า น่าจะดีกว่า ถ้าเราศึกษาทั้งสองอย่างไปพร้อมๆกัน
ซึ่งผมก็เห็นด้วยอย่างยิ่ง เพราะ การนำวิธีการและการวิเคราะห์เชิงเลขไปทำให้เกิดผล (Implementation) ในงานภูมิสารสนเทศ นั้น นอกจากความต้องการ ความรู้ ที่ใช้ในการแก้ไขปัญหาแล้ว ยังต้องอาศัย ความเข้าใจ เกี่ยวกับเทคนิคหรือวิธีการที่นำมาใช้ด้วย เนื่องจากปัญหาบางอย่าง ความรู้ เพียงอย่างเดียวไม่สามารถแก้ไขได้ครับ ต้องอาศัย ความเข้าใจ ด้วย....
ตัวอย่าง นะครับ
ทำไมเราต้องรับสัญญาณดาวเทียม อย่างน้อย 3 ดวง เพื่อหาตำแหน่งของเรา (ด้วยเครื่องรับสัญญาณ GPS) หรือ ทำไมจุดควบคุมสำหรับการอ้างอิงตำแหน่งโลก ถึงไม่สามารถวางตัวอยู่บนแนวเส้นตรงเดียวกัน เป็นต้น

Monday, May 30, 2011

การกรองความถี่สูงและความถี่ต่ำ (Hi & Low pass filtering)

สงสัยอายุที่เพิ่มขึ้นจะมีส่วนทำให้ความจำลดลง เพราะลืมทุกทีเมื่อต้องมาทำงานกับตัวกรอง (Filter) ทั้งสองแบบนี้ วันนี้เลยขอบันทึกความเข้าใจไว้กันลืม!!!

การกรองความถี่สูง (Hi pass filter)
เป็นการกรองสัญญานที่ยอมให้ข้อมูลความถี่สูงผ่านได้ ตัวอย่างการใช้งานคือ การเพิ่มความคมชัด (Sharpening)

การกรองความถี่ต่ำ (Low pass filter)
เป็นการกรองสัญญานที่ยอมให้ข้อมูลความถี่ต่ำผ่านได้ ตัวอย่างการใช้งานคือ การทำเบลอ (Blurring)

ส่วนรายละเอียดของการใช้ตัวกรองในการทำ PanSharpening ไว้มีโอกาสจะเข้ามาเพิ่มภายหลัง

Wednesday, March 23, 2011

gdal_merge ใน FWtools 2.4.7 ใช้งานไม่ได้

ผมลองใช้ gdal_merge ใน FWtools เวอร์ชัน 2.4.7 แล้วปรากฏว่า ไม่สามารถทำงานได้อย่างถูกต้อง กล่าวคือ โปรแกรมจะต่อชนภาพให้ แต่ภาพนั้นไม่มีค่า Digital Number (DN) วิธีแก้ไขง่ายที่สุดที่คิดได้คือ กลับไปใช้งานเวอร์ชัน 2.4.6 ปรากฏว่า Work!!! ใช้งานได้
จังอยากแนะนำทุกท่านที่อาจเจอปัญหาเดียวกับผม...

Thursday, February 24, 2011

PostGIS: สร้าางตารางข้อมูลใหม่จาก ข้อมูลที่สืบค้น

บางครั้งเราต้องการสร้างตารางข้อมูลใหม่ (ชั้นข้อมูลเชิงตำแหน่งใหม่) ในฐานข้อมูลเชิงตำแหน่ง (Spatial Database) ตัวอย่างเช่น ชั้นข้อมูลเส้นทางคมนาคมถนน ซึ่งในฐานข้อมูลนั้นมีข้อมูลอรรถาธิบาย (Attribute) มากมายเกินความจำเป็น อาทิ ชื่อถนน ความกว้างช่องจราจร ความยาวของส่วนย่อย ประเภทพื้นผิว สภาพถนน โดยที่เราต้องการชั้นข้อมูลใหม่ที่มีเพียงแค่ชื่อถนน (road name: rdname) และพิกัดของแต่ละจุดเท่านั้น (geometry: the_geom) เราจะทำอย่างไร???
หลังจากศึกษาในคู่มือของ Postgis พบว่าโปรแกรมได้เตรียมฟังก์ชัน create table as สำหรับการตอบวัตถุประสงค์ในครั้งนี้ เรามาดูตัวอย่างการใช้งานกันเลยนะครับ

SQL syntax: create table table_name as select *** from *** where ***

ตัวอย่าง
create table road_name as
select rdname, the_geom from road

Wednesday, February 9, 2011

แก้สมการ Overdetermined เพียงกระพริบตา (ปี๊บๆ)

Ex: จากตัวอย่างหนังสือเรื่อง GIS & MCDA ของ จาเซ็ค หน้าที่ 211 เราต้องการหาค่าแลมดา (Lamda: L) โดยมีสมการเงื่อนไขดังนี้
L1 = 0.5(L2) + 0.3(L3)
L2 = 0.7(L1) + 0.7(L2)
L1 + L2 + L3 = 1
ปรากฏว่าในหนังสือได้คำตอบคือ L1 = 0.4, L2 = 0.3 และ L3 = 0.3 จะพบว่าค่าที่ได้นั้นใช้ได้ในบางเงื่อนไขเท่านั้น (คำตอบมีได้หลายคำตอบหรือคำตอบนั้นไม่ใช่ Unique solution) ทำให้ผลลัพธ์อาจผิดพลาดได้ ........... แล้วเราจะทำอย่างไีีร
ก่อนอื่นเรามาดูเงื่อนไขหรือข้อมูลที่เรามีก่อนดังนี้ครับ
1. เรามีตัวไม่ทราบค่า (Unknown) 3 ตัวคือค่าแลมดา L1, L2, L3
2. เรามีสมการอย่างน้่อย 3 สมการ (ตามตัวอย่างในหนังสือ)
3. จากการศึกษาพบว่า ในหนังสือนั้นขาดการนำเอาเงื่อนไขบางอย่างมาสร้างสมการคือ L3 = 0.3(L1) + 0.5(L2)
4. เมื่อเรามีสมการเพิ่มขึ้นจะพบว่า เงื่อนไขของระบบสมการนี้จะเข้าสู่เงื่อนไขของ Overdetermined system (จำนวนสมการมากกว่าจำนวนตัวไม่ทราบค่า)
คราวนี้เรามาดูวิธีแก้ระบบสมการเชิงเส้นที่ Overdetermined ด้วยเมทริกซ์ดังตัวอย่างดังนี้

Condition Equation:
L1 = 0.5(L2) + 0.3(L3)
L2 = 0.7(L1) + 0.7(L2)
L3 = 0.3(L1) + 0.5(L2)
L1 + L2 + L3 = 1
A = [-1 .5 .3; .7 -1 .7; .3 .5 -1; 1 1 1]
X = [a; b; c]
L = [0; 0; 0; 1]

V = AX+L
N = transpose (A)*A
U = transpose (A)*L
Normal Equation:
transpose (X)* transpose (N) + transpose (U) = 0
หรือ N*X + U = 0 หรือ N*X = -U
X = - inv(N) * U

ส่วนวิธีการคำนวณด้วย Matlab มีดังนี้
a = [-1 .5 .3; .7 -1 .7; .3 .5 -1; 1 1 1]
l = [0; 0; 0; 1]
x = a\l
คำตอบที่ได้คือ
x = [0.2941; 0.4118; 0.2941] หรือ
L1 = 0.2941
L2 = 0.4118
L3 = 0.2941

Saturday, January 29, 2011

ตัวอย่างการใช้ While ด้วย Python

อ่านประวัติของ Archimedes อยู่ดีๆ ดันโยงไปที่ โยฮันน์ คาร์ล ฟรีดริช เกาส์ ซะงั้น เลยอดไม่ได้ที่จะทึ่งถึงความอัจฉริยะของ เกาส์ เมื่อมีอายุได้เพียง 7 ขวบ เหตุการณ์เกิดขึ้นเมื่อคุณครูได้สั่งให้นักเรียนบวกเลขตั้งแต่ 1 ถึง 100 ชั่่วขณะเพียงแค่หันหลัง เด็กชายเกาส์ก็ตอบขึ้นมาว่า 5,050 เมื่อถูกถามว่าได้คำตอบนั้นมาได้อย่างไร เด็กชายเกาส์เขียนอธิบายดังนี้

100+99+98+...+1 = 101+101+101+...+101 = 101×50 = 5050 ดังนั้นคำตอบคือ 5050

เป็นไงละครับ....ไม่ใ่ช่อัจริยะคิดไม่ได้นะเนี่ย
อ้างอิงจาก http://th.wikipedia.org/wiki/คาร์ล_ฟรีดริช_เกาส์

เรามาทดลองดูว่าการบวกเลขตั้งแต่ 1-100 นั้นหากเขียนด้วยภาษา Python โดยใช้ While loop นั้นต้องเขียนอย่างไร
############################
i = 1
total = 0
while (i<=100):
total = total + i;
i = i + 1;
print total
############################

Wednesday, January 19, 2011

Pansharpening: Brovey transformation

การแปลงแบบ Brovey นั้นจะอาศัยค่าความสว่าง (ฺBrightness Value - BV) ของข้อมูลภาพแบบหลายช่วงคลื่น (Multispectral image) และค่าความสว่างของข้อมูลภาพแบบช่วงคลื่นเดียว (Panchromatic image) มาทำการคำนวณหาค่าความสว่างของข้อมูลภาพที่ผ่านการหลอมรวม (Fused image) ดังภาพที่ 1 ดังนี้
ภาพที่ 1 สมการการแปลงแบบ Brovey





Wednesday, January 5, 2011

Factror/Variable/Parameter

ความแตกต่างของ Factror/Variable/Parameter (ปัจจัย/ตัวแปร/พารามิเตอร์) จากการค้นคว้าเบื้องต้นพบว่า ทั้ง 3 คำ นี้มีความเกี่ยวเนื่องกันอยู่โดยขอยกตัวอย่างเพื่อความเข้าใจดังนี้
โจทย์คือ ผมต้องการหาพื้นที่เหมาะสมสำหรับการเพาะปลูกข้าว
ปัจจัย (Factor) ที่ผมใช้พิจารณาสำหรับการหาพื้นที่เหมาะสมคือ ข้อมูลดิน
ตัวแปร (Variable) ที่ผมสนใจคือ แร่ธาตุในดิน เช่น ไนโตรเจน (N) โปแตสเซียม (P) และฟอสฟอรัส (K)
พารามิเตอร์ (Parameter) คือ ปริมาณของแร่ในดิน