如何将多个起点发送到查询字符串上的 Google 距离矩阵,每个起点都有自己的多个目的地

How to send multiple origins, each origin having its own multiple destinations, to Google Distance Matrix on the query-string

我正在使用 C# WebClient 和 UriBuilder class,与 Google 距离矩阵 API 通信。我的程序正在发送以逗号分隔的纬度、经度对。一个起点和多个目的地的事情正常工作:查询字符串上的目的地值只需要用横线字符“|”分隔:

    &destinations=latitude1,longitude1|latitude2,longitude2... 

但我想让它与多个来源一起使用,其中每个来源都有 自己的 多个目的地。那可能吗?还是 API 产生笛卡尔积,计算每个起点到每个终点的距离?

如果可以,如何在查询字符串上协调origins[i]destinations[i]

这是我的 C# 程序中的示例结构(隐藏了地理位置):

我需要将该结构转换为 API 可以在查询字符串上接受的格式,其方式是将 destinationArray[0]origin[0]destinationArray[1]origin[1].

这是可能的,但 Google 距离矩阵 API 会给你返回比你需要的更多的结果。所以是的,它 确实 产生笛卡尔积,但您可以从结果中提取您需要的内容。除了为每个来源发送单独的请求外,别无他法。

此处记录了响应的结构https://developers.google.com/maps/documentation/distance-matrix/overview#distance-matrix-responses

TLDR 版本如下:

要求:

origins: o1|o2
destinations: d1|d2

结果将是 structured/ordered,如:

{
  // stuff removed for brevity
  // ...
  "rows": [
    // row for the first origin (o1)
    {
      "elements": [
        // element for the first destination (d1)
        {
          // stuff removed for brevity
        },
        // element for the second destination (d2)
        {
          // stuff removed for brevity
        }
      ]
    },
    // row for the second origin (o2)
    {
      "elements": [
        // element for the first destination (d1)
        {
          // stuff removed for brevity
        },
        // element for the second destination (d2)
        {
          // stuff removed for brevity
        }
      ]
    },
}

因此,行是根据 origins 参数中的来源顺序排序的。每行的元素根据destinations参数中目的地的顺序排序。