geocode method

Future<GeocodeResult?> geocode(
  1. String queryText, {
  2. String? language,
})

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?,
  );
}