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

时间:2015-02-26 12:00:46

标签: javascript google-maps google-maps-api-3

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

我尝试使用start_locationDirectionsLeg中的每个legs[]检测国家/地区边界,并按start_location检测国家/地区名称。例如:

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

它的工作,但如果路线如此"大",getCountry()返回OVER_QUERY_LIMIT

已更新

感谢Dr.Molle寻求帮助!

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

P.S。对不起我的英文

2 个答案:

答案 0 :(得分:1)

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

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

可能的工作流程:

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

    路线华沙柏林的样本查询将是:

    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. 根据返回的几何图形为每个国家/地区创建一个多边形数组(它们必须不可见)。

  3. 遍历路径的各个步骤,并且每个步骤遍历多边形数组。使用google.maps.geometry.poly.containsLocation()检查start_(或end_)位置是否位于当前多边形内。如果是这样,请将当前步骤的距离添加到当前国家/地区的距离。

答案 1 :(得分:0)

我不知道我的方法是否比您的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。而且,将每一步的距离加在一起就无需调用任何其他函数。