google maps/gmap3 - прокладка маршрута к известному пункту назначения из геолокации пользователя - требуется помощь

Я пытаюсь написать сценарий, который получит геолокацию пользователя - если он у него включен, и проложит маршрут до заранее определенного пункта назначения. если у них не включена геолокация, он должен просто отобразить заранее определенное местоположение. скрипт не работает, но вы должны иметь возможность получить хорошее представление о том, что я пытаюсь сделать, просмотрев код. я на правильном пути? Кто-нибудь может определить, почему это не работает?

<script type="text/javascript">
       $(function (){

        var dest = "Unit 20, Tallaght Business Centre, Whitestown Road, Tallaght Business Park, Ireland";

        if(geolocEnabled()){
            getLocation();
        }else{
            plotMarker(dest);
        }

        //check if geolocation enabled
        function geolocEnabled(){
            return navigator.geolocation;
        }

        //plot marker for VRF office
        function plotMarker(dest){
            $('#map').gmap3(
              { action: 'addMarker',
                address: dest,
                map:{
                  center: true,
                  zoom: 14
                },
                marker:{
                  options:{
                    draggable: false
                  }
                }
              }
            );
        }

        //get user's location
        function getLocation(){
            $('#map').gmap3(
            { action : 'geoLatLng',
              callback : function(latLng){
                if (latLng){
                  plotRoute(latLng, dest);  
                  return;
                } else {
                  alert("Unable to determine your location. Enable geolocation services and try again, or consult the map for our location.");
                  plotMarker(dest);
                }
              }
            });
          }

        //plot route
        function plotRoute(latLng, dest){
        $('#map').gmap3(
          { action:'getRoute',
            options:{
              origin: latLng,
              destination: dest,
              travelMode: google.maps.DirectionsTravelMode.DRIVING
            },
            callback: function(results){
              if (!results) return;
              $(this).gmap3(
                { action:'init', 
                  zoom: 7, 
                  mapTypeId: google.maps.MapTypeId.ROADMAP, 
                  streetViewControl: true,
                  center: [53.337433,-6.2661]
                },
                { action:'addDirectionsRenderer',
                  panelID: 'directions-panel',
                  options:{
                    preserveViewport: true,
                    draggable: false,
                    directions:results
                  }
                }
              );
            }
          }
        );
      }

    });
    </script>

вся помощь очень ценится.

РЕДАКТИРОВАТЬ: я даже не получаю предупреждение геолокации в браузере, когда я запускаю скрипт.

РЕДАКТИРОВАТЬ: я удалил {timeout: 10000} из getLocation, теперь он получает предупреждение. скрипт обновлен.

1 ответ

Решение

Геолокация является асинхронным процессом, результат не будет доступен, когда getLocation() закончен.

Вызов plotRoute() внутри обратного вызова $.gmap3.geoLatLng и предоставить ожидаемые аргументы (latLng, dest)

Другие вопросы по тегам