Обратное геокодирование с динамической формой

Я пытался найти способ использовать службу «Обратное геокодирование» с координатами широты и долготы, поступающими из двух текстовых полей в моей HTML-форме, и я должен признать, что не совсем уверен, что мне нужно делать .

Мне удалось сделать это с помощью службы «Геокод» (см. Код ниже), но мне просто интересно, сможет ли кто-нибудь указать мне правильное направление того, как я могу адаптировать javascript «Геокод», который у меня есть, к «Обратному Сервис геокогинга.

(function Geocode() {

    // This is defining the global variables
    var map, geocoder, myMarker;

    window.onload = function() {

        //This is creating the map with the desired options
        var myOptions = {
            zoom: 5,
            center: new google.maps.LatLng(55.378051,-3.435973),
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            mapTypeControl: true,
            mapTypeControlOptions: {
                style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
                position: google.maps.ControlPosition.BOTTOM
            },
            navigationControl: true,
            navigationControlOptions: {
                style: google.maps.NavigationControlStyle.ZOOM_PAN,
                position: google.maps.ControlPosition.TOP_RIGHT
            },
            scaleControl: true,
            scaleControlOptions: {
                position: google.maps.ControlPosition.BOTTOM_LEFT
            }
        };

        map = new google.maps.Map(document.getElementById('map'), myOptions);

        // This is making the link with the 'Search For Location' HTML form
        var form = document.getElementById('SearchForLocationForm');

        // This is catching the forms submit event
        form.onsubmit = function() {

            // This is getting the Address from the HTML forms 'Address' text box
            var address = document.getElementById('GeocodeAddress').value;

            // This is making the Geocoder call
            getCoordinates(address);

            // This is preventing the form from doing a page submit
            return false;
        }
    }

    // This creates the function that will return the coordinates for the address
    function getCoordinates(address) {

        // This checks to see if there is already a geocoded object. If not, it creates one
        if(!geocoder) {
            geocoder = new google.maps.Geocoder();
        }

        // This is creating a GeocoderRequest object
        var geocoderRequest = {
            address: address
        }

        // This is making the Geocode request
        geocoder.geocode(geocoderRequest, function(results, status) {

            // This checks to see if the Status is 'OK 'before proceeding
            if (status == google.maps.GeocoderStatus.OK) {

                // This centres the map on the returned location
                map.setCenter(results[0].geometry.location);

                // This creates a new marker and adds it to the map
                var myMarker = new google.maps.Marker({
                    map: map, 
                    zoom: 12,
                    position: results[0].geometry.location,
                    draggable:true
                });

                //This fills out the 'Latitude' and 'Longitude' text boxes on the HTML form
                document.getElementById('Latitude').value=  results[0].geometry.location.lat();
                document.getElementById('Longitude').value=  results[0].geometry.location.lng();

                //This allows the marker to be draggable and tells the 'Latitude' and 'Longitude' text boxes on the HTML form to update with the new co-ordinates as the marker is dragged
                google.maps.event.addListener(     
                    myMarker,     
                    'dragend',     
                    function() {         
                        document.getElementById('Latitude').value = myMarker.position.lat();         
                        document.getElementById('Longitude').value = myMarker.position.lng(); 

                        var point = myMarker.getPosition();
                        map.panTo(point);   
                    } 
                ); 
            }
        } 
        )
    }
})();

ОБНОВИТЬ

Во-первых, большое спасибо за код, который вы любезно разместили, и за предложение посмотреть документацию Google.

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

Большое спасибо и с уважением

(function ReverseGeocode() {

    var form, geocoderRequest, latlng, myMarker, point;

    window.onload = function() {

        //This is creating the map with the desired options
        var myOptions = {
            zoom: 5,
            center: new google.maps.LatLng(55.378051,-3.435973),
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            mapTypeControl: true,
            mapTypeControlOptions: {
                style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
                position: google.maps.ControlPosition.BOTTOM
            },
            navigationControl: true,
            navigationControlOptions: {
                style: google.maps.NavigationControlStyle.ZOOM_PAN,
                position: google.maps.ControlPosition.TOP_RIGHT
            },
            scaleControl: true,
            scaleControlOptions: {
                position: google.maps.ControlPosition.BOTTOM_LEFT
            }
        };

        map = new google.maps.Map(document.getElementById('map'), myOptions);

        var latlng = new google.maps.LatLng('Latitude', 'Longitude');

        // This is making the Geocode request
        geocoder.geocode({'LatLng': latlng}, function(results, status) {  

            if (status == google.maps.GeocoderStatus.OK) {                    
                if (results[1]) {           
                    map.setZoom(11);          
                    var myMarker = new google.maps.Marker({               
                        position: results[0].geometry.location, 
                        map: map  
                    });
                    //This fills out the 'Address' text boxe on the HTML form
                    document.getElementById('Address').value=  results[0].geometry.location.latlng();

                    var point = myMarker.getPosition();
                    map.panTo(point);   
                } 
            }
        }
)}})

person IRHM    schedule 18.06.2011    source источник


Ответы (1)


Когда у вас есть широта и долгота из вашей формы, вы делаете что-то вроде этого (используя приведенный выше код в качестве отправной точки для ясности):

var latlng = new google.maps.LatLng(latitudeFromForm,longitudeFromForm);

// This is creating a GeocoderRequest object
var geocoderRequest = {
    'latlng':latlng
}

// This is making the Geocode request
geocoder.geocode(geocoderRequest, function(results, status) {

// This checks to see if the Status is 'OK 'before proceeding
if (status == google.maps.GeocoderStatus.OK) {
    // Do stuff with the result here
}

Если вы еще не читали его, вы можете прочитать раздел «Обратное геокодирование» в http://code.google.com/apis/maps/documentation/javascript/services.html#ReverseGeocoding.

person Trott    schedule 18.06.2011
comment
Привет, большое спасибо за вашу помощь. Я придумал кое-какой пересмотренный код, но должен признать, будучи новичком на этом сайте, я не уверен, как опубликовать ответ помимо «Количества символов», установленного в разделе «Добавить комментарии». Возможно, вы могли бы посоветовать, есть ли способ обойти это? Большое спасибо и привет. - person IRHM; 19.06.2011
comment
Если в вашем исправленном коде все еще есть проблемы, которые вы пытаетесь решить, отредактируйте исходный вопрос и вставьте новый код внизу с примечанием, объясняющим, что это обновление и в чем заключается оставшаяся проблема. Если ваш код является решением, опубликуйте его как ответ. Если мой ответ (или чей-то ответ) решил вашу проблему, установите флажок рядом с этим ответом, чтобы другие знали, какой ответ правильный. Если ответ помог вам, но не обязательно решил вашу проблему, щелкните стрелку вверх рядом с ответом, чтобы указать, что в ответе есть полезная информация. - person Trott; 20.06.2011
comment
Привет, большое спасибо за ваше предложение. Я работал с этим в течение последних нескольких дней, и теперь у меня есть это для работы. С уважением. - person IRHM; 23.06.2011