แปลงเลขอารบิกเป็นเลขไทยใน ArcGIS

เผยแพร่เมื่อ:

ปรับปรุง/แก้ไขล่าสุดเมื่อ:

แปลงเลขอารบิกเป็นเลขไทยใน ArcGIS อาจจะต้องเขียนโค้ดเล็กน้อย แต่ก็ไม่ได้เป็นโค้ดที่ยุ่งยากอะไร เสียเวลาแป๊บเดียว (copy ไปวางเลยก็ได้)

โจทย์สำหรับวันนี้

ในฟิลด์ “LAND_NO” มี data type เป็น numerics หรือตัวเลข เราต้องการสร้างฟิลด์ใหม่ เป็นฟิลด์ “LAND_TH” มีค่าเหมือนฟิลด์ “LAND_NO” แต่ว่าเป็นเลขไทย โดยฟิลด์ “LAND_TH” ตั้ง data type เป็น text 

วัตถุประสงค์ก็คือเวลาแสดง label จะให้เห็นเป็นเลขไทย

เรื่องนี้ บางท่านที่ติดตามบล็อกนี้มาตลอด จะรู้ว่า เคยพูดเสมอว่า เวลาทำงานกับคอมพิวเตอร์ ให้หยุดความรักชาติไทยไว้ชั่วขณะ เลขไทย ตัวอักษรไทย เลี่ยงได้ให้เลี่ยง เลี่ยงไม่ได้ให้ใช้เท่าที่จำเป็น

ในเวลานี้ เกิดความจำเป็นว่า เวลาทำแผนที่ ซึ่งมีพื้นฐานมาจากแผนที่ของกรมที่ดิน มีความจำเป็นต้องแสดงเลขที่ดินเป็นเลขไทย เพื่อให้เห็นชัดเจนว่าเลขนี้ คือเลขที่ดิน ของแปลงที่ดินนั้น

 ซึ่งบางท่านแก้ปัญหาง่าย ๆ ด้วยการตั้งค่าฟอนต์เป็น TH Sarabun IT๙ ซึ่ง DataRevol ไม่ชอบเจ้าฟอนต์ตัวนี้เลย ด้วยเหตุดังที่เคยเขียนไว้นานแล้ว

แต่เอาเถอะ ใครจะแก้ไขปัญหาเฉพาะหน้ากันอย่างไรก็ตามแต่ โดยส่วนตัวขอใช้วิธีแก้ไขด้วยวิธีธรรมดาสามัญชีวิตนี่แหละ

Calculate Field 

ใน ArcGIS Pro จะมีเครื่องมือสามัญประจำบ้านอย่างหนึ่งก็คือ Calculate Field สำหรับใช้คำนวณอะไรต่าง ๆ นานา นอกจากสูตรการคำนวณที่ทำสำเร็จมาให้ใช้กันง่ายดายแล้ว ยังเขียนสูตรเพิ่มเติมเข้าไปเองได้ด้วย ซึ่งจะมีสอง method ให้เลือกคือ arcade กับ python ซึ่งในครั้งนี้ เราจะเลือก python เพราะ DataRevol คุ้นเคยมากกว่า

ขั้นตอน

ใน Table of Content ให้ คลิกขวาที่เลเยอร์ที่ต้องการ และเลือก “Attribute Table”

ใน “Attribute Table” ให้เลือกช่อง “LAND_TH” คลิกขวา เลือก Calculate Field หรืออาจจะจะไปที่ส่วนหัวของด้านบนหัวฟิลด์ของ “Attribute Table” ตรงไหนก็ได้

Calculate Field
ตัวอย่างนี้ เปิด Calculate Field และสร้างฟิลด์ใหม่ชื่อ “LAND_TH’

หรือ ที่เมนูด้านบน ตรงแท็บ “Data” แล้วเลือก Calculate Field ก็ได้

ใน Field Calculator สิ่งที่ต้องใส่ก็คือ

Input Table: คลิกเลือกเลยอร์ที่ต้องการตรงนี้ ตามปกติแล้ว ควรแสดงชื่อของเลเยอร์ที่แอ็กทีฟอยู่ หรือถ้าคลิกขวาเลือกเลเยอร์จาก Table of Content จะขึ้นมาในช่องนี้โดยอัตโนมัติ

Field Name: ชื่อฟิลด์ที่ต้องการ ปกติเราคลิกขวาจากหัวฟิลด์ไหน จะขึ้นฟิลด์นั้นขึ้นมา แต่ถ้าไม่มี อย่างในรูปตัวอย่าง เราพิมพ์ใส่เพิ่ม “LAND_TH”  เพื่อสร้างใหม่ได้เลย

Field Type: จะมีเมื่อเราใส่ชื่อฟิลด์ที่ไม่มีในแอตทริบิวต์ปัจจุบัน กำหนดประเภทของข้อมูลได้ตรงนี้

Expree Type: ตรงนี้เลือก Python หรือ Arcade หรือ VB Script ก็ได้ แต่ในตอนนี้จะเลือก python

Expression: นี่คือช่องสำหรับใส่สูตร  เพื่อแปลงเลขอารบิกเป็นเลขไทย ซึ่งจะอธิบายต่อไป

แนวคิด

ตัวเลข มีแค่ 0 ถึง 9 เราแค่ต้องเอา ๐ ไปแทน 0 เอา ๑ ไปแทน 1 ทำแบบนี้ไปเรื่อย ๆ

แนวคิดก็ประมาณนี้เอง ง่าย ๆ แบบเดียวกับที่ทำในเวิร์ดหรือเอ็กเซล

สิ่งที่ต้องทำก็แค่ ดึงข้อมูลตัวเลขอารบิก ไปจับกับเลขไทย แล้วนำไปแทนที่ หรือ replace ง่าย ๆ นี่แหละ เนื่องจากตัวเลขมีเพียงแค่ 0-9 เราก็ทำเป็นดิกชันนารีตัวเลข แล้วก็เอาไปแทนที่กันตามลำดับ

ซึ่งต้องบอกก่อนว่า อันนี้ไม่ได้คิดเอง ดูมาจากวิดีโอสอนไพธอนทำแบบนี้มาก่อน คลิปสอนภาษา Python โดยชมรม Clique

ซึ่ง ถึงจะนำมาใช้ตรง ๆ ไม่ได้ แต่ก็นำไปประยุกต์แทนที่สำหรับการใช้งานจริงได้

มาดูกันว่า DataRevol.com ทำออกมาอย่างไร

แปลงเลขอารบิกเป็นไทย ใน ArcGIS

สิ่งแรกที่ทำก็คือ สร้างลิสต์สำหรับเลขอารบิก กับ เลขไทย ขึ้นมาก่อน

arabic_numerals = [‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’]

thai_numerals = [‘๐’, ‘๑’, ‘๒’, ‘๓’, ‘๔’, ‘๕’, ‘๖’, ‘๗’, ‘๘’, ‘๙’]

โปรดสังเกตว่า ในลิตส์นี้ กำหนดเป็น text หรือ ตัวอักษร เพราะว่ามีข้อกำหนดจากโจทย์ว่าฟิลด์ปลายทางที่ต้องการกำหนด datatype ไว้เป็น text          

และเนื่องจากฟิลด์ “LAND_NO” เป็น numeric ก็จะแปลงให้เป็น text เสียก่อน

input_string = str(input_value)

ตั้งตัวแปรไว้รับผลลัพธ์

result = ”

หลังจากนั้น ก็จะเป็นการวนลูป

ส่วนนี้ของโค้ดจะวนซ้ำอักขระแต่ละตัวใน input_string

สำหรับอักขระแต่ละตัว (อักขระ) จะตรวจสอบว่ามีอยู่ในรายการเลขอารบิกหรือไม่

หากว่ามีอยู่ในลิสต์ของเลขอารบิก จะดูว่าดัชนีเป็นตำแหน่งใด และใช้ดัชนีนั้นเพื่อดึงตัวเลขไทยที่เกี่ยวข้องจากรายการ thai_numerals แล้วจึงเติมเลขไทยนี้ต่อท้ายผลลัพธ์

หากอักขระไม่ใช่เลขอารบิก อักขระนั้นจะต่อท้ายอักขระตามที่เป็น

แล้วก็ส่งผลลัพธ์กลับมา

ก็เพียงเท่านี้เองสาธุชน

วิธีการ

ในช่อง Code Block ให้ใส่โค้ดนี้


def arabic_to_thai_numerals(input_value):
    # สร้างดิกชันนารี เพื่อจับคู่ตัวเลข
    arabic_numerals = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
    thai_numerals = ['๐', '๑', '๒', '๓', '๔', '๕', '๖', '๗', '๘', '๙']

    # เปลี่ยนตัวเลขให้เป็นตัวอักษร
    input_string = str(input_value)

    # รับผลลัพธ์
    result = ''

    # วนลูปไปยังค่าตั้งต้น แล้วเปลี่ยนเลขอารบิกเป็นเลขไทย
    for char in input_string:
        if char in arabic_numerals:
            result += thai_numerals[arabic_numerals.index(char)]
        else:
            result += char

    return result

โค้ดที่ให้ด้านบน คือการสร้างฟังก์ชันชื่อ arabic_to_thai_numerals โดยที่มีตัวแปรเดียวที่ต้องใส่ก็คือ input_value

ในที่นี้ เราจะเปลี่ยน input_value เป็นค่าจากต้นทาง นั่นคือฟิลด์ “LAND_NO”

สิ่งที่เราต้องใส่คือ

arabic_to_thai_numerals(!LAND_NO!)
แปลงเลขอารบิกเป็นเลขไทยใน ArcGIS

แปลงเลขอารบิกเป็นเลขไทยใน ArcGIS ก็จบด้วยประการฉะนี้

อ่านเพิ่ม:

เปลี่ยนเลขอารบิกเป็นเลขไทย ในไมโครซอฟต์เวิร์ด

เปลี่ยนเลขอารบิกเป็นเลขไทย ในไมโครซอฟต์เอ็กเซล