downloadRegion static method
Future<void>
downloadRegion({
- required LatLngBounds bounds,
- required String styleKey,
- double minZoom = 10.0,
- double maxZoom = 16.0,
- 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');
}
}