Cambodia Geo API

មគ្គុទ្ទេសក៍ងាយៗ (Easy Guide) សម្រាប់ទាញយកទិន្នន័យ ស្រុក ឃុំ ភូមិ ទូទាំងប្រទេសកម្ពុជា យកទៅបំពាក់លើវេបសាយ ឬកម្មវិធីរបស់អ្នកប្រកបដោយប្រសិទ្ធភាព។

ជំហានទី ១៖ តំណភ្ជាប់ (API Endpoint)

ដើម្បីធានាបាននូវល្បឿនលឿនបំផុត ទិន្នន័យត្រូវបានបែងចែកជាខេត្តនីមួយៗដាច់ដោយឡែកពីគ្នា។ អ្នកគ្រាន់តែប្តូរឈ្មោះខេត្តនៅខាងចុងតំណភ្ជាប់ គឺជាការស្រេច។

GET https://sinantech.site/api/cambodia_geo/{Province_Name}.json

បញ្ជីឈ្មោះខេត្ត {Province_Name} ដែលអ្នកត្រូវយកទៅជំនួសតំណភ្ជាប់ខាងលើ៖

  • Phnom Penh Capital (រាជធានីភ្នំពេញ)
  • Banteay Meanchey Province (បន្ទាយមានជ័យ)
  • Battambang Province (បាត់ដំបង)
  • Kampong Cham Province (កំពង់ចាម)
  • Kampong Chhnang Province (កំពង់ឆ្នាំង)
  • Kampong Speu Province (កំពង់ស្ពឺ)
  • Kampong Thom Province (កំពង់ធំ)
  • Kampot Province (កំពត)
  • Kandal Province (កណ្តាល)
  • Kep Province (កែប)
  • Koh Kong Province (កោះកុង)
  • Kratie Province (ក្រចេះ)
  • Mondul Kiri Province (មណ្ឌលគិរី)
  • Oddar Meanchey Province (ឧត្តរមានជ័យ)
  • Pailin Province (ប៉ៃលិន)
  • Preah Sihanouk Province (ព្រះសីហនុ)
  • Preah Vihear Province (ព្រះវិហារ)
  • Prey Veng Province (ព្រៃវែង)
  • Pursat Province (ពោធិ៍សាត់)
  • Ratanak Kiri Province (រតនគិរី)
  • Siemreap Province (សៀមរាប)
  • Stung Treng Province (ស្ទឹងត្រែង)
  • Svay Rieng Province (ស្វាយរៀង)
  • Takeo Province (តាកែវ)
  • Tboung Khmum Province (ត្បូងឃ្មុំ)

ជំហានទី ២៖ រចនាសម្ព័ន្ធទិន្នន័យ (Data Fields)

ទិន្នន័យដែលទាញយកបាន គឺស្ថិតក្នុងទម្រង់ JSON Array។ ខាងក្រោមនេះគឺជាការពន្យល់ពី Field សំខាន់ៗនីមួយៗ ដែលអ្នកនឹងទទួលបាន៖

ឈ្មោះ Field ការពន្យល់អត្ថន័យ
Code ជាលេខសម្គាល់ទីតាំង។ (សំខាន់បំផុតសម្រាប់តភ្ជាប់គ្នា)
- ស្រុក/ខណ្ឌ មានកូដ ៤ ខ្ទង់ (ឧ. 2102)
- ឃុំ/សង្កាត់ មានកូដ ៦ ខ្ទង់ (ឧ. 210201)
- ភូមិ មានកូដ ៨ ខ្ទង់ (ឧ. 21020101)
Type ប្រភេទនៃទីតាំង (ឧ. "ស្រុក", "ខណ្ឌ", "ឃុំ", "សង្កាត់", "ភូមិ")
Name (Khmer) ឈ្មោះទីតាំងជាភាសាខ្មែរ (ឧ. "បាទី")

ក្បួនភ្ជាប់ទីតាំង (The Secret Rule)

អ្នកមិនចាំបាច់មាន Parent ID នោះទេ។ ដោយសារប្រព័ន្ធកូដកម្ពុជាត្រូវបានរៀបចំតាមលំដាប់ ដូច្នេះ កូដរបស់ឃុំ គឺតែងតែផ្ដើមចេញពីកូដរបស់ស្រុកជានិច្ច។

ឧទាហរណ៍៖ ស្រុកបាទី មានកូដ 2102។ រាល់ឃុំទាំងអស់នៅក្នុងស្រុកបាទី នឹងមានកូដផ្ដើមដោយ 2102... ដូចជា ឃុំចំបក់ (210201) ជាដើម។ អ្នកគ្រាន់តែប្រើមុខងារ .startsWith() ក្នុង Javascript ជាការស្រេច!

ជំហានទី ៣៖ កូដ Javascript គំរូ (Fetch & Filter)

នេះគឺជាកូដដ៏រឹងមាំ ដែលអនុញ្ញាតឱ្យអ្នកទាញយកទិន្នន័យខេត្ត ហើយចម្រាញ់យកតែ ស្រុក និង ឃុំ មកបង្ហាញដោយស្វ័យប្រវត្តិ។

app.js
// ១. ទាញយកទិន្នន័យខេត្តតាកែវទាំងមូល
async function loadGeoData() {
    const url = "https://sinantech.site/api/cambodia_geo/Takeo Province.json";
    
    try {
        const response = await fetch(url);
        const text = await response.text(); // ប្រើ .text() ដើម្បីងាយស្រួលការពារ Error JSON
        
        // កាត់យកតែទិន្នន័យចន្លោះ [ ... ] ដើម្បីការពារ Syntax Error ពី Server
        const cleanJson = text.substring(text.indexOf('['), text.lastIndexOf(']') + 1);
        const data = JSON.parse(cleanJson);

        // ២. ចម្រាញ់យកតែបញ្ជី "ស្រុក / ក្រុង" ទាំងអស់
        const districts = data.filter(item => 
            item.Type && (item.Type.includes("ស្រុក") || item.Type.includes("ក្រុង"))
        );
        console.log("ស្រុកសរុបមាន៖", districts);

        // ៣. ពេលអ្នកប្រើប្រាស់ជ្រើសរើសស្រុកណាមួយ (ឧ. យកស្រុកដំបូងគេធ្វើតេស្ត)
        const selectedDistrictCode = districts[0].Code || districts[0].code; 
        
        // ៤. ទាញយកបញ្ជី "ឃុំ / សង្កាត់" ដែលមានកូដផ្ដើមចេញពីកូដស្រុកខាងលើ
        const communes = data.filter(item => 
            item.Type && (item.Type.includes("ឃុំ") || item.Type.includes("សង្កាត់")) 
            && String(item.Code || item.code).startsWith(selectedDistrictCode)
        );
        console.log(`ឃុំនៅក្នុងស្រុកនេះមាន៖`, communes);

    } catch (error) {
        console.error("បរាជ័យក្នុងការទាញទិន្នន័យ៖", error);
    }
}

loadGeoData();