createGeofence method
Crea una nueva geocerca programáticamente.
coordinates es una lista de listas [lat, lng, lat, lng].
Implementation
Future<Map<String, dynamic>> createGeofence({
required String name,
required List<List<double>> coordinates,
required String webhookUrl,
}) async {
if (coordinates.length < 3) {
throw Exception("GeoEngine: Se requieren al menos 3 puntos para un polígono");
}
// Convertir formato: Flutter [Lat, Lng] -> GeoJSON [Lng, Lat]
// GeoJSON usa orden Longitud (X), Latitud (Y)
final polygon = coordinates.map((p) => [p[1], p[0]]).toList();
// Cerrar el polígono si no está cerrado
if (polygon.first[0] != polygon.last[0] || polygon.first[1] != polygon.last[1]) {
polygon.add(polygon.first);
}
final payload = {
"name": name,
"webhook_url": webhookUrl,
"geojson": {
"type": "Polygon",
"coordinates": [polygon]
}
};
final uri = Uri.parse('$managementUrl/geofences');
try {
final response = await _client.post(
uri,
headers: {
'Content-Type': 'application/json',
'X-API-Key': apiKey,
'User-Agent': 'GeoEngineFlutter/1.0.0',
},
body: jsonEncode(payload),
);
if (response.statusCode >= 400) {
throw Exception('GeoEngine Management Error (${response.statusCode}): ${response.body}');
}
return jsonDecode(response.body);
} catch (e) {
rethrow;
}
}