【问题标题】:Google Places API - radarSearch search by nameGoogle Places API - 雷达搜索按名称搜索
【发布时间】:2016-05-24 01:25:37
【问题描述】:

我正在使用Google Places API 并使用radarSearch 来列出机构。但是,当我使用名称参数进行搜索时遇到问题。

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

在这个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();

【问题讨论】:

  • I'd like to have returned "best buy" but it is returning places not related to the word I'm searching for. => 你能添加关于你认为不相关的数据的详细信息吗?是不是这个名字不完全是“百思买”?查看样品时不清楚
  • 嗨,尼古拉斯,没错。我得到的结果与“百思买”不完全匹配。比如“在这里买,在这里买”或“我们买地”

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


【解决方案1】:

根据 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/

【讨论】:

  • 嗨 Nicolas,我还是弄脏了地方。 [这里是一个例子][1] [1]:i.stack.imgur.com/jeKqn.png
  • 使用 jsfiddle 还是直接在您的代码中?我没有你在屏幕截图中的观点!如果我在搜索字段中只允许“购买”,我会得到相同的结果
  • 对不起,我之前没有这么说,但我真的很感谢你在这方面的帮助,但是使用你提供的 jsfiddle,我仍然得到这个误导性信息(如屏幕截图所示)。即使使用其他浏览器,清理 cookie...
  • 我刚做了一个新的测试。使用 Chrome 我得到了这个不需要的结果。使用 Firefox 我可以正确获取 90% 的数据。可能是 cookie 的问题?
  • 很奇怪。我正在使用 Chrome,但没有得到不需要的结果。也许您应该在清理缓存/cookie(和/或私人导航)后尝试
猜你喜欢
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多