2011-12-27 37 views
13

Soy bastante novato con cosas de javascript y actualmente estoy fingiendo hasta que lo hago jajaja y ahora he encontrado una pequeña colina que estoy luchando por superar: S.Actualizar Marcador Posición Google Maps V3

Actualmente mi script encuentra la ubicación de los usuarios y agrega un pin al mapa mientras copia LatLon en algunos campos de formulario.

Además de solo acercar la ubicación de los usuarios me gustaría que tengan la capacidad de agregar una dirección personalizada que se ingresa en un campo de texto, geocodificado y luego actualiza el pin actual en el mapa.

Todo esto funciona, aunque agrega un pin adicional al mapa en lugar de actualizar el pin actual.

No estoy seguro de cómo pasar el valor de la función de geocodificación de direcciones al pin original/o elimino el pin original y agrego un pin nuevo. Estoy seguro de que puedo volver a utilizar algunas funciones, así ... no creo que mi código es muy eficiente:/

cualquier manera espero un gurú por ahí me puede ayudar a cabo

Saludos Nick

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); 
     } 
    }); 

} 
+0

http: // STACKO verflow.com/questions/6190482/google-maps-api-v3-update-marker –

Respuesta

31

Para 'mover' su marcador existente, se le quiere asegurarse de que es global y entonces usted puede actualizar su posición dentro de la función findAddress con algo como:

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