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

Google Maps Geolocation Request

See more REST Examples

Demonstrates how make a Google Maps Geolocation REST API request.

Chilkat Perl Downloads

Perl
use chilkat();

$success = 0;

#  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.

$rest = chilkat::CkRest->new();

#  Connect to the Google API REST server.
$bTls = 1;
$port = 443;
$bAutoReconnect = 1;
$success = $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
#    }
#   ]
#  }

$json = chilkat::CkJsonObject->new();
$json->AppendInt("homeMobileCountryCode",310);
$json->AppendInt("homeMobileNetworkCode",260);
$json->AppendString("radioType","gsm");
$json->AppendString("carrier","T-Mobile");

$aCellTowers = chilkat::CkJsonArray->new();
$json->AppendArray2("cellTowers",$aCellTowers);

$oCellTower = chilkat::CkJsonObject->new();
$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);

$aWifi = chilkat::CkJsonArray->new();
$json->AppendArray2("wifiAccessPoints",$aWifi);

$oPoint = chilkat::CkJsonObject->new();
$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);

$responseJson = $rest->fullRequestString("POST","/geolocation/v1/geolocate",$json->emit());
if ($rest->get_LastMethodSuccess() == 0) {
    print $rest->lastErrorText() . "\r\n";
    exit;
}

#  When successful, the response code is 200.
if ($rest->get_ResponseStatusCode() != 200) {
    #  Examine the request/response to see what happened.
    print "response status code = " . $rest->get_ResponseStatusCode() . "\r\n";
    print "response status text = " . $rest->responseStatusText() . "\r\n";
    print "response header: " . $rest->responseHeader() . "\r\n";
    print "response JSON: " . $responseJson . "\r\n";
    print "---" . "\r\n";
    print "LastRequestStartLine: " . $rest->lastRequestStartLine() . "\r\n";
    print "LastRequestHeader: " . $rest->lastRequestHeader() . "\r\n";
    exit;
}

$json->put_EmitCompact(0);
print "JSON request body: " . $json->emit() . "\r\n";

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

print "JSON response: " . $responseJson . "\r\n";

$jsonResp = chilkat::CkJsonObject->new();
$jsonResp->Load($responseJson);

$jsonLoc = chilkat::CkJsonObject->new();
$jsonResp->ObjectOf2("location",$jsonLoc);

#  Any JSON value can be obtained as a string..
$latitude = $jsonLoc->stringOf("lat");
print "latitude = " . $latitude . "\r\n";
$longitude = $jsonLoc->stringOf("lng");
print "longitude = " . $longitude . "\r\n";

$accuracy = $jsonResp->stringOf("accuracy");
print "accuracy = " . $accuracy . "\r\n";