如何使用 Google 地图 API 路线计算每个国家/地区的距离

How to calculate distance for each country using Google Maps API Route

例如我有一个简单的溃败From Warsaw, Poland To Berlin, Germany by car。现在我可以计算所有路线的距离(572 公里)。我如何计算每个国家/地区的距离?德国 ~ 100 公里,波兰 ~ 472 公里。

我尝试使用 start_locationlegs[] 中的每个 DirectionsLeg 检测国家边界,并通过 start_location 检测国家名称。例如:

getCountry(legs[0]) => 'pl'
getCountry(legs[1]) => 'pl'
getCountry(legs[2]) => 'pl'
//border detected
getCountry(legs[3]) => 'de'
getCountry(legs[4]) => 'de'

它的工作,但如果路线是这样"big",getCountry() return OVER_QUERY_LIMIT

已更新

感谢Dr.Molle的帮助!

工作fiddle警告:代码工作正常,但未优化。小心!

P.S。对不起我的英语

您需要一种方法来避免对检测国家/地区的每个步骤的请求。

有一个包含国家/地区边界的 FusionTable:https://www.google.com/fusiontables/data?docid=16CTzhDWVwwqa0e5xe4dRxQ9yoyE1hVt_3ekDFQ#map:id=3

可能的工作流程:

  1. 请求受该路线影响的国家/地区的几何形状。直接使用路径在这里是行不通的,因为 URL 会太长,所以根据路线的边界过滤结果(它可能比受影响的国家多 return,但有没有其他选择)

    华沙-柏林路线的示例查询为:

    SELECT sovereignt,json_4326 
    FROM 16CTzhDWVwwqa0e5xe4dRxQ9yoyE1hVt_3ekDFQ 
    WHERE ST_INTERSECTS(kml_4326,
                        RECTANGLE(LATLNG(51.88951,13.38593),
                                  LATLNG(52.52003,21.01219))) 
    

    此查询中使用的 RECTANGLE 将基于给定路线的 bounds-属性 创建。样品申请:http://jsfiddle.net/doktormolle/vexqe0ps/

  2. 基于 returned 几何为每个国家/地区创建一个多边形数组(它们必须不可见)。

  3. 遍历路线的步骤,并为每个步骤迭代多边形数组。使用 google.maps.geometry.poly.containsLocation() 检查 start_(或 end_)位置是否位于当前多边形内。当它出现时,将当前步的距离添加到当前国家/地区的距离。

我不知道我的方法是否比您的 getCountry() 更快,但我使用说明文本并搜索 "Entering"(例如 "Entering Germany")- 这意味着您在边界处(但你必须使用下一个索引的lat-lng)

            var instr = myroute.legs[0].steps[i].instructions;
            isBorder=instr.includes("Entering");
            if(isBorder) {
                // calculate partial distance with myroute.legs[0].steps[i+1].start_location.lat() etc;
             }

编辑:我刚刚意识到每一步也有一个 end_location,因此您不需要下一步作为计算子距离的参考。或者干脆使用 myroute.legs[0].steps[j].distance.value。此外,将每一步的距离相加就无需调用任何其他函数。