geocode method
Geocode a text query and return the top result with coordinates.
Returns null if no results are found.
Implementation
Future<GeocodeResult?> geocode(
String queryText, {
String? language,
}) async {
final body = <String, dynamic>{
'QueryText': queryText,
'MaxResults': 1,
};
if (language != null) body['Language'] = language;
final response = await _post('/v2/geocode', body);
final data = json.decode(response.body) as Map<String, dynamic>;
final items = data['ResultItems'] as List<dynamic>? ?? [];
if (items.isEmpty) return null;
final item = items[0] as Map<String, dynamic>;
final position = item['Position'] as List<dynamic>?;
if (position == null || position.length < 2) return null;
// AWS returns [longitude, latitude] — swap to LatLng(lat, lng).
final lng = (position[0] as num).toDouble();
final lat = (position[1] as num).toDouble();
final address = item['Address'] as Map<String, dynamic>? ?? {};
return GeocodeResult(
label: address['Label'] as String? ?? queryText,
position: LatLng(latitude: lat, longitude: lng),
country: address['Country'] as String?,
municipality: address['Municipality'] as String?,
);
}