例如,我有一个简单的溃败From Warsaw, Poland To Berlin, Germany by car。现在我可以计算所有路线的距离(572公里)。我如何计算每个国家的距离?德国~100km,波兰~472km。
我尝试使用start_location
为DirectionsLeg
中的每个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。对不起我的英文
答案 0 :(得分:1)
您需要一种方法来避免每个步骤检测国家/地区的请求。
FusionTable包含国家/地区的边界:https://www.google.com/fusiontables/data?docid=16CTzhDWVwwqa0e5xe4dRxQ9yoyE1hVt_3ekDFQ#map:id=3
可能的工作流程:
请求受该路线影响的国家/地区的几何图形。直接使用路径在这里不起作用,因为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/
根据返回的几何图形为每个国家/地区创建一个多边形数组(它们必须不可见)。
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
。而且,将每一步的距离加在一起就无需调用任何其他函数。