Sample code for 30+ languages & platforms
Go

Google Maps Geolocation Request

See more REST Examples

Demonstrates how make a Google Maps Geolocation REST API request.

Chilkat Go Downloads

Go
    success := false

    // 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.NewRest()

    // Connect to the Google API REST server.
    bTls := true
    port := 443
    bAutoReconnect := true
    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.NewJsonObject()
    json.AppendInt("homeMobileCountryCode",310)
    json.AppendInt("homeMobileNetworkCode",260)
    json.AppendString("radioType","gsm")
    json.AppendString("carrier","T-Mobile")

    aCellTowers := chilkat.NewJsonArray()
    json.AppendArray2("cellTowers",aCellTowers)

    oCellTower := chilkat.NewJsonObject()
    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.NewJsonArray()
    json.AppendArray2("wifiAccessPoints",aWifi)

    oPoint := chilkat.NewJsonObject()
    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.LastMethodSuccess() == false {
        fmt.Println(rest.LastErrorText())
        rest.DisposeRest()
        json.DisposeJsonObject()
        aCellTowers.DisposeJsonArray()
        oCellTower.DisposeJsonObject()
        aWifi.DisposeJsonArray()
        oPoint.DisposeJsonObject()
        return
    }

    // When successful, the response code is 200.
    if rest.ResponseStatusCode() != 200 {
        // Examine the request/response to see what happened.
        fmt.Println("response status code = ", rest.ResponseStatusCode())
        fmt.Println("response status text = ", rest.ResponseStatusText())
        fmt.Println("response header: ", rest.ResponseHeader())
        fmt.Println("response JSON: ", *responseJson)
        fmt.Println("---")
        fmt.Println("LastRequestStartLine: ", rest.LastRequestStartLine())
        fmt.Println("LastRequestHeader: ", rest.LastRequestHeader())
        rest.DisposeRest()
        json.DisposeJsonObject()
        aCellTowers.DisposeJsonArray()
        oCellTower.DisposeJsonObject()
        aWifi.DisposeJsonArray()
        oPoint.DisposeJsonObject()
        return
    }

    json.SetEmitCompact(false)
    fmt.Println("JSON request body: ", *json.Emit())

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

    fmt.Println("JSON response: ", *responseJson)

    jsonResp := chilkat.NewJsonObject()
    jsonResp.Load(*responseJson)

    jsonLoc := chilkat.NewJsonObject()
    jsonResp.ObjectOf2("location",jsonLoc)

    // Any JSON value can be obtained as a string..
    latitude := jsonLoc.StringOf("lat")
    fmt.Println("latitude = ", *latitude)
    longitude := jsonLoc.StringOf("lng")
    fmt.Println("longitude = ", *longitude)

    accuracy := jsonResp.StringOf("accuracy")
    fmt.Println("accuracy = ", *accuracy)

    rest.DisposeRest()
    json.DisposeJsonObject()
    aCellTowers.DisposeJsonArray()
    oCellTower.DisposeJsonObject()
    aWifi.DisposeJsonArray()
    oPoint.DisposeJsonObject()
    jsonResp.DisposeJsonObject()
    jsonLoc.DisposeJsonObject()