【问题标题】:Google Places API - Location near LandmarkGoogle Places API - 地标附近的位置
【发布时间】:2015-07-09 10:53:55
【问题描述】:

我想知道是否可以将 Google Places API 限制为仅搜索 'landmark' 附近的 'x',其中地标仅限于地标。

例如:

Not desired: coffee shop near Walmart

Desired: coffee shop near Eiffel Tower

使用 javascript API。

提前干杯。

【问题讨论】:

    标签: javascript google-places-api


    【解决方案1】:

    https://developers.google.com/maps/documentation/javascript/places#place_search_requests找到

    Places Nearby 搜索是通过调用 PlacesService 的 nearSearch() 方法,它将返回一个 PlaceResult 数组 对象。

    service = new google.maps.places.PlacesService(map);
    service.nearbySearch(request, callback);
    

    您还必须将回调方法传递给附近的Search(),以处理 结果对象和 google.maps.places.PlacesServiceStatus 响应。

    var map;
    var service;
    var infowindow;
    
    function initialize() {
      var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316);
    
      map = new google.maps.Map(document.getElementById('map'), {
          center: pyrmont,
          zoom: 15
        });
    
      var request = {
        location: pyrmont,
        radius: '500',
        types: ['store']
      };
    
      service = new google.maps.places.PlacesService(map);
      service.nearbySearch(request, callback);
    }
    
    function callback(results, status) {
      if (status == google.maps.places.PlacesServiceStatus.OK) {
        for (var i = 0; i < results.length; i++) {
          var place = results[i];
          createMarker(results[i]);
        }
      }
    }
    

    您将更改 pyrmont 的 LatLng 以更改位置,在您的情况下为埃菲尔铁塔。您还可以将所有出现的pyrmont 更改为您自己的变量。 shop 也可以更改。

    【讨论】:

    • 据我所知,这并没有特别回答这个问题......问题想知道“地标”是否是谷歌地方 API 中的一种地方,以及我是否可以将第二个参数限制为仅限地标。
    【解决方案2】:

    您需要进行两次搜索:

    1. 使用PlacesServicetextSearch 方法查找候选landmark。如果顶部结果与您对地标的定义相匹配(可能types 数组包含point_of_interest?),则在步骤 2 中使用其位置。
    2. 使用PlacesServicenearbySearch 在该位置附近搜索keyword=x

    类似:

    service = new google.maps.places.PlacesService(map);
    
    var request = {
        query: "Eiffel Tower",
        types: ["point_of_interest"]
    }
    
    function extractTopLandmark(results, status) {
        // Give up if no landmark was found
        if (status != google.maps.places.PlacesServiceStatus.OK) return;
        if (results.length < 1) return;
        // We have a landmark, use its location to do a nearby search.
        var request = {
            keyword: "coffee shop",
            location: results[0].geometry.location,
            radius: 500
        };
        service.nearbySearch(request, addMarkers);
    }
    
    function addMarkers(results, status) {
      if (status == google.maps.places.PlacesServiceStatus.OK) {
        for (var i = 0; i < results.length; i++) {
          var place = results[i];
          createMarker(results[i]);
        }
      }
    }
    
    service.textSearch(request, extractTopLandmark);
    

    【讨论】:

    • 我会试一试,感谢您的意见。我忙了一两天,所以让我在检查时将其标记为正确。
    • 不用担心。我期待听到这种方法对您的效果。
    猜你喜欢
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 2023-03-15
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多