Google Places API - 雷达搜索按名称搜索

时间:2016-02-12 19:05:28

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

我使用Google Places API并使用radarSearch列出场所。但是,当我使用name参数搜索时,我遇到了问题。

它返回了几个地方,但我想得到确切的名字。

在这个example中,我想回归"最好购买"但它返回的地方与我搜索的单词无关。

            var map;
  var infoWindow;
  var service;

  function initialize() {
    map = new google.maps.Map(document.getElementById('map'), {
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      center: new google.maps.LatLng(33.7490, -84.3880),
      zoom: 11,
      styles: [
        {
          stylers: [
            { visibility: 'simplified' }
          ]
        },
        {
          elementType: 'labels',
          stylers: [
            { visibility: 'on' }
          ]
        }
      ]
    });

    infoWindow = new google.maps.InfoWindow();
    service = new google.maps.places.PlacesService(map);

    performSearch();
  }

  function performSearch() {
    var request = {
      location: new google.maps.LatLng(33.7490, -84.3880),
      radius: 50000,
      name: "Best Buy"
    };
    service.radarSearch(request, callback);
  }

  function callback(results, status) {
    if (status != google.maps.places.PlacesServiceStatus.OK) {
      alert(status);
      return;
    }
    for (var i = 0, result; result = results[i]; i++) {
      createMarker(result);
    }
  }

  function createMarker(place) {
    var marker = new google.maps.Marker({
      map: map,
      position: place.geometry.location,
      icon: 'http://www.google.com/intl/en_us/mapfiles/ms/micons/yellow-dot.png'
    });

    google.maps.event.addListener(marker, 'click', function() {
      service.getDetails(place, function(result, status) {
        if (status != google.maps.places.PlacesServiceStatus.OK) {
          alert(status);
          return;
        }
        infoWindow.setContent(result.name);
        infoWindow.open(map, marker);
      });
    });
  }

  initialize();

1 个答案:

答案 0 :(得分:0)

根据Google Places Search API(https://developers.google.com/places/web-service/search),name参数:

  

name - 要与地点名称匹配的一个或多个字词,   以空格字符分隔。结果将仅限于那些   包含传递的名称值。请注意,一个地方可能有   与其相关的其他名称,超出其列出的名称。 API   将尝试将传递的名称值与所有这些名称进行匹配。如   结果,可以在列出名称的结果中返回地点   与搜索词不匹配,但其关联名称不匹配。

我认为你应该在它之前使用\来逃避你的太空角色:

var request = {
  location: new google.maps.LatLng(33.7490, -84.3880),
  radius: 50000,
  name: "Best\ Buy"
};

注意:在你的小提琴中,我只得到“Best Buy ...”/“Best Buy”/“.. Best Buy ...”结果,我没有得到你的问题

更新这个改变(和小jsfiddle改进):https://jsfiddle.net/fautepdf/16/