我目前正在构建一个网站/ web应用程序,它将从Algolia中提取“景点”数据,然后显示它-本质上是一个非常简单的搜索/过滤web应用程序。
当用户找到他们想要的景点时,他们点击它并显示更多详细信息(描述,谷歌地图位置,地址等)。我想要展示的一件事是附近(5英里半径)的其他景点。
现在,我在Algolia文档上花了相当多的时间,发现使用AlgoliaSearchHelper (参见:https://www.algolia.com/doc/guides/geo-search/geo-search-overview#filter-and-sort-around-a-location)可以做到这一点。
长话短说,我已经设法让Algolia给我一个5英里半径内的景点,我的问题在于经度和纬度是手动输入的,而不是动态输入的(将从Algolia对象中的_geoloc中提取)。
我目前拥有的是:
var algoliaHelper = algoliasearchHelper(client, INDEX_NAME);
algoliaHelper.setQueryParameter('getRankingInfo', true);
algoliaHelper.setQueryParameter('aroundLatLng', '51.7664027,-0.4747815');
algoliaHelper.setQueryParameter('aroundRadius', 118047);
algoliaHelper.search();(注意: aroundRadius设置为118047,因为我实际上在5英里内没有任何其他景点,这只是为了在阶段进行测试)
这很有效,它为我提供了按距离顺序最近的景点,并显示了距离,因为我再次使用Algolia的文档生成以下内容:
if (hit._rankingInfo.matchedGeoLocation) {
hit.distance = '(' + parseInt(hit._rankingInfo.matchedGeoLocation.distance * 0.00062137, 10) + 'm)';
}如果我尝试将其更改为动态条目(从景点的_geoloc数据中提取并转换为字符串,例如:
var test = String(content._geoloc.lat + "," + content._geoloc.lng);
var algoliaHelper = algoliasearchHelper(client, INDEX_NAME);
algoliaHelper.setQueryParameter('getRankingInfo', true);
algoliaHelper.setQueryParameter('aroundLatLng', test);
algoliaHelper.setQueryParameter('aroundRadius', 118047);
algoliaHelper.search();结果还是会出来的。但是距离是0,当我使用console.log()时,我在_rankingInfo对象下看到的对象,geoDistance是9,这表明它不工作,因为最初相同数据的距离是42073米。
我的问题是,有没有一种方法可以使用我选择的景点的_geoloc详细信息来动态拉取半径内的其他景点(因为当我进入另一个景点时,它可能位于完全不同的位置,附近有不同的景点)。
我很感谢在这方面能得到的任何帮助,我不会对我的JS知识中存在巨大的差距感到震惊,这是非常明显的。
提前谢谢。
发布于 2016-08-19 23:32:59
好吧,在删除和更新代码很长时间之后,上面的代码看起来工作得很好。主要的问题是我的对象来自Algolia,我没有注意到。
我担心挫败感和长时间盯着相同的代码会让我在这一点上失明。
https://stackoverflow.com/questions/39034851
复制相似问题