Как установить текущее местоположение GPS-навигатора в качестве переменной для destinationA, чтобы найти расстояние и время - PullRequest
0 голосов
/ 03 апреля 2012

Я использую два скрипта здесь.Сценарий находит ваше текущее местоположение и обновляет карту с помощью маркера, а также отображает текущий адрес в виде текста.

Вторая часть сценария берет введенный вами адрес и вычисляет расстояние ивремя от второй переменной, DestinationA.

В настоящее время DestinationA установлен на «Нью-Йорк, Нью-Йорк, США», но я хочу иметь возможность установить переменную DestinationA в качестве позиции latLng, которая определяется с помощью GPS-навигатора.Как мне добиться этого?

Это мой сценарий:

function $(id) {
    return document.getElementById(id);
}

var trackerId = 0;
var geocoder;
var theUser = {};
var map = {};

function initialize() {
    geocoder = new google.maps.Geocoder();
    if (navigator.geolocation) {
        var gps = navigator.geolocation;
        gps.getCurrentPosition(function (pos) {
            var latLng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
            var opts = {
                zoom: 12,
                center: latLng,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            map = new google.maps.Map($("map_canvas"), opts);
            theUser = new google.maps.Marker({
                position: latLng,
                map: map,
                title: "You!"
            });
            showLocation(pos);
        });
        var trackerId = gps.watchPosition(function (pos) {
            var latLng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
            map.setCenter(latLng);
            theUser.setPosition(latLng);
            showLocation(pos);
        });
    }
}

function showLocation(pos) {
    var latLng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
    if (geocoder) {
        geocoder.geocode({
            'latLng': latLng
        }, function (results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                if (results[0]) {
                    $("location").innerHTML = results[0].formatted_address;
                    var addressinput = results[0].formatted_address;
                    document.getElementById('addressinput').value = addressinput;
                }
            }
        });
    }
}

//Calc Distance/Time - to fix..
var bounds = new google.maps.LatLngBounds();
var markersArray = [];

var destinationA = "New York, NY, USA"; //How do I make this my current position?
var destinationIcon = "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=D|FF0000|000000";
var originIcon = "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=O|FFFF00|000000";

function calculateDistances() {
    if (navigator.geolocation) {
        var gps = navigator.geolocation;
        gps.getCurrentPosition(function (pos) {
            var latLng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
            var opts = {
                zoom: 12,
                center: latLng,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            map = new google.maps.Map($("map_canvas"), opts);
            theUser = new google.maps.Marker({
                position: latLng,
                map: map,
                title: "You!"
            });
            showLocation(pos);
        });
        var trackerId = gps.watchPosition(function (pos) {
            var latLng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
            map.setCenter(latLng);
            theUser.setPosition(latLng);
            showLocation(pos);
        });
    }

    var origin1 = document.getElementById('originDestination').value;
    var service = new google.maps.DistanceMatrixService();
    service.getDistanceMatrix({
        origins: [origin1],
        destinations: [destinationA],
        travelMode: google.maps.TravelMode.DRIVING,
        unitSystem: google.maps.UnitSystem.METRIC,
        avoidHighways: false,
        avoidTolls: false
    }, callback);
}

function callback(response, status) {
    if (status != google.maps.DistanceMatrixStatus.OK) {
        alert('Error was: ' + status);
    } else {
        var origins = response.originAddresses;
        var destinations = response.destinationAddresses;

        deleteOverlays();

        for (var i = 0; i < origins.length; i++) {
            var results = response.rows[i].elements;
            addMarker(origins[i], false);
            for (var j = 0; j < results.length; j++) {
                addMarker(destinations[j], true);

                document.getElementById('duration').value = results[j].duration.text;
                document.getElementById('distance').value = results[j].distance.text;
            }
        }
    }
}

function addMarker(location, isDestination) {
    var icon;
    if (isDestination) {
        icon = destinationIcon;
    } else {
        icon = originIcon;
    }
    geocoder.geocode({
        'address': location
    }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            bounds.extend(results[0].geometry.location);
            map.fitBounds(bounds);
            var marker = new google.maps.Marker({
                map: map,
                position: results[0].geometry.location,
                icon: icon
            });
            markersArray.push(marker);
        } else {
            alert("Geocode was not successful for the following reason: " + status);
        }
    });
}

function deleteOverlays() {
    if (markersArray) {
        for (i in markersArray) {
            markersArray[i].setMap(null);
        }
        markersArray.length = 0;
    }
}

Спасибо за вашу помощь

1 Ответ

1 голос
/ 03 апреля 2012

В обратном вызове gps.getCurrentPosition () и gps.watchPosition () (в зависимости от того, что вы хотите сделать), установите destinationA: destinationA = new google.maps.LatLng (pos.coords.latitude, pos.coords.longitude);

Но я не совсем понимаю, что вы пытаетесь сделать ... Если пункт назначения теперь является пользовательской позицией, то какая отправная точка?

...