【问题标题】:service invoked too many times for one day geocode一天地理编码服务调用次数过多
【发布时间】:2017-04-24 20:58:13
【问题描述】:

我在使用谷歌地图地理编码功能时收到此错误消息,据我所知,当我超过一天内 2500 个请求的免费限制时会发生此错误。但是,我设置了一个计费选项来为额外的请求支付额外费用,但我仍然收到此错误。当我设置计费时,它要求我创建一个项目,然后将其与我的计费信息相关联,我这样做了,然后我得到了一个 API 密钥来使用。

我不知道是否/我会将这个 API 密钥放在我的代码中的位置。这是我的代码的 sn-p

 var addressColumn = 1;
  var addressRow;

  var latColumn = addressColumn + 1;
  var lngColumn = addressColumn + 2;

  var geocoder = Maps.newGeocoder().setRegion(getGeocodingRegion());
  var location;

  for (addressRow = 1; addressRow <= cells.getNumRows(); ++addressRow) {
    var address = cells.getCell(addressRow, addressColumn).getValue();

    // Geocode the address and plug the lat, lng pair into the 
    // 2nd and 3rd elements of the current range row.
    location = geocoder.geocode(address);

    // Only change cells if geocoder seems to have gotten a 
    // valid response.
    if (location.status == 'OK') {
      lat = location["results"][0]["geometry"]["location"]["lat"];
      lng = location["results"][0]["geometry"]["location"]["lng"];

      cells.getCell(addressRow, latColumn).setValue(lat);
      cells.getCell(addressRow, lngColumn).setValue(lng);
    }
  }
};

任何想法如何将我的付费计费项目链接到此代码,以便我可以增加 API 的使用?

【问题讨论】:

  • 你看here了吗?

标签: google-maps google-apps-script google-cloud-platform quota custom-function


【解决方案1】:

您必须在工作表更改时触发此功能,否则此功能触发时间过多。我还添加了一个计时器来减轻对第二个速率限制的请求。

function getLatLng(address) {
        if(address=="")return("");
        var API_KEY = "YOUR API KEY";

        var options = {
            muteHttpExceptions: true,
            contentType: "application/json",
        };


            var serviceUrl = "https://maps.googleapis.com/maps/api/geocode/json?address=" + address + "&key=" + API_KEY;
      try{
            var response = UrlFetchApp.fetch(serviceUrl, options);

            //sleep random between 2 and 1 second for request
            var milliseconds = Math.floor(((Math.random() * 2) + 1) * 1000);  
            Utilities.sleep(milliseconds);

            if (response.getResponseCode() == 200) {
                var location = JSON.parse(response.getContentText());

                if (location["status"] == "OK") {
                    var lat = location["results"][0]["geometry"]["location"]["lat"];
                    var lng = location["results"][0]["geometry"]["location"]["lng"];

                     return([[lat,lng]]);
                }
              else{
                return([["error",location["status"]]]);
              }
            }
      }
      catch(err){
        return([["error",err.message]]);
      }
    };

您可以获得一个api密钥here。 您可以直接在工作表单元格中使用此功能,例如:getLatLng(D2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多