Разрешить добавление только одного маркера за раз - PullRequest
0 голосов
/ 20 июня 2011

Интересно, может ли кто-нибудь помочь мне с простым, как я надеюсь, решением?

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

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

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.TERRAIN,
    mapTypeControl: true,
    mapTypeControlOptions: {
        style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
        position: google.maps.ControlPosition.TOP_LEFT
    },
    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('Address').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({
        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);   
    } 
    ); 
    }
    } 
    )
    }
    })();

1 Ответ

0 голосов
/ 21 июня 2011

Простой способ сделать это - сохранить текущий редактируемый маркер в глобальной переменной.Всякий раз, когда пользователь нажимает «Сохранить», вы должны убедиться, что пользователь больше не может его редактировать.

Полезно помнить, что если вы когда-нибудь захотите снова отредактировать какой-либо из этих маркеров, вам потребуетсяхранить их как-нибудь.Массив - это нормальный способ сделать это.Итак, другими словами.Что бы вы сделали:

Пользователь вводит местоположение.Геокод возвращает результат.Создайте новый маркер с этим местоположением и сохраните его в глобальной переменной.Если пользователь меняет местоположение, вы меняете местоположение на этом маркере.Если пользователь нажимает сохранить, вы очищаете переменную.Когда пользователь хочет создать новый маркер, вы просто назначаете глобальную переменную новому экземпляру маркера.

И не забудьте сохранить «сохраненные» маркеры в массиве, если вам когда-нибудь понадобится доступ к ним снова.Если вы этого не сделаете, маркеры все еще будут существовать и будут отображаться на карте, но у вас нет возможности получить к ним доступ.

Надеюсь, что это помогло.

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