Shapefile vs GeoJSON: เปรียบเทียบฟอร์แมต GIS ใช้อะไรดี?
คุณเคยสงสัยไหมครับว่า เวลาทำงาน GIS แล้วต้องเลือกระหว่าง Shapefile กับ GeoJSON ควรเลือกแบบไหน? หรือบางทีได้ไฟล์มาจากหน่วยงานรัฐเป็น .shp แต่ระบบ Web ต้องการ .geojson — ต้องทำอย่างไร?
ฟอร์แมตข้อมูลเชิงพื้นที่ (Geospatial Data Format) เป็นเรื่องที่นักสำรวจและนักพัฒนา GIS ต้องเจอบ่อยครับ วันนี้เราจะมาเปรียบเทียบสองฟอร์แมตยอดนิยมอย่างละเอียด พร้อมแนะนำว่าควรเลือกใช้อะไรในสถานการณ์แบบไหน รวมถึงแนะนำฟอร์แมตทางเลือกที่น่าสนใจด้วยครับ
Shapefile คืออะไร?

Shapefile เป็นฟอร์แมตข้อมูล Vector GIS ที่พัฒนาโดยบริษัท Esri ตั้งแต่ปี ค.ศ. 1990 สำหรับซอฟต์แวร์ ArcInfo ก่อนจะกลายเป็นมาตรฐาน de facto ในวงการ GIS ทั่วโลกมานานกว่า 30 ปี
แม้ชื่อจะเรียกว่า "ไฟล์เดียว" แต่ความจริง Shapefile ประกอบด้วย ไฟล์หลายไฟล์ในโฟลเดอร์เดียวกัน เสมอ:
| นามสกุล | บทบาท |
|---|---|
| `.shp` | ข้อมูล Geometry (รูปทรงเรขาคณิต) |
| `.dbf` | ข้อมูล Attribute (ตาราง dBASE) |
| `.shx` | Index ของ geometry |
| `.prj` | ข้อมูลระบบพิกัด (Projection) |
| `.cpg` | ระบุ Character Encoding (ไม่บังคับ) |
| `.sbn`, `.sbx` | Spatial Index (ไม่บังคับ) |
ซึ่งหมายความว่าถ้าจะส่งไฟล์ Shapefile ให้คนอื่น ต้องส่งทั้งชุดเสมอ (นิยม zip ก่อนส่ง) มิฉะนั้นข้อมูลจะไม่ครบ
ข้อดีของ Shapefile
- รองรับสากล — ซอฟต์แวร์ GIS แทบทุกตัวเปิดได้ทั้ง QGIS, ArcGIS, AutoCAD Map 3D, Global Mapper
- ใช้งานมานาน — หน่วยงานรัฐ กรมที่ดิน กรมชลประทาน GISTDA แจกข้อมูลในฟอร์แมตนี้เป็นหลัก
- เหมาะกับข้อมูลขนาดใหญ่ — รองรับไฟล์ได้ถึง 2 GB ต่อไฟล์ .shp และมี Spatial Index ที่ช่วยให้ query เร็ว
- มาตรฐานในวงการ — เป็น format ที่เข้าใจกันดีในชุมชน GIS ทั่วโลก
ข้อเสียของ Shapefile
- ต้องมีหลายไฟล์ — สูญหายไฟล์ใดไฟล์หนึ่งก็ใช้ไม่ได้ ซับซ้อนในการจัดการ
- ชื่อ field จำกัดแค่ 10 ตัวอักษร — เป็นข้อจำกัดจากฟอร์แมต dBASE เก่า ทำให้ชื่อ attribute ถูกตัดทอน
- ไม่รองรับ null value ที่แตกต่างกัน — ไม่มีความแตกต่างระหว่าง null กับ 0 หรือ string ว่าง
- ไม่รองรับ topology — ไม่สามารถจัดเก็บความสัมพันธ์ระหว่าง feature ได้โดยตรง
- ไม่ใช่ text file — อ่านหรือแก้ไขด้วย text editor ไม่ได้ ต้องใช้ซอฟต์แวร์ GIS เสมอ
- ไม่รองรับ mixed geometry types — หนึ่งไฟล์ใช้ได้แค่ชนิดเดียว (จุด, เส้น, หรือพื้นที่เท่านั้น)
GeoJSON คืออะไร?

GeoJSON เป็นฟอร์แมตข้อมูล geospatial แบบ open standard พัฒนาบน JSON (JavaScript Object Notation) เผยแพร่ครั้งแรกปี ค.ศ. 2008 และกลายเป็น RFC 7946 อย่างเป็นทางการในปี 2016
GeoJSON เป็น text file ไฟล์เดียว ที่อ่านได้ด้วย text editor ทั่วไป โดยมีโครงสร้าง JSON มาตรฐาน:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [100.5018, 13.7563]
},
"properties": {
"name": "กรุงเทพมหานคร",
"population": 10539415,
"province_code": "10"
}
}
]
}
ระบบพิกัดของ GeoJSON
ตามมาตรฐาน RFC 7946 GeoJSON กำหนดให้ใช้ WGS84 (EPSG:4326) เสมอ โดยพิกัดอยู่ในรูป [longitude, latitude] (ลองจิจูดก่อน ละติจูด) ซึ่งต่างจาก Shapefile ที่ระบุ projection ได้อิสระผ่านไฟล์ .prj
ข้อดีของ GeoJSON
- ไฟล์เดียว text ล้วน — ส่ง, เปิด, แก้ไขได้ง่าย ใช้ Git version control ได้
- Web-friendly — JavaScript และ Web Map libraries ทุกตัว (Leaflet, Mapbox GL, OpenLayers) รองรับ native
- ชื่อ field ยาวได้ — ไม่มีข้อจำกัด 10 ตัวอักษร
- รองรับ mixed geometry types — ใน FeatureCollection เดียวกันมีทั้ง Point, Line, Polygon ได้
- มี null value จริง — แยกแยะ null กับ 0 ได้ถูกต้อง
- อ่านง่ายสำหรับนักพัฒนา — ใช้ Python, JavaScript, R จัดการได้โดยตรงโดยไม่ต้องใช้ GIS library พิเศษ
ข้อเสียของ GeoJSON
- ขนาดไฟล์ใหญ่ — เพราะเป็น text ทำให้ไฟล์ใหญ่กว่า binary formats เช่น Shapefile ประมาณ 2-10 เท่า
- ประสิทธิภาพต่ำกับข้อมูลขนาดใหญ่ — ไม่มี Spatial Index ในตัว ทำให้ query ช้าเมื่อข้อมูลมีหลักล้าน features
- จำกัด WGS84 — ไม่สามารถระบุ projection อื่นตามมาตรฐาน (ถ้าต้องการใช้ UTM ต้องใช้ non-standard extension)
- ไม่เหมาะกับ Desktop GIS ดั้งเดิม — ซอฟต์แวร์รุ่นเก่าบางตัวไม่รองรับ
เปรียบเทียบ Shapefile กับ GeoJSON

| หัวข้อ | Shapefile | GeoJSON |
|---|---|---|
| **จำนวนไฟล์** | 3–6 ไฟล์ | 1 ไฟล์ |
| **ฟอร์แมต** | Binary | Text (UTF-8) |
| **ขนาดไฟล์** | เล็กกว่า | ใหญ่กว่า 2–10× |
| **ชื่อ field** | จำกัด 10 ตัวอักษร | ไม่จำกัด |
| **ระบบพิกัด** | ระบุได้อิสระ | WGS84 เท่านั้น (RFC 7946) |
| **Mixed geometry** | ไม่รองรับ | รองรับ |
| **Spatial Index** | มีในตัว | ไม่มี |
| **ขนาดข้อมูลสูงสุด** | 2 GB | ไม่จำกัด (แต่ช้าถ้าใหญ่มาก) |
| **Web Map** | ต้องแปลงก่อน | ใช้ได้ทันที |
| **Version Control (Git)** | ยาก | ง่าย |
| **รองรับโดย QGIS** | ✓ | ✓ |
| **รองรับโดย ArcGIS** | ✓ | ✓ |
| **รองรับโดย Leaflet/Mapbox** | ต้องแปลง | ✓ Native |
ควรเลือกใช้อะไรในงานแบบไหน?

ใช้ Shapefile เมื่อ...
- รับ-ส่งข้อมูลกับหน่วยงานรัฐหรือลูกค้า ที่ใช้ ArcGIS หรือระบบ GIS แบบ Desktop เป็นหลัก
- ข้อมูลมีหลายร้อยพัน features และต้องการความเร็วในการ query และ render
- งานสำรวจภาคสนาม ที่ต้องนำเข้า QGIS หรือ ArcGIS แล้วพิมพ์แผนที่
- ข้อมูลใช้ projection ไทย เช่น Indian 1975 หรือ UTM Zone 47/48 ที่ต้องระบุ .prj
- แลกเปลี่ยนข้อมูลในโปรเจกต์สำรวจ เพราะทุกคนในทีมมักใช้ Desktop GIS
ใช้ GeoJSON เมื่อ...
- พัฒนา Web Map ด้วย Leaflet, Mapbox GL JS, Google Maps API, Deck.gl
- ทำ API ส่งข้อมูลแผนที่ ให้ frontend หรือ mobile app
- เก็บโค้ดใน Git และต้องการ diff ข้อมูล geospatial ระหว่าง version
- ใช้ Python สำหรับ data analysis เพราะ Pandas และ GeoPandas อ่าน GeoJSON ได้ตรง
- ข้อมูลขนาดเล็ก-กลาง ไม่เกิน 10,000–50,000 features
- ต้องการแชร์ข้อมูลง่ายๆ ผ่าน GitHub, Gist หรือส่งใน Email
# ตัวอย่าง: อ่าน GeoJSON ด้วย GeoPandas
import geopandas as gpd
# อ่านตรงจาก URL หรือไฟล์ local
gdf = gpd.read_file("boundary.geojson")
print(gdf.head())
# แปลง Shapefile เป็น GeoJSON
shp = gpd.read_file("survey_points.shp")
shp.to_file("survey_points.geojson", driver="GeoJSON")
# ตัวอย่าง: แปลง Shapefile เป็น GeoJSON ด้วย QGIS Processing
import processing
processing.run("native:reprojectlayer", {
'INPUT': 'survey_area.shp',
'TARGET_CRS': 'EPSG:4326',
'OUTPUT': 'survey_area.geojson'
})
ฟอร์แมตทางเลือกที่น่ารู้

นอกจาก Shapefile และ GeoJSON ยังมีฟอร์แมตอื่นที่ควรรู้จักครับ:
GeoPackage (.gpkg)
GeoPackage เป็น open standard จาก OGC (Open Geospatial Consortium) ที่ได้รับความนิยมสูงมากในช่วงหลัง เพราะแก้จุดอ่อนของทั้ง Shapefile และ GeoJSON:
- ไฟล์เดียว เหมือน GeoJSON แต่เป็น SQLite database
- รองรับหลาย layer ในไฟล์เดียว (Shapefile ต้องแยกไฟล์ต่อ layer)
- ชื่อ field ยาวได้ ไม่จำกัด 10 ตัวอักษร
- ระบุ projection ได้อิสระ เหมือน Shapefile
- มี Spatial Index ทำให้ query เร็ว
- QGIS แนะนำให้ใช้ GeoPackage เป็น format หลักแทน Shapefile
FlatGeobuf (.fgb)
ฟอร์แมตใหม่ที่ออกแบบมาเพื่อ streaming และ web โดยเฉพาะ:
- อ่านได้โดยไม่ต้องโหลดทั้งไฟล์ (random access)
- มี Spatial Index ในตัว
- เหมาะสำหรับ Web Map ที่มีข้อมูลขนาดใหญ่
เปรียบเทียบสรุป 4 ฟอร์แมต
| Shapefile | GeoJSON | GeoPackage | FlatGeobuf | |
|---|---|---|---|---|
| **ไฟล์เดียว** | ✗ | ✓ | ✓ | ✓ |
| **Text/Binary** | Binary | Text | Binary | Binary |
| **Multi-layer** | ✗ | ✗ | ✓ | ✗ |
| **Projection อิสระ** | ✓ | ✗ | ✓ | ✓ |
| **Web-ready** | ✗ | ✓ | บางส่วน | ✓ |
| **QGIS รองรับ** | ✓ | ✓ | ✓ | ✓ |
วิธีแปลงฟอร์แมตใน QGIS

QGIS แปลงระหว่างฟอร์แมตทั้งหมดได้ง่ายมากครับ:
- คลิกขวา Layer ที่ต้องการแปลง → Export → Save Features As...
- เลือก Format ที่ต้องการ (GeoJSON, GeoPackage, Shapefile ฯลฯ)
- ถ้าแปลงเป็น GeoJSON ให้เปลี่ยน CRS เป็น
EPSG:4326 (WGS 84)ก่อน - กด OK
หรือใช้ GDAL command line:
# แปลง Shapefile → GeoJSON (พร้อม reproject เป็น WGS84)
ogr2ogr -f GeoJSON -t_srs EPSG:4326 output.geojson input.shp
# แปลง GeoJSON → Shapefile
ogr2ogr -f "ESRI Shapefile" output_folder/ input.geojson
# แปลง Shapefile → GeoPackage
ogr2ogr -f GPKG output.gpkg input.shp
สรุป
การเลือกฟอร์แมตข้อมูล GIS ไม่มีคำตอบที่ถูกผิดตายตัวครับ ขึ้นอยู่กับว่างานของคุณต้องการอะไร:
- Shapefile — ยังเป็นมาตรฐานในวงการสำรวจและ Desktop GIS เหมาะเมื่อทำงานกับหน่วยงานรัฐหรือซอฟต์แวร์ ArcGIS
- GeoJSON — เหมาะสำหรับ Web Map, API, และงานพัฒนา ง่ายต่อการแชร์และจัดการ
- GeoPackage — ตัวเลือกสมัยใหม่ที่แก้จุดอ่อนของ Shapefile แนะนำให้ใช้เป็น format หลักสำหรับงานวิเคราะห์ใน QGIS
สิ่งสำคัญคือควรรู้จักฟอร์แมตเหล่านี้ทั้งหมด และเลือกใช้ให้เหมาะกับงาน รวมถึงรู้วิธีแปลงระหว่างกันได้คล่องครับ
หากคุณต้องการความช่วยเหลือเรื่องการจัดการข้อมูล GIS นำเข้า-ส่งออกฟอร์แมต หรือเรียนรู้การใช้ QGIS เชิงลึก ทีม WAIPIA Development พร้อมให้คำปรึกษาและฝึกอบรมครับ
บทความโดย ทีม WAIPIA Development — บริการสำรวจ แผนที่ และภูมิสารสนเทศครบวงจร 📞 ติดต่อ: 095-7243421 | Line OA: @info_wd | เว็บไซต์: waipia.com