0

我正在使用 AzureMaps 搜索,我正在尝试检索某个位置的所有 POI(兴趣点),但我无法在任何文档中找到如何排序,例如按距离我的结果

有人有同样的问题吗?

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

4

3 回答 3

1

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

于 2019-08-06T08:11:12.713 回答
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
于 2019-08-06T08:18:20.653 回答
1

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

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

  1. 使用路由矩阵 API。这相当容易使用,比下面的第二个选项更不容易出错,并且响应很容易使用。这种方法唯一的缺点是您需要 S1 定价层才能访问此服务,并且每个单元都会生成一个交易,该交易可能会很快变得昂贵。
  2. 使用路由方向 API有大量从您的起点到每个目的地并返回的航路点(A->B->A->C....)。这将需要更多的工作来理解结果,如果路线的任何一段由于任何原因无法路由,整个路线计算就会失败。但是,这将比选项一便宜得多,因为您可以使用具有免费限制的 S0 定价层,并且在大多数情况下这只会产生 1 笔交易(如果您有大量位置,那么您可能需要将它们分解并分散跨越几个电话)。因为这将计算从起点到每个目的地并返回的路线,所以您进行的计算量是您需要的两倍,这可能会使这比方法 1 慢。在解析响应时,您会像那些那样查看奇数索引的路线支路从始发地到每个目的地。

同样,一旦你有了距离,或者更好的是,旅行时间,你就可以相应地对结果进行排序。

于 2019-08-06T17:44:02.797 回答