_geocode(value, callback) {
    var _this = this;
    var params = this._prepareQueryString();

    if (value.address) {
      if (value.language) {
        params.language = value.language;
      }
      if (value.politicalView) {
        params.politicalview = value.politicalView;
      }
      if (value.country) {
        params.country = value.country;
        if (value.state) {
          params.state = value.state;
        } else {
          delete params.state;
        }
      }
      if (value.zipcode) {
        params.postalcode = value.zipcode;
      }
      params.searchtext = value.address;
    } else {
      params.searchtext = value;
    }

    this.httpAdapter.get(this._geocodeEndpoint, params, function (err, result) {
      var results = [];
      results.raw = result;

      if (err) {
        return callback(err, results);
      } else {
        if (result.type === 'ApplicationError') {
          return callback(new ValueError(result.Details), results);
        }
        if (result.error === 'Unauthorized') {
          return callback(new ValueError(result.error_description), results);
        }
        var view = result.Response?.View[0];
        if (!view) {
          return callback(false, results);
        }

        // Format each geocoding result
        results = view.Result.map(_this._formatResult);
        results.raw = result;

        callback(false, results);
      }
    });
  }
Geocode
@param <string>   value    Value to geocode (Address)
@param <function> callback Callback method