ตัวแปลง CSV เป็น GeoJSON: เปลี่ยนข้อมูลในสเปรดชีตให้เป็นพินบนแผนที่ได้ทันที
แปลงไฟล์ CSV ที่มีคอลัมน์ latitude และ longitude เป็น GeoJSON FeatureCollection ที่ถูกต้องได้ในเบราว์เซอร์โดยตรง พร้อม geometry validation, การตรวจจับ delimiter อัตโนมัติ, property mapping และดาวน์โหลดไฟล์ .geojson ได้ในคลิกเดียวโดยไม่ต้องอัปโหลด
Table of Contents
ตัวแปลง CSV เป็น GeoJSON: เปลี่ยนข้อมูลในสเปรดชีตให้เป็นพินบนแผนที่ได้ทันที
ทุก mapping library พูดภาษา GeoJSON และทุกสเปรดชีตในองค์กรพูดภาษา CSV — ช่องว่างระหว่างสองภาษานี้คือจุดที่โปรเจกต์แผนที่ส่วนใหญ่ติดขัด CSV to GeoJSON Converter แบบฟรีช่วยปิดช่องว่างนี้ได้ในไม่กี่วินาที เพียงวาง CSV ที่มีคอลัมน์ latitude และ longitude เครื่องมือจะสร้าง GeoJSON FeatureCollection ที่เป็นไปตามมาตรฐาน พร้อมนำไปใช้กับ Leaflet, Mapbox, QGIS, D3 หรือการแสดงผลแผนที่ในตัวของ GitHub ได้ทันที
ช่องว่างนี้สำคัญกว่าที่หลายคนคิด ทะเบียนทรัพย์สิน, ไฟล์ export จาก CRM, แบบฟอร์มสำรวจ, รายการร้านค้า และพอร์ทัล open-data ล้วนส่งมอบข้อมูลเป็นข้อความคั่นด้วยเครื่องหมายจุลภาค ขณะที่เครื่องมือทำแผนที่ต้องการ GeoJSON วิธีแก้แบบดั้งเดิมคือเขียนสคริปต์ Python, ใช้คำสั่ง jq ที่จำได้ครึ่ง ๆ กลาง ๆ หรือผ่าน import wizard ของโปรแกรม GIS — ซึ่งไม่สะดวกเลยเมื่อคุณแค่ต้องการเอาตำแหน่งร้านค้าสามสิบจุดลงบนแผนที่ก่อนประชุม
ตัวแปลงนี้ทำทุกอย่างในเบราว์เซอร์ของคุณ ไม่มีขั้นตอนอัปโหลด ไม่ต้องสมัครบัญชี ไม่มีการติดต่อเซิร์ฟเวอร์ — การ parse, validation และดาวน์โหลดเกิดขึ้นบนเครื่องคุณทั้งหมด จึงปลอดภัยกับข้อมูลที่เป็นความลับ เช่น ที่อยู่ลูกค้า, แผนที่โครงการที่ยังไม่เปิดเผย หรือตำแหน่งเซ็นเซอร์ภายใน เพราะข้อมูลไม่เคยออกจากแล็ปท็อปของคุณ
ทำไมต้องใช้ตัวแปลง CSV เป็น GeoJSON?
- ใช้งานลื่นไหลไม่มีขั้นตอนยุ่งยาก วาง CSV หรือลากไฟล์เข้ามาแล้วผลลัพธ์อัปเดตทันที ไม่ต้องติดตั้ง ไม่ต้องสมัคร ไม่ต้องใช้ command line
- ผลลัพธ์ถูกต้องตามมาตรฐาน เครื่องมือสร้าง FeatureCollection ที่ประกอบด้วย Point features ตามแนวทาง RFC 7946 และเขียนค่าพิกัดในลำดับ [longitude, latitude] ที่ถูกต้องโดยอัตโนมัติ ซึ่งเป็นจุดพลาดอันดับหนึ่งของการแปลงด้วยตนเอง
- มี geometry validation ในตัว แถวที่พิกัดหายหรือไม่ใช่ตัวเลขจะถูกตรวจพบ ข้ามไปพร้อมแจ้งจำนวน ทำให้ข้อมูลแถวเดียวที่เสียไม่ทำให้เลเยอร์แผนที่ทั้งหมดพัง
- ตรวจจับ delimiter อัตโนมัติ รองรับ comma, semicolon, tab และ pipe โดยอ่านจากตัวอย่างข้อมูล พร้อม parser สไตล์ RFC-4180 ที่จัดการ quoted fields รวมถึงฟิลด์ที่มี comma หรือขึ้นบรรทัดใหม่ข้างในได้ถูกต้อง
- property mapping ได้ฟรี ทุกคอลัมน์ที่ไม่ใช่ latitude และ longitude จะกลายเป็น property ของ feature ทำให้ popup และ tooltip ใน Leaflet หรือ Mapbox ทำงานได้ทันทีโดยไม่ต้องเขียนโค้ดเพิ่ม
- เป็นส่วนตัวตั้งแต่การออกแบบ การแปลงเกิดขึ้น 100% ฝั่งไคลเอนต์ สเปรดชีตของคุณไม่ถูกส่ง บันทึก หรือเก็บไว้ที่ใดเลย
ฟีเจอร์หลัก
| ฟีเจอร์ | ทำอะไร | ทำไมจึงสำคัญ |
|---|---|---|
| CSV เป็น FeatureCollection | แต่ละแถวกลายเป็น Point feature หนึ่งตัวในออบเจกต์ GeoJSON เดียว | เป็นรูปแบบที่ Leaflet, Mapbox และ QGIS ต้องการพอดี |
| ตรวจจับ delimiter อัตโนมัติ | อ่านตัวอย่างข้อมูลแล้วเลือก comma, semicolon, tab หรือ pipe | CSV แบบ semicolon ของยุโรปและไฟล์ TSV ใช้ได้ทันที |
| quoted fields แบบ RFC-4180 | ฟิลด์ที่อยู่ในเครื่องหมายคำพูดจะคง comma และขึ้นบรรทัดใหม่ไว้ครบถ้วน | ค่าอย่าง Chiang Mai, Old City ยังเป็นฟิลด์เดียว |
| geometry validation | ตรวจว่า latitude และ longitude เป็นตัวเลขจริง แถวที่เสียจะถูกข้ามพร้อมนับจำนวน | รู้ปัญหาข้อมูลสกปรกก่อนที่มันจะไปโผล่บนแผนที่ |
| property mapping | คอลัมน์ที่เหลือทั้งหมดกลายเป็น property ของ feature | popup ที่มีข้อมูลครบโดยไม่ต้องเขียนโค้ด |
| การจัดการ header | ใช้แถว header เป็นชื่อ property หรือ fallback เป็น column_1, column_2 สำหรับไฟล์ไม่มีหัวตาราง | ใช้กับไฟล์ export จากระบบใดก็ได้ |
| ผลลัพธ์คลิกเดียว | คัดลอกไปยังคลิปบอร์ดหรือดาวน์โหลดเป็นไฟล์ .geojson | นำไปวางใน repo หรือโปรเจกต์แผนที่ได้เลย |
มีรายละเอียดน่าสนใจอีกเล็กน้อย ชื่อคอลัมน์ latitude และ longitude สามารถกำหนดเองได้ ดังนั้น header อย่าง latitude, y หรือ lon ก็ใช้ได้ เพียงบอกเครื่องมือว่าอันไหนคืออันไหน ปุ่มสลับ pretty-print ช่วยให้เลือกได้ระหว่าง JSON แบบบรรทัดเดียวกระชับสำหรับใช้ใน production กับแบบย่อหน้าอ่านง่าย และเพราะผลลัพธ์เป็น GeoJSON ธรรมดา มันจะแสดงผลทันทีเมื่อ commit ลง GitHub หรือวางใน geojson.io
วิธีใช้งาน
- เปิดเครื่องมือและใส่ข้อมูล เข้าไปที่ CSV to GeoJSON Converter แล้ววาง CSV ลงในช่อง input หรือพิมพ์ข้อมูลตัวอย่างสักไม่กี่แถวเพื่อทดลอง
- ยืนยัน delimiter โดยปกติโหมด auto-detect จะเปิดอยู่แล้วและรองรับ comma, semicolon, tab และ pipe หากไฟล์ของคุณพิเศษ ก็เลือก delimiter เองได้
- ระบุคอลัมน์พิกัด บอกว่า header ไหนเป็น latitude และไหนเป็น longitude ค่าเริ่มต้นคือ lat และ lng แต่ latitude กับ longitude ก็ใช้ได้เช่นกัน
- ตรวจผล validation และตัวเลือก ดูว่าจำนวนแถวตรงกับที่คาดไว้และจำนวนแถวที่ invalid เป็นศูนย์ จากนั้นเลือกเปิดหรือปิด property และ pretty-print ตามต้องการ
- คัดลอกหรือดาวน์โหลด ก็อปปี้ JSON จากช่องผลลัพธ์ หรือกดดาวน์โหลดเป็นไฟล์ .geojson ที่พร้อมใช้กับ Leaflet, Mapbox, QGIS หรือ GitHub
โครงสร้าง GeoJSON สำหรับคนที่คุ้นเคยกับสเปรดชีต
ถ้าคุณเคยทำงานแค่กับสเปรดชีต GeoJSON ง่ายกว่าที่คิด มันเป็นแค่ JSON ที่มีรูปทรงตายตัว:
- FeatureCollection คือภาชนะชั้นนอก — นึกถึงมันเหมือนทั้งชีต
- อาร์เรย์ features เก็บข้อมูลหนึ่งรายการต่อหนึ่งแถว
- แต่ละ Feature มี geometry และ properties
geometry สำหรับข้อมูลสเปรดชีตคือ Point และค่า coordinates คือส่วนที่ทำให้ทุกคนสะดุด: longitude มาก่อน latitude หรือ [lng, lat] ลำดับนี้มาจากธรรมเนียมงาน GIS ที่เรียง X ก่อน Y (และจากคณิตศาสตร์ที่ X คือแกนนอน) ขณะที่สเปรดชีตมักเรียง latitude ก่อนเพราะคนพูดว่า "lat and long" ซึ่งเป็นสาเหตุที่ทำให้ตัวแปลงแบบทำมือส่งแผนที่เต็มไปด้วยพินในมหาสมุทรผิดที่ กรุงเทพฯ ที่ 13.7563 N และ 100.5018 E ต้องกลายเป็น [100.5018, 13.7563] เท่านั้น
Validation ตัวแปลงจะตรวจว่าช่องพิกัดทั้งสองเป็นตัวเลขจริง อะไรก็ตามที่ไม่ใช่ — ช่องว่าง ข้อความอย่าง N/A หรือค่าที่จัดรูปแบบแบบ 13,7563 จาก locale ที่ใช้ comma เป็นทศนิยม — จะถูกข้ามไปพร้อมนับจำนวน แทนที่จะได้พินที่เสียแบบเงียบ ๆ ในเชิงภูมิศาสตร์ latitude ที่ถูกต้องต้องอยู่ในช่วง −90 ถึง 90 และ longitude อยู่ในช่วง −180 ถึง 180 อาการที่พบบ่อยเมื่อสลับตำแหน่งพิกัดคือทุกพินจะร่วงลงทะเลใต้แอฟริกาตะวันตก (แถว longitude ประมาณ 0 องศา) หรือแผนที่จะ fit ไม่ได้เพราะแกนหนึ่งเกินช่วง
ขอบมุมเรื่อง delimiter และเครื่องหมายคำพูด การตรวจจับอัตโนมัตินับ delimiter ที่อยู่นอกบริเวณ quotes ดังนั้นที่อยู่ที่มี comma อยู่ในเครื่องหมายคำพูดจะไม่หลอกมัน parser ยังรองรับ doubled quotes ใน quoted fields — "He said ""hello""" รอดพ้นอย่างสมบูรณ์ — และขึ้นบรรทัดใหม่ที่อยู่ใน quoted field จะไม่ทำให้แถวเดียวถูกตัดเป็นสองแถว
ตัวอย่างจริง จาก CSV สามแถวนี้:
name,lat,lng,population Bangkok,13.7563,100.5018,10539000 Chiang Mai,18.7883,98.9853,1205000 Phuket,7.8906,98.3924,415000
ตัวแปลงจะให้ผลลัพธ์ (แสดงแบบย่อ):
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [100.5018, 13.7563]
},
"properties": {
"name": "Bangkok",
"population": "10539000"
}
}
]
}
สังเกตว่าเกิดอะไรขึ้น: lat และ lng ถูกใช้สร้าง geometry ในลำดับที่ถูกต้อง ส่วน name และ population กลายเป็น properties ที่ popup template ใด ๆ ก็แสดงได้
กรณีใช้งานจริง
ฟีดสำหรับ store locator
ทีมการตลาดส่ง stores_final_v3.csv มาให้ทุกวันจันทร์ แปลงครั้งเดียว commit ไฟล์ .geojson ไว้ข้าง frontend แล้วแผนที่ร้านค้าใน Leaflet จะอ่านไฟล์นั้นตรง ๆ — ไม่ต้องมี backend, ไม่ต้องมีฐานข้อมูล, ไม่ต้องดูแล import pipeline
แผนที่เซ็นเซอร์และไซต์เครือข่าย
ทะเบียนรถติดตามขนส่ง, สถานีตรวจวัดอากาศ และที่ตั้งเสาสัญญาณล้วนอยู่ในสเปรดชีตที่มีคอลัมน์ lat กับ lng แปลงเป็น GeoJSON แล้วคุณจะซ้อนทุกไซต์บน dashboard ปฏิบัติการได้ พร้อมแนบสถานะ, uptime หรือรุ่นอุปกรณ์เป็น properties สำหรับ hover
นำเข้า open-data ของเมืองเข้าสู่ Mapbox หรือ Leaflet
พอร์ทัล open-data ของหน่วยงานส่วนใหญ่เผยแพร่ข้อมูลต้นไม้, กล้อง CCTV และศิลปะสาธารณะเป็นไฟล์ CSV แปลงไฟล์ครั้งเดียวแล้วโหลดเป็น GeoJSON source ใน Mapbox GL JS หรือเลเยอร์ L.geoJSON ใน Leaflet โดยทุก attribute นำไปใช้ทำ styling และ filter ได้
ข้อมูลสำรวจภาคสนาม
นักวิจัยและผู้ตรวจสอบเก็บพิกัด GPS ในภาคสนาม ซึ่งมักเริ่มจากพิกัดแบบ DMS แปลงเป็นทศนิยมก่อน แล้วแปลงเป็น GeoJSON ทั้งชุดสำรวจจะกลายเป็นไฟล์เดียวที่พกพาสะดวก ซึ่ง QGIS, R หรือ Python อ่านได้โดยไม่ต้องเขียน parser เฉพาะงาน
แนวปฏิบัติที่ดี
- longitude มาก่อนเสมอ พิกัด GeoJSON เรียงเป็น [lng, lat] ตัวแปลงจัดการเรื่องนี้ให้แล้ว อย่าไป "แก้" ด้วยมือ
- ตรวจช่วงพิกัดก่อนลงแผนที่ latitude ต้องอยู่ระหว่าง −90 ถึง 90 และ longitude ระหว่าง −180 ถึง 180 ค่าที่เกินช่วงแปลว่ายังไม่ได้แปลงจากองศา-ลิปดา-ฟิลิปดา หรือคอลัมน์ถูกสลับ
- เก็บ property ที่มีประโยชน์ ตัดที่เป็นความลับทิ้ง หมวดหมู่, สถานะ และความจุทำให้ popup มีค่า แต่ชื่อและเบอร์โทรลูกค้ามักไม่ควรอยู่ในไฟล์ที่กำลังจะ commit
- ระวังระบบพิกัดอ้างอิง ตัวแปลงสมมติว่าข้อมูลเป็น WGS84 เช่นเดียวกับ GPS และ Google Maps ข้อมูลที่อยู่ในหน่วย projection อย่าง UTM เมตร หรือ Web Mercator ดิบ ต้อง reproject ก่อน
- หนึ่งแถว หนึ่งพิน ลบข้อมูลซ้ำในสเปรดชีตก่อนแปลง เพื่อไม่ให้แถวซ้ำกองพินไว้ที่จุดเดียวกัน
- รักษาทศนิยมให้ครบ หกตำแหน่งทศนิยมคือประมาณ 10 เซนติเมตร การปัดเหลือสองตำแหน่งอาจย้ายพินหลุดเป็นร้อยเมตร
พร้อมลงพินข้อมูลของคุณบนแผนที่หรือยัง?
เปิด CSV to GeoJSON Converter วางสเปรดชีตของคุณ แล้วดาวน์โหลดไฟล์ .geojson ที่พร้อมใช้บนแผนที่ก่อนกาแฟของคุณจะเย็น ข้อมูลทั้งหมดยังอยู่บนเครื่องของคุณตลอดเวลา
เครื่องมือที่เกี่ยวข้องที่คุณอาจสนใจ:
- GPS Coordinate Converter — แปลงพิกัด DMS อย่าง 13°45'22" เป็นทศนิยมก่อนการแปลง
- CSV to JSON Converter — parse CSV แบบทั่วไปเมื่อคุณต้องการ JSON ธรรมดา ไม่ใช่ GeoJSON
- Unit Converter — จัดการหน่วยระยะทางและพื้นที่ที่มากับข้อมูลพิกัดของคุณ
ขอให้สนุกกับการทำแผนที่!
คำถามที่พบบ่อย
ถ: ไฟล์ CSV ของฉันถูกอัปโหลดไปที่ไหนหรือเปล่า?
ตอบ: ไม่ การ parse, validation และดาวน์โหลดทำงานในเครื่องผ่านเบราว์เซอร์ด้วย JavaScript ทั้งหมด ไม่มีข้อมูลถูกส่งไปเซิร์ฟเวอร์ใด ๆ เครื่องมือนี้จึงปลอดภัยกับข้อมูลตำแหน่งที่เป็นความลับ
ถ: CSV ของฉันใช้ semicolon เพราะ export จาก locale แบบยุโรป ต้องปรับอะไรไหม?
ตอบ: ไม่ต้อง ระบบตรวจจับ delimiter อัตโนมัติจะอ่านตัวอย่างข้อมูลแล้วเลือกระหว่าง comma, semicolon, tab และ pipe หากไฟล์กำกวมคุณยังเลือกเองได้ด้วย
ถ: ทำไมพินทั้งหมดโผล่กลางทะเลแถวแอฟริกา?
ตอบ: นั่นคืออาการคลาสสิกของการสลับลำดับพิกัด GeoJSON ต้องการ [longitude, latitude] ขณะที่สเปรดชีตส่วนใหญ่เรียง latitude ก่อน ตรวจสอบว่าคุณระบุคอลัมน์ latitude และ longitude ถูกต้องในเครื่องมือ และค่าในข้อมูลต้นทางไม่ได้ถูกสลับกันเอง
ถ: แปลง polygon หรือเส้นแทนที่จะเป็นจุดได้ไหม?
ตอบ: เครื่องมือนี้เชี่ยวชาญข้อมูลพิกัด lat/lng แบบจุด ซึ่งครอบคลุมข้อมูล export จากสเปรดชีตเกือบทั้งหมด สำหรับ polygon และเส้น คุณต้องมีแหล่งข้อมูลที่มีรูปทรง geometry อยู่แล้ว เพราะ CSV ของพิกัดไม่สามารถระบุรูปทรงเหล่านั้นได้อย่างชัดเจน
ถ: ผลลัพธ์ใช้กับ GitHub, geojson.io, QGIS และ Mapbox ได้จริงไหม?
ตอบ: ได้ ตัวแปลงสร้าง FeatureCollection ของ Point features ตามแนวทาง RFC 7946 ซึ่งทุกแพลตฟอร์มแผนที่หลักแสดงผลได้ทันที รวมถึง GitHub ที่จะแสดงไฟล์ GeoJSON ที่ commit ลง repository เป็นแผนที่แบบโต้ตอบได้เลย