onemapsg 1.0.0 copy "onemapsg: ^1.0.0" to clipboard
onemapsg: ^1.0.0 copied to clipboard

OneMap is the authoritative national map of Singapore with the most detailed and timely updated information developed by the Singapore Land Authority.

OneMap Plugin for Flutter #

OneMap is the authoritative national map of Singapore with the most detailed and timely updated information developed by the Singapore Land Authority. There are also many useful day-to-day information and services contributed by government agencies.

Simple example #

An example with authentication.

// Initialize a new OneMap object, pass in cached accessToken if available.
OneMap.initialize(accessToken: token);

// Get singleton instance.
oneMap = OneMap.instance;

// Authenticate and get access token.
try {
    // Some api such as search does not require access token, check OneMap
    // documentation for more details.
    Search result = await oneMap.restApi
        .search(searchVal: 'suntec', returnGeom: true, getAddrDetails: true);

    // Get access token.
    OneMapCredentials credentials =
        await oneMap.authentication.getToken(email: 'youremail', password: 'yourpassword');

    // Cache accessToken if needed here, expiry timestamp is included.
    print(credentials.accessToken);

    // After authentication, private APIs can be called.
    ReverseGeocode geocode = await oneMap.restApi.reverseGeocodeXY(
        x: 33159.1597983748,
        y: 31783.4077108439,
        buffer: 10,
        addressType: AddressType.All,
        otherFeatures: true);
    for (GeocodeInfo geocodeInfo in geocode.geocodeInfos) {
      print(geocodeInfo.buildingName);
      print(geocodeInfo.road);
    }

    ThemeInfo info =
        await oneMap.themes.getThemeInfo(queryName: 'kindergartens');
    print(info.themeNames[0].themeName);
  } catch (_) {
    // Handle errors here.
  }
}

Population query and planning areas #

Population query are divided into various planning areas. This list can be retreived from calling getPlanningAreasName API.

// Retrieve all planning areas.
List<PlanningArea> planningArea =
        await oneMap.planningArea.getPlanningAreasName();

Industry data = await oneMap.populationQuery.industry(
      year: 2010,
      planningArea: planningArea[0].planningAreaName,
    );

Routing and route geometry #

OneMap API encode its route geometry into a polyline string. Built in getter decodes the string into a list of LatLng objects.

Route route = await oneMap.routing.getRoute(
  start: LatLng(1.319728, 103.8421),
  end: LatLng(1.315728905, 103.8121581),
  routeType: RouteType.cycle,
);

// Decoded
List<LatLng> points = route.routeGeometry;
// Encoded string
String geometry = route.encodedRouteGeometry;

For public transport route

PublicTransportRoute ptRoute = await oneMap.routing.getPublicTransportRoute(
    start: LatLng(1.320981, 103.844150),
    end: LatLng(1.326762, 103.8559),
    dateTime: DateTime.now(),
    mode: Mode.TRANSIT);

// Decoded
List<LatLng> points = ptRoute.plan.itineraries[0].legs[0].legGeometry;
// Encoded string
String geometry = ptRoute.plan.itineraries[0].legs[0].encodedLegGeometry.points;

Handling exceptions #

Plugin uses dio to perform http requests. Following is an example on handling http exceptions thrown by dio.

The plugin will also throw a MissingTokenException if an api requiring token is called but user have not authenticated.

...
} on DioError catch(e) {
  print(e.message);
} on MissingTokenException catch(e) {
  print(e);
} catch(_) {
  // other exceptions
}

0
likes
40
pub points
0%
popularity

Publisher

unverified uploader

OneMap is the authoritative national map of Singapore with the most detailed and timely updated information developed by the Singapore Land Authority.

Repository (GitHub)
View/report issues

License

BSD-3-Clause (LICENSE)

Dependencies

dio, flutter, intl, json_annotation, latlong, meta, polyline

More

Packages that depend on onemapsg