Google maps api 3 基于搜索临界值的nearbySearch动态定界

Google maps api 3 基于搜索临界值的nearbySearch动态定界,google-maps-api-3,google-places-api,Google Maps Api 3,Google Places Api,我们已经在我们的页面上实现了一个搜索框和谷歌地图,允许客户根据地点查询执行搜索,目前为止,它运行良好。然而,使用文本搜索,我们几乎总是得到20个结果(除非是一个特定的点)。不过,我们更喜欢根据用户的搜索结果返回一组更有意义的结果(即,如果他们在zipcode中搜索教堂,我们不应该在邮政编码之外显示教堂) 我知道我们可以根据位置和半径对结果进行偏差,甚至可以使用NearbySearch限制基于位置/半径的结果 但是,我们的客户是可能在世界任何地区搜索的国家用户,因此在用户搜索之前,我们不确定要设置

我们已经在我们的页面上实现了一个搜索框和谷歌地图,允许客户根据地点查询执行搜索,目前为止,它运行良好。然而,使用文本搜索,我们几乎总是得到20个结果(除非是一个特定的点)。不过,我们更喜欢根据用户的搜索结果返回一组更有意义的结果(即,如果他们在zipcode中搜索教堂,我们不应该在邮政编码之外显示教堂)

我知道我们可以根据位置和半径对结果进行偏差,甚至可以使用NearbySearch限制基于位置/半径的结果

但是,我们的客户是可能在世界任何地区搜索的国家用户,因此在用户搜索之前,我们不确定要设置什么位置和半径作为限制。我想根据他们的查询动态地确定这一点

例如,在谷歌地图中,如果你搜索“30319附近的教堂”,你会得到比“佐治亚州附近的教堂”更本地化的结果集

30319附近的教堂:

格鲁吉亚附近的教堂:

我已经测试过使用地理代码进行单独的查询,以获得查询的单点位置。i、 e

getGeneralVicinity = ->
  address = $('#address').val()
  window.oneq.geocode.geocoder.geocode
    address: address,
    (results, status) ->
      if status is google.maps.GeocoderStatus.OK
        console.log(results[0].types)
似乎通过可能找到地理编码结果的类型(即位置),我们可以确定半径并使用geometry.location作为位置边界。不幸的是,这是不一致的,如果用户只搜索“教堂”,这不会给我们期望的结果


任何帮助都将不胜感激。

你差一点就得到了。我将把地理编码API称为它的JSON提要,而不是它的Google实现,因此细节将直接从源代码中获得。在对某些东西进行地理编码时,会返回一些非常有趣的参数。试试看:

  • 格鲁吉亚:
  • 30319:
这两个第二层地址组件都是格鲁吉亚的。但是,有几个不同的参数,您需要的参数是
几何体
。这表示该区域的形状

以30319请求为例。您将得到以下结果:

"bounds" : {
           "northeast" : {
              "lat" : 33.9203610,
              "lng" : -84.30943599999999
           },
           "southwest" : {
              "lat" : 33.83286890,
              "lng" : -84.35826589999999
           }
        },
        "location" : {
           "lat" : 33.87309460,
           "lng" : -84.33842899999999
        },
这告诉你三件事:

  • 边界框的角
  • 长方体的中心(顶点线的交点)
这允许您计算距离中心的最大距离,然后将其作为半径反馈到google places API搜索中。从横向/纵向到纵向的转换非常简单:它被称为顺向路径。存在两个公式-一个用于小距离(),另一个用于大距离()。有人为此编写了一个计算器:。您很快就会看到30319的边界框跨越10公里,而佐治亚州的边界框跨越近700公里(这需要多个GooglePlaces请求才能匹配)


如果不清楚,请告诉我,我会进一步说明。

嘿,塞巴斯蒂安,谢谢你的宝贵反馈。这是非常接近我要找的。你是建议我在他们的搜索中使用正则表达式来获得“30319”或“Georgia”吗?我担心的是我不知道他们在找什么。(也就是说,他们可以简单地把“教堂”或“30319附近的教堂”或“佐治亚州的教堂”,等等)我的建议是使用语言处理来隔离他们搜索的中心。如果他们说(“X靠近Y”),地理编码Y并以此为基础。与(“Y中的X”)相同,但在这种情况下,您绝对是绑定到指定的位置。它的实现应该非常简单,我希望不用语言处理就可以实现。我已经列出了near和in,但可能会使用多种术语。由于谷歌地图已经完成了这个精确的问题,我会想象他们会有一个API来完成这个繁重的任务,而不是一个可以访问的API,可悲的是。只需将near和in换行,然后每隔一个关键字将near换行(保守地)。所以,您看到的是“x(接近其他关键字中的其他关键字)y”。当我说语言处理时,我的意思并不太准确——但是如果您愿意,可以使用指定的algos。大多数人会使用in,near,around,at。