我有一个生成 KML 文件的程序,现在想要循环浏览地标以找到最近的地标。但是我在骑自行车时遇到了问题。
基本上,我将 KML 解析为 Google 地球插件。单击 Google 地球插件中的一个地标会得到它的纬度/经度(如 StartLat 和 StartLon)并启动以下代码:
function GetDir()
{
var PlaceMarks=ge.getElementsByType('KmlPlacemark');
i=0;
GetNext=1;
while(i<3)
{
if(GetNext==1)
{
GetNext=0;
var PM2 = PlaceMarks.item(i);
var request=
{
origin: StartLat + ", " + StartLon,
destination: PM2.getGeometry().getLatitude() + ", " + PM2.getGeometry().getLongitude(),
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(result, status)
{
if (status == google.maps.DirectionsStatus.OK)
{
directionDisplay.setDirections(result);
}
});
}
}
}
我在地图上有一个“空闲”侦听器,所以理论上,在它找到方向并显示它们之后,我会增加 1,所以我们移动到下一个地标,并且 GetNext 设置为 1,所以我们调用再次指示。
此刻它咆哮起来,IE8(我们的 IT 部门允许我们使用的唯一浏览器)说脚本运行缓慢。我有一种感觉,使用这个循环,它无法听到响应。
编辑 - 抱歉,应该提到,在同一页面上还有一张显示结果的地图。它在只处理一个(在这个循环之外)时确实有效,而目前这个循环只处理三个(因此是 while(i<3))。这样做的目的是处理大量地标,我可以毫无问题地获得 KML 文件中的地标数量。