Sample code for 30+ languages & platforms
Dart Requires Chilkat v11.1.0+

Google Maps Geolocation Request

See more REST Examples

Demonstrates how make a Google Maps Geolocation REST API request.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // This example duplicates the following CURL request:
  // curl -d @your_filename.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY"

  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  final rest = CkRest();

  // Connect to the Google API REST server.
  final bTls = true;
  final port = 443;
  final bAutoReconnect = true;
  rest.connect('www.googleapis.com', port, bTls, bAutoReconnect);

  // Add the Content-Type request header.
  rest.addHeader('Content-Type', 'application/json');

  // Add your API key as a query parameter
  rest.addQueryParam('key', 'YOUR_API_KEY');

  // The JSON query is contained in the body of the HTTP POST.
  // This is a sample query (which we'll dynamically build in this example)
  // { 
  //  "homeMobileCountryCode": 310,
  //  "homeMobileNetworkCode": 260,
  //  "radioType": "gsm",
  //  "carrier": "T-Mobile",
  //  "cellTowers": [
  //   {
  //    "cellId": 39627456,
  //    "locationAreaCode": 40495,
  //    "mobileCountryCode": 310,
  //    "mobileNetworkCode": 260,
  //    "age": 0,
  //    "signalStrength": -95
  //   }
  //  ],
  //  "wifiAccessPoints": [
  //   { 
  //    "macAddress": "01:23:45:67:89:AB",
  //    "signalStrength": 8,
  //    "age": 0,
  //    "signalToNoiseRatio": -65,
  //    "channel": 8
  //   },
  //   { 
  //    "macAddress": "01:23:45:67:89:AC",
  //    "signalStrength": 4,
  //    "age": 0
  //   }
  //  ]
  // }

  final json = CkJsonObject();
  json.appendInt('homeMobileCountryCode', 310);
  json.appendInt('homeMobileNetworkCode', 260);
  json.appendString('radioType', 'gsm');
  json.appendString('carrier', 'T-Mobile');

  final aCellTowers = CkJsonArray();
  json.appendArray2('cellTowers', aCellTowers);

  final oCellTower = CkJsonObject();
  aCellTowers.addObjectAt2(0, oCellTower);
  oCellTower.appendInt('cellId', 39627456);
  oCellTower.appendInt('locationAreaCode', 40495);
  oCellTower.appendInt('mobileCountryCode', 310);
  oCellTower.appendInt('mobileNetworkCode', 260);
  oCellTower.appendInt('age', 0);
  oCellTower.appendInt('signalStrength', -95);

  final aWifi = CkJsonArray();
  json.appendArray2('wifiAccessPoints', aWifi);

  final oPoint = CkJsonObject();
  aWifi.addObjectAt2(0, oPoint);
  oPoint.appendString('macAddress', '01:23:45:67:89:AB');
  oPoint.appendInt('signalStrength', 8);
  oPoint.appendInt('age', 0);
  oPoint.appendInt('signalToNoiseRatio', -65);
  oPoint.appendInt('channel', 8);

  aWifi.addObjectAt2(1, oPoint);
  oPoint.appendString('macAddress', '01:23:45:67:89:AC');
  oPoint.appendInt('signalStrength', 4);
  oPoint.appendInt('age', 0);

  final String responseJson;
  try {
    responseJson = rest.fullRequestString('POST', '/geolocation/v1/geolocate', json.emit());
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // When successful, the response code is 200.
  if (rest.responseStatusCode != 200) {
    // Examine the request/response to see what happened.
    print('response status code = ${rest.responseStatusCode}');
    print('response status text = ${rest.responseStatusText}');
    print('response header: ${rest.responseHeader}');
    print('response JSON: $responseJson');
    print('---');
    print('LastRequestStartLine: ${rest.lastRequestStartLine}');
    print('LastRequestHeader: ${rest.lastRequestHeader}');
    return;
  }

  json.emitCompact = false;
  print('JSON request body: ${json.emit()}');

  // The JSON response should look like this:
  // { 
  //  "location": {
  //   "lat": 37.4248297,
  //   "lng": -122.07346549999998
  //  },
  //  "accuracy": 1145.0
  // }

  print('JSON response: $responseJson');

  final jsonResp = CkJsonObject();
  jsonResp.load(responseJson);

  final jsonLoc = CkJsonObject();
  jsonResp.objectOf2('location', jsonLoc);

  // Any JSON value can be obtained as a string..
  final latitude = jsonLoc.stringOf('lat');
  print('latitude = $latitude');
  final longitude = jsonLoc.stringOf('lng');
  print('longitude = $longitude');

  final accuracy = jsonResp.stringOf('accuracy');
  print('accuracy = $accuracy');
}