2013-04-08 2 views
0

У меня есть программа, которая генерирует файлы KML, и теперь вы хотите циклически перемещаться по меткам, чтобы найти ближайший. Но у меня проблемы с велосипедом.API Карт Google - хотите пройти и проложить маршрут для точек в KML

В принципе, я разбираю KML в плагине Google Планета Земля. При нажатии на одну из меток в плагин Google Earth получает это широта/долгота (как 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); 
     } 
     }); 
    } 
    } 
} 

У меня есть «холостой ход» слушатель на карте так, теоретически , после того, как он найдет направления и отобразит их, i увеличивается на 1, поэтому мы переходим к следующей метке, а GetNext устанавливается в 1, поэтому мы снова вызываем направления.

В данный момент он зарывается, и IE8 (единственный браузер, который наш ИТ-отдел позволит нам использовать) говорит, что скрипт работает медленно. У меня такое чувство, что, используя этот цикл, он не может слушать ответ.

EDIT - извините, должен был упомянуть, есть также карта на той же странице, которая показывает результат. Он работает только при одном (за пределами этого цикла), в то время как в данный момент этот цикл имеет дело только с тремя (следовательно, while (i < 3)). Цель состоит в том, чтобы это касалось множества меток, и я могу получить количество меток в файле KML без проблем.

ответ

0

Решено. Вместо того, чтобы увеличивать все на прослушивателе Idle, я вместо этого заставил прослушиватель Idle вызывать процедуру, которая переместилась в следующую точку. Соответствующий код:

Это помещает файл KML, в API Google Earth, и присоединяет код для запуска на велосипеде через:

function GetKML() 
{ 
    if (currentKmlObject) 
    ge.getFeatures().removeChild(currentKmlObject); 
    var KmlBox = document.getElementById('kml-box'); 
    var KmlString = KmlBox.value; 
    try 
    { 
    currentKmlObject=ge.parseKml(KmlString); 
    ge.getFeatures().appendChild(currentKmlObject); 
    google.earth.addEventListener(currentKmlObject, 'click', function(event) 
    { 
     var placemark = event.getTarget(); 
     StartLat = placemark.getGeometry().getLatitude(); 
     StartLon = placemark.getGeometry().getLongitude(); 
     alert('Start point set. Latitude: ' + StartLat + ' Longitude: ' + StartLon + '. Finding nearest...'); 
     AreWeSearching=1; 
     i=0; 
     GetDir(); 
    }); 
    var PlaceMarks=ge.getElementsByType('KmlPlacemark'); 
    KMLLength=PlaceMarks.getLength(); 
    alert('KML parsed and added. ' + KMLLength + ' points available. Please click which placemark you would like as your START point on the EARTH screen.'); 
    } 
    catch(ex) 
    { 
    alert('Parse error'); 
    } 
} 

Это код функцию GetDir который опрашивает метки. На данный момент это идет только до 10, но я буду использовать длину меток:

function GetDir() 
{ 
    if(i==10){AreWeSearching=0;} 
    if(AreWeSearching==1) 
    { 
    var PlaceMarks=ge.getElementsByType('KmlPlacemark'); 
    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); 
     } 
    }); 
    i=i+1; 
    } 
} 

На холостом ходу слушателя в API Карт он вызывает функцию GetDir снова, так что по сути это называется на первый раз и, всякий раз, когда он простаивает, получает вызов снова, пока мы не перестанем его переживать.

В принципе, я строю его для (для тех, кто еще не работал), так что я могу найти ближайшую метку для метки, которую я нажимаю. Используя немного дополнительного кода, он позволит мне маршрутизировать метки меток KML, начиная с выбранной метки.

Итак, для тех, кому нужен способ маршрутизации файла KML из вашего жесткого диска, создайте страницу с плагином Google Планета Земля и плагином Google Maps. Загрузите KML в Google Планета Земля, как я уже сделал, затем используйте Google Maps и прослушиватель Idle для циклического перехода.

 Смежные вопросы

  • Нет связанных вопросов^_^