【问题标题】:Google Maps API - Multiple keywords in place searchesGoogle Maps API - 多个关键字就地搜索
【发布时间】:2013-10-28 00:03:16
【问题描述】:

是否可以使用 Google Maps JavaScript API v3 在一个地方搜索请求中搜索多个单独的关键字?

在 Google Places API 文档中声明可以使用多个关键字https://developers.google.com/places/training/additional-places-features

?keyword=theater+gym

但这在 JavaScript API 中不起作用。我试过了:

function performSearch() {
  var request = {
    location: map.center,
    radius: '500',
    keyword: 'theater+gym+tacos',
    rankBy: 'distance'
  };
  service.radarSearch(request, callback);
}

...并且不返回每个关键字的位置。有谁知道如何搜索多个关键字?

注意:我试图在一个请求中搜索多个单独的关键字,而不是带有空格的短语。

【问题讨论】:

  • 您是否尝试使用空格而不是“+”?还是带 + 的空格?
  • 是的,我都试过了。它们都返回较少的结果,并且通常偏向于一个关键字。
  • 你试过%20吗?
  • @duncan 使用该符号也不起作用:(

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


【解决方案1】:

看起来答案是否定的(至少目前,您可以请求enhancement on the issue tracker

一种解决方法是发送三个单独的查询,每个关键字一个。 3个关键字应该没问题,在某些时候你会遇到查询率限制。

  var request = {
    location: pyrmont,
    radius: 500,
    keyword: 'theater'
  };
  infowindow = new google.maps.InfoWindow();
  var service = new google.maps.places.PlacesService(map);
  service.nearbySearch(request, callback);
  var request2 = {
    location: pyrmont,
    radius: 500,
    keyword: 'gym'
  };
  var service2 = new google.maps.places.PlacesService(map);
  service2.nearbySearch(request2, callback);
  var request3 = {
    location: pyrmont,
    radius: 500,
    keyword: 'tacos'
  };
  var service3 = new google.maps.places.PlacesService(map);
  service3.nearbySearch(request2, callback);

proof of concept

代码 sn-p:

var map;
var infowindow;

function initialize() {
  var pyrmont = new google.maps.LatLng(-33.8665433, 151.1956316);

  map = new google.maps.Map(document.getElementById('map-canvas'), {
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    center: pyrmont,
    zoom: 15
  });

  var request = {
    location: pyrmont,
    radius: 500,
    keyword: 'theater'
  };
  infowindow = new google.maps.InfoWindow();
  var service = new google.maps.places.PlacesService(map);
  service.nearbySearch(request, callback);
  var request2 = {
    location: pyrmont,
    radius: 500,
    keyword: 'gym'
  };
  var service2 = new google.maps.places.PlacesService(map);
  service2.nearbySearch(request2, callback);
  var request3 = {
    location: pyrmont,
    radius: 500,
    keyword: 'tacos'
  };
  var service3 = new google.maps.places.PlacesService(map);
  service3.nearbySearch(request2, callback);
}

function callback(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      createMarker(results[i]);
    }
  } else alert("Places request failed: " + status);
}

function createMarker(place) {
  var placeLoc = place.geometry.location;
  var marker = new google.maps.Marker({
    map: map,
    position: place.geometry.location
  });

  google.maps.event.addListener(marker, 'click', function() {
    infowindow.setContent(place.name);
    infowindow.open(map, this);
  });
}

google.maps.event.addDomListener(window, 'load', initialize);
html,
body,
#map-canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&libraries=places"></script>
<div id="map-canvas"></div>

【讨论】:

    【解决方案2】:

    使用 Google place API,进行布尔搜索似乎是这样的:

    var request = {
                location: /*your location*/,
                radius: /*your radius*/,              
                keyword: "(cinema) OR (theater)"           
            };
    

    你可以使用 OR,AND,但要注意大小写!!

    【讨论】:

    • 这不起作用。一些文档链接会很有帮助。
    • 这对我不起作用。任何地方都有这方面的文档吗?
    • 是否有这方面的文档。有没有人在有条件的情况下做到了这一点?
    • 太棒了!经过测试,似乎可以工作...伙计,您刚刚保存了我的客户端 x8 请求...世界现在变得更美好了....
    • 这并不总是有效,也没有文档,我想说这只是出于巧合。
    【解决方案3】:

    当我试图弄清楚如何在一个请求中使用多个关键字时,我遇到了同样的问题。起初@netoale 的回答帮助了我,但这不再可能。在 Google 遇到一些一般性问题后,我向支持人员询问,其中一位员工写信给我说可以用一个简单的“|”链接多个关键字。

    举个例子:

    https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=lat,lng&key=API_KEY&keyword=theater|castle|park&rankby=distance
    

    现在为我工作。

    【讨论】:

    • 虽然这可能有效,但附近搜索文档 (developers.google.com/places/web-service/…) 并未正式支持此功能,并且可能会停止工作。此外,使用此解决方案,您可能无法为您尝试查询的每种类型获得足够的结果。
    【解决方案4】:

    编辑:这最初似乎有效,但更多结果不可靠且不可预测。我们最终无法在我们的场景中以这种方式使用 API。

    我使用网络服务,但我认为它应该适用于所有 API 访问点。我花了很多组合来测试,但最终我意识到 API 需要括号和引号才能使多词 OR 条件起作用。

    例如以url参数形式:

    keywords=("Place Name 1") OR ("PlaceName2") OR ("Place Name3")

    【讨论】:

    • 能否请您提供此示例的 Js fiddle。会有很大帮助
    • 是的,工作并不可靠或可预测。我编辑了答案。
    • 使用不带 ( ) 的单引号似乎可以始终如一地工作。 2022 年 3 月 例如:keyword="'cinema' OR 'theater'"
    【解决方案5】:

    您是否尝试过使用类型选项。如果使用 type 可以获得多个地点信息

    请查看可能的supported typesRadarSearchRequests 试试这样

    function performSearch() {
      var request = {
        location: map.center,
        radius: '500',
        types: ['movie_theater', 'gym'],
        rankBy: 'distance'
      };
      service.radarSearch(request, callback);
    }
    

    我不知道“炸玉米饼”是哪种类型。请支持类型并给出“tacos”类型值。

    如果您有任何问题,请告诉我

    【讨论】:

    • 谢谢,type 接受多个值,但我正在尝试使用关键字来实现。
    【解决方案6】:

    我相信这与Google Maps API open issue 4845 有关。请对该问题加注星标以跟踪进度。

    【讨论】:

    • 该问题涉及短语的空格,我的问题是多个单个关键字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    相关资源
    最近更新 更多