Проложить маршрут до маркера Google Maps - PullRequest
0 голосов
/ 06 марта 2012

Я пытаюсь проложить маршрут до позиции маркера Google Maps из почтового индекса, который пользователь может ввести в текстовое поле.Я использую Карты, Места и Направления Библиотеки Google.

Я нашел этот пример от Google, и я пытаюсь работать с ним http://code.google.com/apis/maps/documentation/directions/

Я думаю, что я в значительной степени там.Я хочу, чтобы пользователь мог щелкнуть маркер на карте, а затем щелкнуть ссылку с надписью «Маршруты от первого маркера».Я могу заставить это отображаться правильно, и я передаю правильное местоположение в функцию, но по какой-то причине она не сохраняет все координаты широты.Похоже, что он отбрасывает один из них, и поэтому выдает ошибку.Если я распечатываю то, что передаю новой функции (placeLoc), она показывает только одну из координат.

выдает ошибку: Uncaught Error: недопустимое значение для свойства: -0.5796900000000278

Вот код, который я получил до сих пор:

        function addPlaceResults(){

    var request = {
        location: midWayPoint,
        radius: 7000,
        types: [type]
    };

    infowindow = new google.maps.InfoWindow();
    var service = new google.maps.places.PlacesService(map);
    service.search(request, callback);
    service.getDetails(request, callback);


    function callback(results, status) {
        if (status == google.maps.places.PlacesServiceStatus.OK) {
            for (var i = 0; i < results.length; i++) {
            createMarker(results[i]);
            }
        }   
    }

    function createMarker(place) {
        var placeLoc = place.geometry.location;
        var marker = new google.maps.Marker({
            map: map,
            position: place.geometry.location
        });

        var request = { reference: place.reference };
        service.getDetails(request, function(details, status) {

            google.maps.event.addListener(marker, 'click', function() {
                infowindow.setContent(
                    details.name + "<br />" 
                    + details.formatted_address + "<br />" 
                    + "<a target='_blank' href='" + details.website +"'>Visit Website</a>" + "<br />" 
                    + details.formatted_phone_number + "<br />"
                    + "<a href='#' onclick='dPoint1(" +placeLoc+ ")'>Directions from Marker One</a>" + "<br />"

                );
             infowindow.open(map, this);
            });
        });
    }
};

        //directions from point one
        function dPoint1(x) {
    console.log(x);
    directionsService = new google.maps.DirectionsService();
    directionsDisplay = new google.maps.DirectionsRenderer({
        suppressMarkers: true,
        suppressInfoWindows: true
    });

    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById('directions-panel'));

    var request = {
        origin: address1, 
        destination: x,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
    };

    directionsService.route(request, function(response, status){
        if (status == google.maps.DirectionsStatus.OK) 
        {
            directionsDisplay.setDirections(response);
        }
    });
};

Я пытался включить в этот вопрос только соответствующий код и подробности.Если есть что-то, что я пропустил, или что-то непонятное, пожалуйста, дайте мне знать, и я добавлю это / сделаю все возможное, чтобы прояснить себя.

Еще раз, я буду очень признателен за любую помощь.

Приветствия JA


Редактировать

Хорошо, это имеет смысл.Спасибо, парни.

Я пытался использовать метод toString (), но это не работает.Я могу успешно передать строку с двумя значениями, разделенными запятой, в функцию dPoint1 с помощью toUrlValue ().Когда я делаю это, я могу вывести их обоих на консоль, используя console.log (x, y), но на самом деле я не могу запустить код.Я получаю ту же ошибку, что и раньше.

Я думаю, что проблема в том, что мне нужно, чтобы они были чем-то единым, поэтому я могу добавить его в 'destination:', например, в конечном итоге это должно быть destination: x, но, поскольку мне нужно передать x & y в Iдолжен иметь пункт назначения: x, y, который выдает ошибку.

Я предполагаю, что мне нужно использовать метод google.maps.LatLng ().

Я добавил это поздно вечером:

newlatlng = new google.maps.LatLng((placeLoc.lat()+placeLoc.lat()));

, который дал мне несколько указаний, но не в нужном месте!

У кого-нибудь есть идеи о том, как я могу это использовать?

Большое спасибо за всю ту помощь, которую вы мне оказали.

JA

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Это не сработает

onclick='dPoint1(" +placeLoc+ ")'

потому что вы не можете передавать объекты таким функциям: объединение его в виде строки приведет к строковому представлению, которое, вероятно, будет иметь вид "x, y". Вам нужно определить функцию dPoint1, которая будет принимать x и y - что вполне может сработать, - но было бы лучше явно передавать литеральные значения, полученные из placeLoc.

0 голосов
/ 06 марта 2012

Как упоминалось Andrew Leach:

onclick='dPoint1(" +placeLoc+ ")'

Не будет работать, поскольку place.geometry.location является google.maps.LatLng объектом: http://code.google.com/apis/maps/documentation/javascript/reference.html#PlaceGeometry

Однако класс google.maps.LatLng имеет toString() метод: http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLng

Вы можете попробовать использовать его вместо передачи объекта google.maps.LatLng в метод dPoint1().

Например,

onclick='dPoint1(" +placeLoc.toString()+ ")' 
...