วันจันทร์ที่ 21 กุมภาพันธ์ พ.ศ. 2554

ตัวอย่าง PL/SQL แปลงพื้นที่ให้เป็น ไร่-งาน-วา

มาหัดเขียน Procudure Language สำหรับไว้แปลงพื้นที่ จากมาตราเมตริก ตารางเมตร ให้แสดงผลเป็น มาตราไทย
อย่างง่าย ผู้ใช้ป้อนค่าพื้นที่ใน หน่วยไร่ เช่น ISO/SF SQL ST_Area( the_geom ) สำหรับ geometry object ที่มี SRID ยูทีเอ็ม โซน 47/47 ที่มีรหัส epsg:32647, 32648 หรือจะใช้ geography object ก็สดวกมาก จัดเป็นเป็นพิกัดภูมิศาสตร์ (ยีออเดติกส์) แต่ให้ผลพื้นที่จาก ST_Area ( geography_type) หน่วยเป็นตารางเมตร โดยตรง

---------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION "PS_Area_Thai"(area float) RETURNS text AS $$
DECLARE
rai int;
ngan int;
wa float;
str_area text;
BEGIN
-- !!!For sake of floating point round-up --
-- !!!THIS PROGRAM IS NOT PERFECT! --
-- !!! THIS IS NOT A PRODUCTION CODE --
rai := floor( area/1600. );
ngan := floor( area/400. - 4.*(rai::float) );
wa := (area/4.) - (rai::float)*400. - (ngan::float)*100.;
RAISE NOTICE 'area % ->rai % ngan % wa %', area, rai,ngan,wa;
str_area := to_char(rai,'999999999') || '-' || to_char(ngan,'9') || '-' || to_char(wa::real,'999D9') ;
return str_area;
END;
$$ LANGUAGE plpgsql;
---------------------------------------------------------------------------

ตัวโครงสร้างโปรแกรมโอเคนะครับ แต่ให้ระวังเรื่องการปัดเศษ เช่น ท่านอาจพบกรณี
ตัวอย่างเช่น พื้นที่ 1.99999969 ไร่
เมื่อคำนวนเป็น ไร่ งาน วา จะได้ 1 ไร่ 3 งาน 99.99987654 ตารางวา
แต่หากต้องการให้ หน่วยวา แสดงผลทศนิยมสัก 1 ตำแหน่ง
อัลกอริธึมในฟังก์ชันข้างต้นจะแสดง "1-3-100.0" หรือ 1 ไร่ 3 งาน 100.0 ตร.ว
ซึ่งคงนำไปแสดงผลใช้งานยังไม่ได้ มนุษย์ก็จะโทษว่าคอมพิวเตอร์ทำงานผิดแน่ๆ
ซึ่งจะต้องแก้ใขต่อไป ไว้จะเล่าให้ฟังต่อครับ

ไม่มีความคิดเห็น: