谷歌位置api获取细节,并不是每个地方都返回

google places api get details not returned for every place

本文关键字:返回 并不是 api 位置 获取 细节 谷歌      更新时间:2023-09-26

Hi-

我正在我的网站上创建一个页面,该页面使用谷歌位置api和用户的地理位置(lat,lng),并查找附近的餐厅。作为代码的一部分,我还查找了餐厅与用户位置的距离。问题是,当它得到每个结果时,我有一个名为getDistance的函数,它会为每个地方调用。对于许多结果,这将返回空字符串,而对于某些结果,它确实返回了空字符串。出于示例的目的,我在这个plunker示例中对用户的位置进行硬编码。有人能指出为什么没有为每个地方返回距离,为什么为一些地方返回空字符串,以及正确的解决方法吗?我真的很感激你的帮助。

我正在调用get distance函数,该函数在位置服务的回调函数中计算每个餐厅的距离(以英里为单位)

 angular.forEach(results, function(result) {
        //using new function for getting distance from user's location
        var place = getDistance(result, service);
        $scope.places.push(place);
      });

这是getDistance函数

function getDistance (place, service) {
    var request = {
      reference: place.reference
    };
    service.getDetails(request, function (details, status) {
        if(status == google.maps.places.PlacesServiceStatus.OK) {
          place.details = details;
          var distance = google.maps.geometry.spherical.computeDistanceBetween
          (new google.maps.LatLng(33.940496, -84.048816), new google.maps.LatLng(place.geometry.location.lat(), place.geometry.location.lng()));
          var distanceInMiles = getMiles(distance);
          place["distance"] = distanceInMiles;
        }
    });
    return place;
};

Plunker示例

如果所有用户在定期运行客户端地理编码请求时同时发出请求,则您的请求可能会被阻止。为了避免这种情况,请考虑以下配额注意事项之一:

  • 使用缓存策略
  • 为您的请求引入随机间隔(抖动)。确保请求在你的整个用户群中是随机的
  • 如果是为Android开发的,请使用不精确的重复警报
  • 如果是为Android开发,请选择合适的位置策略

谷歌地图API允许您缓存地理代码,如果您重复查找同一地址,这将非常有用。但是,正如文档中所述,有两件重要的事情需要记住。一个是:

随着我们的数据越来越准确,地理编码经常发生变化。因此,即使你已经缓存了数据,你也应该定期刷新它,以确保你得到了适合你所在位置的最佳地理编码。

除了提供一个区域内的地点列表外,地点服务还可以返回有关特定地点的详细信息。Place Details是通过调用服务的getDetails()方法来请求的。此方法接受一个包含所需位置的placeId的请求,还接受一个回调方法,该方法需要处理google.maps.places.PlacesServiceStatus响应中传递的状态代码以及google.maps.places.PlaceResult对象。

最后,对于同步问题,其中在getDetails()回调设置位置之前返回位置,这篇相关的SO文章-不能等到结果从google API返回可以帮助您。