在Azure Maps搜索中对结果进行排序

时间:2019-08-06 07:51:32

标签: azure rest api azure-maps

我正在使用AzureMaps Search,并且试图检索位置中的所有POI(兴趣点),但是我在任何文档中都找不到如何排序的方法,例如按距离我的结果

有人有同样的问题吗?

https://atlas.microsoft.com/search/poi/json?subscription-key=key&api-version=1.0&query=restaurant&lat=45&lon=9

3 个答案:

答案 0 :(得分:1)

我不认为当前的Search POI API作为API本身的一部分提供排序。因此,您之后必须在内存中执行该操作。默认情况下,结果按“分数”(相关性)排序。

答案 1 :(得分:1)

POI无法按结果排序,我想您在这里想要的是什么。根据最佳做法,您可以使用nearby-search

https://atlas.microsoft.com/search/address/json?subscription-key={subscription-key}&api-version=1&query=400%20Broad%20Street%2C%20Seattle%2C%20WA&countrySet=US

答案 2 :(得分:1)

如果您想要直线距离,则可以遍历结果,可以使用haversine formula计算距离。如果使用Azure Maps Web SDK,则可以使用atlas.math.getDistanceTo函数。计算到每个点的距离后,即可进行相应的排序。

如果要获取到每个点的行驶距离,可以采用两种方法;

  1. 使用Route Matrix API。这相当容易使用,并且比下面的第二个选项更不容易出错,并且响应也很容易使用。这种方法唯一的缺点是您需要S1定价层才能访问此服务,并且每个单元都将生成一笔交易,该交易很快就会变得昂贵。
  2. Routing Directions API与从您的起点到每个目的地的大量航路点一起使用(A-> B-> A-> C ....)。要了解结果,还需要做更多的工作,并且如果路由的任何一段由于某种原因而无法路由,则整个路由计算将失败。但是,这将比选择一便宜得多,因为您可以使用具有免费限额的S0定价层,并且在大多数情况下,这只会产生1笔交易(如果您有大量营业地点,则可能需要将其拆分并分散几次通话)。因为这将计算从起点到每个目的地的往返路线,所以您进行的计算是所需数量的两倍,这可能会使方法比方法1慢。在解析响应时,您将看到奇数索引的路线分支从起点到每个目的地。在某些情况下,可能需要知道从目的地到起点的旅行时间(即所有员工上班要花多长时间),在这种情况下,偶数脚就是您要使用的行程。

再次确定距离或更好的旅行时间,然后可以对结果进行相应的排序。

相关问题