google places api获取每个地方都没有返回的详细信息

时间:2016-05-01 17:49:02

标签: javascript angularjs google-maps google-places-api

您好

我正在我的网站上创建一个页面,该页面使用google places api和用户的地理位置(lat,lng)并查找附近的餐馆。作为代码的一部分,我还从用户的位置查找餐厅的距离。问题是当它得到每个结果时,我有一个名为getDistance的函数,为每个地方调用。这会返回空字符串以获得大量结果并返回一些。出于示例的目的,我在该plunker示例中硬编码用户的位置。有人可以指出为什么没有为每个地方返回距离,为什么它返回一个空字符串为一些和正确的解决方案?我非常感谢你的帮助。

我调用获取距离函数来计算场所服务的回调函数中每个餐馆的里程距离

 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 example

1 个答案:

答案 0 :(得分:1)

如果所有用户在定期运行客户端地理编码请求的同时发出请求,则您的请求可能会受到阻止。为避免这种情况,请考虑以下Quota Considerations之一:

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

Google Maps API允许您缓存在重复查找同一地址时非常有用的地理编码。但是,如文档中所述,要记住两件重要事项。一个是:

  

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

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

最后,对于同步问题,其中在getDetails()回调设置之前返回地点,这个相关的SO帖子Can't wait until results come back from google API可以帮助您。