Вызов это из навигатора .geolocation.getCurrentPosition - PullRequest
1 голос
/ 30 августа 2011

Самый простой способ показать вам, что я пытаюсь сделать с рабочей версией: http://jsfiddle.net/t8Brm/11/ Требуются современные браузеры с поддержкой GEO Location.

В коде JS я закомментировал код, который вызывает проблему, чтобы вы могли увидеть, как он работает в первую очередь.

Вопрос в следующем: как я могу раскомментировать код ниже, который использует географическое положение, чтобы добавить маркер и центрировать карту, не получая Error: position.coords is undefined

$(this).trigger("gMap.addMarker", {
     latitude: latitude,
     longitude: longitude,
     content: "You Are Here"
});
$(this).trigger("gMap.centerAt", {
     latitude: latitude,
     longitude: longitude
});

Это оригинальный плагин: http://github.com/marioestrada/jQuery-gMap Я добавил дополнительные функции для GEO Location. Показано ниже:

function generateDirections(from, to, directionHtml){
            var directionsDisplay;
            var directionsService = new google.maps.DirectionsService();

            $('#'+directionHtml).html('');

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

            directionsDisplay = new google.maps.DirectionsRenderer();
            directionsDisplay.setMap($gmap);
            directionsDisplay.setPanel(document.getElementById(directionHtml));
            directionsService.route(request, function(response, status){
                if(status == google.maps.DirectionsStatus.OK){
                    directionsDisplay.setDirections(response);
                    if($("#gmaps_from").val().length === 0)
                        $("#gmaps_from").val(response.routes[0].legs[0].start_address);
                }
            });

            setTimeout(function(){
                $("#"+directionHtml).slideDown("slow");
            },1000);
        }

        //make this available to the click element
        $.data($('#gmaps_getdirections')[0], 'inst', this);

        $('#gmaps_getdirections').click(function(e) {
            e.preventDefault();

            var from = $('#gmaps_from').val();
            if(opts.address){
                var to = opts.address;
            } else {
                var to = parseFloat(opts.latitude) + ", " + parseFloat(opts.longitude);
            }

            generateDirections(from, to, "gmaps_directions");

            //open the google window
            //window.open("http://maps.google.com/maps?saddr=" + from + "&daddr=" + to, "GoogleWin", "menubar=1,resizable=1,scrollbars=1,width=750,height=500,left=10,top=10");
        });

        if(opts.geolocation && navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(function(position){
                var latitude = position.coords.latitude;
                var longitude = position.coords.longitude;

                var from = parseFloat(latitude) + ", " + parseFloat(longitude);

                if(opts.address){
                    var to = opts.address;
                } else {
                    var to = parseFloat(opts.latitude) + ", " + parseFloat(opts.longitude);
                }

                /*$(this).trigger("gMap.addMarker", {
                    latitude: latitude,
                    longitude: longitude,
                    content: "You Are Here"
                });
                $(this).trigger("gMap.centerAt", {
                    latitude: latitude,
                    longitude: longitude
                });*/

                generateDirections(from, to, "gmaps_directions");                    
            });
        }

Ответы [ 2 ]

0 голосов
/ 02 сентября 2011

Вы можете выполнить эквивалентный код JavaScript API v3 следующим образом:

new google.maps.Marker({position:new google.maps.LatLng(latitude,longitude),
    map:$gmap,
    title:"You Are Here"});
$gmap.setCenter(new google.maps.LatLng(latitude,longitude));

Замена закомментированного кода этим в jsFiddle помещает маркер на карту и мгновенно центрирует карту в вашем местоположении.

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

0 голосов
/ 02 сентября 2011

Хорошо - при тестировании в FF - вот что я обнаружил - $(this).trigger("gMap.addMarker", {... вызывает повторную оценку вашей функции. В первый раз он находит lat / long, но после вызова триггера та же функция вызывается снова с позицией, указывающей на функцию снова.

Я не знаком с плагином, но я пытался запустить его на элементе (#google_maps): http://jsfiddle.net/t8Brm/18.

Это исправляет проблему рекурсивного вызова, но выдает другое исключение. Указана неверная или недопустимая строка.

Надеюсь, это направит вас в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...