我们在页面上实施了一个搜索框和谷歌地图,允许客户根据地点查询执行搜索,到目前为止它运行良好。但是,使用TextSearch我们几乎总能获得20个结果(除非它是特定点)。我们更喜欢的是返回一组结果,这些结果对用户的搜索更有意义(即如果他们在邮政编码中搜索教堂,我们不应该在邮政编码之外显示教堂)。
我知道我们可以根据位置和半径来偏置我们的结果,甚至可以使用NearbySearch根据位置/半径限制结果。
但是,我们的客户是可能在世界任何地区搜索的国内用户,因此在用户搜索之前,我们不确定将设置为限制的位置和半径。我想根据他们的查询动态确定。
例如,在谷歌地图中,如果您搜索“30319附近的教堂”,您将获得比“格鲁吉亚附近的教堂”更加本地化的结果集
我已经测试过使用地理编码进行单独查询以获取查询的单点位置。即。
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作为位置边界。不幸的是,它并不一致,如果用户只搜索“教堂”,这并不能给我们带来理想的结果。
非常感谢任何帮助。
答案 0 :(得分:0)
你几乎拥有它。我将Geocoding API称为其JSON提要而不是Google的实现,因此详细信息将直接来自源代码。在对地形进行地理编码时会返回一些非常有趣的参数。试试吧:
两个第二层地址组件都是Georgia。但是,有一些不同的参数,您想要的参数是geometry
。这表示该区域的形状。
以30319请求为例。你会得到界限:
"bounds" : {
"northeast" : {
"lat" : 33.9203610,
"lng" : -84.30943599999999
},
"southwest" : {
"lat" : 33.83286890,
"lng" : -84.35826589999999
}
},
"location" : {
"lat" : 33.87309460,
"lng" : -84.33842899999999
},
这告诉你三件事:
这允许您计算距离中心的最大距离,然后您可以将其作为半径反馈到Google地方API搜索中。从纬度/长度到距离的转换是微不足道的:它被称为顺向路径。存在两个公式 - 一个用于小距离(Haversine's formula),另一个用于大距离(this)。有人为这些写了一个计算器:http://williams.best.vwh.net/gccalc.htm。您很快就会看到30319的边界框跨度为10km,而格鲁吉亚的边界框跨度接近700(这需要多个Google Places要求匹配)。
如果不清楚,请告诉我,我会进一步详细说明。