Подтвердить что ты не робот

Обновить положение маркера Карты Google V3

Я новичок в javascript-материале, и в настоящее время я обманываю его, пока я не сделаю его lol, и теперь я натолкнулся на небольшой холм, над которым я изо всех сил стараюсь перебраться: S.

В настоящее время мой script находит местоположение пользователя и добавляет булавку к карте при копировании LatLon в некоторые поля формы.

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

Все это работает, хотя добавляет дополнительный вывод к карте, а не обновляет текущий вывод.

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

В любом случае, я надеюсь, что гуру там может помочь мне.

Приветствия Ник

 var geocoder;
 var map;
 var pos;


function initialize() {

geocoder = new google.maps.Geocoder();
var newyork = new google.maps.LatLng(40.69847032728747, -73.9514422416687);
var address = document.getElementById("address").value;
var initialLocation;

var myOptions = {
  zoom: 12,
  center: initialLocation,
  mapTypeId: google.maps.MapTypeId.TERRAIN
}


// Try HTML5 geolocation
    if(navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(function(position) {
        var pos = new google.maps.LatLng(position.coords.latitude,
                                         position.coords.longitude);


        var marker = new google.maps.Marker({
          map: map,
          position: pos,
          title: 'Location found using HTML5.',
          draggable: true
        });



        var lat = position.coords.latitude
        var lng = position.coords.longitude
        document.getElementById('geo_latitude').value=lat;
        document.getElementById('geo_longitude').value=lng;

        google.maps.event.addListener(marker, "dragend", function(event) {

            var lat = event.latLng.lat()
            var lng = event.latLng.lng()

            var infowindow = new google.maps.InfoWindow({
                content: '<b><?php _e('Latitude:');?></b>' + lat + '<br><b><?php _e('Longitude:');?></b>' + lng
             });
            infowindow.open(map, marker);

            google.maps.event.addListener(marker, "dragstart", function() {

                infowindow.close();
             });

        document.getElementById('geo_latitude').value=lat;
        document.getElementById('geo_longitude').value=lng;


        });


        map.setCenter(pos);
      }, function() {
        handleNoGeolocation(true);
      });

    } else if (google.gears) {
        browserSupportFlag = true;
        var geo = google.gears.factory.create('beta.geolocation');
        geo.getCurrentPosition(function(position) {
          initialLocation = new google.maps.LatLng(position.latitude,position.longitude);
          map.setCenter(initialLocation);
        }, function() {
          handleNoGeoLocation(browserSupportFlag);
        });
      // Browser doesn't support Geolocation


      } else {
        browserSupportFlag = false;
        handleNoGeolocation(browserSupportFlag);
      }


      function handleNoGeolocation(errorFlag) {
        if (errorFlag == true) {
          alert("Geolocation service failed.");
          initialLocation = newyork;
        } else {
          alert("Your browser doesn't support geolocation. We've placed you in New York.");
          initialLocation = newyork;
        }
        map.setCenter(initialLocation);
      }


 map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
 }

  //-------------------------------------------------------End initialize

  function findAddress(address) {

var address = document.getElementById("address").value;

    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        var pos = results[0].geometry.location;

      } else {
        alert("Geocode was not successful for the following reason: " +   status);
      }
    });

}
4b9b3361

Ответ 1

Чтобы "переместить" ваш существующий маркер, вы хотите убедиться, что его глобальный, а затем вы можете просто обновить свою позицию в функции findAddress с помощью чего-то вроде:

marker.setPosition(results[0].geometry.location);