downloadRegion static method

Future<void> downloadRegion({
  1. required LatLngBounds bounds,
  2. required String styleKey,
  3. double minZoom = 10.0,
  4. double maxZoom = 16.0,
  5. String regionName = 'powermap_offline',
})

ฟังก์ชันสำหรับดาวน์โหลดแผนที่ล่วงหน้า (Pre-load/Offline Region) ท่านสามารถกำหนดช่วง bounds ที่ต้องการโหลดเพื่อเก็บลง Cache เครื่องได้ แผนที่บริเวณนี้จะประมวลผลวาดด้วย GPU ทันทีโดยไม่ต้องรอเน็ต

Implementation

static Future<void> downloadRegion({
  required LatLngBounds bounds,
  required String styleKey,
  double minZoom = 10.0,
  double maxZoom = 16.0,
  String regionName = 'powermap_offline',
}) async {
  try {
    // ดึง Style Map ที่ Optimize แล้วเพื่อใช้เป็น Base Map สำหรับออฟไลน์
    final styleJsonString = await TileService.getOptimizedStyleJson(styleKey);

    // สร้าง Metadata สำหรับ Offline Region
    final metadata = <String, dynamic>{
      'name': regionName,
      'downloadedAt': DateTime.now().toIso8601String(),
    };

    // ใช้ระบบ Offline ของ Maplibre GL เพื่อโหลดแคชเวกเตอร์ลง Storage ของเครื่องโดยตรง
    final definition = OfflineRegionDefinition(
      bounds: bounds,
      mapStyleUrl: styleJsonString,
      minZoom: minZoom,
      maxZoom: maxZoom,
    );

    // เริ่มการดาวน์โหลดเบื้องหลัง
    // MapLibre native engine จะจัดการ Threads ในการดาวน์โหลดและเซฟลง Cache อัตโนมัติ
    await downloadOfflineRegion(definition, metadata: metadata);

    debugPrint('PowerMap: 📍 โหลด Area ล่วงหน้าเสร็จสมบูรณ์ -> $regionName');
  } catch (e) {
    debugPrint('PowerMap: ❌ เกิดข้อผิดพลาดในการโหลด Area ล่วงหน้า: $e');
  }
}