【问题标题】:Google Maps Geocoding API "This service requires an API key"Google Maps Geocoding API“此服务需要 API 密钥”
【发布时间】:2017-08-28 01:36:33
【问题描述】:

我正在尝试使用 Google 地理编码 API。但是,即使在提到 API 密钥之后,我也会收到以下错误 此服务需要 API 密钥。有关身份验证和 Google Maps JavaScript API 的更多信息

以下是我的带有 API 密钥的 HTML 条目:

<script src="//maps.googleapis.com/maps/api/js?v=3.exp&key=AIzaSyAa7LqHyZpHtQBGR6415pYu1FnwWQBPcnY" type="text/javascript"></script>

这是我得到 REQEST_DENIED 的 angularjs 代码

    function geocode(dataset){
var coords = [];
var address = dataset.address;
var geocoder = new google.maps.Geocoder();
var defer = $q.defer();
geocoder.geocode({'address': address}, function( results, status ) {
        if (status === google.maps.GeocoderStatus.OK) {
            coords[0] = results[0].geometry.location.lat();
            coords[1] = results[0].geometry.location.lng();
            dataset["coordinates"]=results[0].geometry.location;
            defer.resolve(dataset);
        }
        else {
            coords = 'Could not retrieve coordinates for: ' + address;
            defer.reject();
        }
    });
return defer.promise;
}

我有什么遗漏吗? 谢谢。

【问题讨论】:

  • 只是提到地理编码 API 已经启用 ;)
  • 我猜你忘了指定要使用的服务“key=...&libraries=places”。
  • 查看这个已接受的答案stackoverflow.com/questions/38028630/…
  • @FadiAboMsalam 我添加了这个

标签: javascript angularjs google-maps google-maps-api-3 google-geocoding-api


【解决方案1】:

因此,根据上面的 cmets,当我从 @FadiAboMsalam 执行 fiddle 后检查网络层时,我可以看到 API 密钥被发送到我的请求中缺少的请求 URL。 我不确定为什么 geocoder.geocode(....) 没有在我的请求中发送 api ley。我更改此代码以发送 $http 请求,它给出了正确的响应。这是更新的代码:

  function geocode(dataset){
    var coords = [];
    var address = dataset.address;
    var geocoder = new google.maps.Geocoder();
    var defer = $q.defer();


 $http.get('https://maps.googleapis.com/maps/api/geocode/json?address=' + 
            address + '&key=xxxxxxxx')
    .then(function(results){
     if (results.status === 200) {
        var data = results.data.results;
            dataset["coordinates"]=data[0].geometry.location;
            defer.resolve(dataset);
         }
         else {
             coords = 'Could not retrieve coordinates for: ' + address;
             defer.reject();
         }
     },
     function error(_error){
        defer.reject();
     });

    return defer.promise;
}

感谢 @PaulThomasGC 和 @FadiAboMsalam 提供有用的意见,感谢其他人投入宝贵的时间。

干杯!

【讨论】:

  • 没有必要用$q.defer 制造一个promise,因为$http 服务已经返回了一个promise。有些人认为它是anti-pattern
  • 感谢@georgeawg 指出这一点。由于代码现在更改为使用 $http 我可以进行这些更改。
猜你喜欢
  • 2017-08-17
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 2014-05-17
  • 2018-11-05
相关资源
最近更新 更多