location_iq 1.1.4 copy "location_iq: ^1.1.4" to clipboard
location_iq: ^1.1.4 copied to clipboard

Type-safe Dart client for LocationIQ API with geocoding, autocomplete, directions, and nearby POI services.

example/location_iq_example.dart

import 'package:location_iq/location_iq.dart';
import 'package:location_iq/src/core/error/exceptions.dart';

void main() async {
  final client = LocationIQClient(apiKey: 'your_api_key_here');

  try {
    // Free-form Forward Geocoding Example
    print('\n--- Free-form Forward Geocoding ---');
    final locations = await client.forwardFreeform.search(
      query: 'Buckingham Palace, London',
      limit: 1,
    );

    if (locations.isNotEmpty) {
      final location = locations.first;
      print('Location: ${location.displayName}');
      print('Coordinates: ${location.lat}, ${location.lon}');
    }

    // Structured Forward Geocoding Example
    print('\n--- Structured Forward Geocoding ---');
    final structuredResults = await client.forwardStructured.search(
      street: 'Baker Street 221B',
      city: 'London',
      country: 'United Kingdom',
      addressdetails: 1,
    );

    if (structuredResults.isNotEmpty) {
      final result = structuredResults.first;
      print('Address: ${result.displayName}');
    }

    // Postal Code Search Example
    print('\n--- Postal Code Search ---');
    final postalResults = await client.forwardPostalcode.search(
      postalcode: 'SW1A 1AA',
      countrycodes: 'gb',
    );

    if (postalResults.isNotEmpty) {
      final result = postalResults.first;
      print('Location: ${result.displayName}');
    }

    // Reverse Geocoding Example
    print('\n--- Reverse Geocoding ---');
    final address = await client.reverse.reverseGeocode(
      lat: '51.5074',
      lon: '-0.1278',
      language: 'en',
    );

    print('Address: ${address.displayName}');

    // Autocomplete Example
    print('\n--- Autocomplete ---');
    final suggestions = await client.autocomplete.suggest(
      query: 'Bucking',
      countryCode: 'gb',
      limit: 5,
    );

    for (final suggestion in suggestions) {
      print('Suggestion: ${suggestion.displayName}');
    }

    // Nearby POI Example
    print('\n--- Nearby Points of Interest ---');
    final nearbyRestaurants = await client.nearbyPOI.findNearbyRestaurants(
      latitude: 51.5074,
      longitude: -0.1278,
      radius: 1000,
      limit: 5,
    );

    for (final restaurant in nearbyRestaurants) {
      print('Restaurant: ${restaurant.displayName}');
      if (restaurant.distance != null) {
        print('  Distance: ${restaurant.distance!.toStringAsFixed(0)}m');
      }
    }

    // Timezone Example
    print('\n--- Timezone Information ---');
    final timezone = await client.timezone.getCurrentTimezone(
      latitude: 51.5074,
      longitude: -0.1278,
    );

    print('Timezone: ${timezone.timezone}');
    print('UTC Offset: ${timezone.utcOffsetFormatted}');
    print('Is DST: ${timezone.isDst}');

    // Directions Example
    print('\n--- Driving Directions ---');
    final directions = await client.directions.getSimpleRoute(
      startLatitude: 51.5074,
      startLongitude: -0.1278,
      endLatitude: 51.5033,
      endLongitude: -0.1195,
    );

    if (directions.primaryRoute != null) {
      final route = directions.primaryRoute!;
      print('Distance: ${route.formattedDistance}');
      print('Duration: ${route.formattedDuration}');

      // Print turn-by-turn directions
      for (final leg in route.legs) {
        for (final step in leg.steps) {
          final instruction = step.maneuver?.instruction ?? 'Continue';
          print('  ${instruction} (${step.distance.toStringAsFixed(0)}m)');
        }
      }
    }

    // Balance Check Example
    print('\n--- Account Balance ---');
    final balance = await client.balance.getBalance();
    print('Status: ${balance.status}');
    print(
      'Remaining Requests: ${balance.remainingRequests}/${balance.totalRequests}',
    );
    print('Usage: ${balance.usagePercentage.toStringAsFixed(1)}%');

    if (balance.balance != null) {
      print('Account Balance: ${balance.formattedBalance}');
    }

    // Check if account has sufficient balance
    final hasSufficientBalance = await client.balance.hasSufficientBalance(
      minimumRequests: 100,
    );
    print('Has sufficient balance (>100 requests): $hasSufficientBalance');
  } on AuthenticationException catch (e) {
    print('Authentication Error: ${e.message}');
  } on RateLimitException catch (e) {
    print('Rate Limit Error: ${e.message}');
  } on NetworkException catch (e) {
    print('Network Error: ${e.message}');
  } on LocationIQException catch (e) {
    print('LocationIQ Error: ${e.message}');
  }
}
1
likes
160
points
31
downloads

Publisher

verified publishertakara.homes

Weekly Downloads

Type-safe Dart client for LocationIQ API with geocoding, autocomplete, directions, and nearby POI services.

Repository (GitHub)
View/report issues

Topics

#geocoding #maps #location #api-client #locationiq

Documentation

Documentation
API reference

License

MIT (license)

Dependencies

http, json_annotation, meta

More

Packages that depend on location_iq