Ответ 1
Код внутри вашего вопроса немного запутанный, трудно сказать, в чем проблема, когда вы публикуете только фрагменты.
Как это, этот код:
var lat = (e.latlng.lat);
var lng = (e.latlng.lng);
var newLatLng = new L.LatLng(lat, lng);
marker.setLatLng(newLatLng);
.. должен работать как ожидалось внутри onLocationFound()
.
Вы можете упростить его:
marker.setLatLng(e.latlng);
Однако, я думаю, проблема связана с проблемой области, некоторые из ваших переменных (например, маркер) недоступны внутри onLocationFound.
Вот пример, как его достичь:
function init(){
var map = L.map('map', {center: [51.505, -0.09], zoom: 13}),
marker = L.marker(map.getCenter()).addTo(map),
glcl = google.loader.ClientLocation,
onLocationfound = function(e){
marker.setLatLng(e.latlng);
map.setView(marker.getLatLng(),map.getZoom());
alert('Marker has been set to position :'+marker.getLatLng().toString());
};
L.tileLayer('http://{s}.tile.cloudmade.com/[yourCloudmadeKey]/997/256/{z}/{x}/{y}.png').addTo(map);
map.on('locationfound', onLocationfound);
if(glcl){//when google.loader.ClientLocation contains result
onLocationfound({latlng:[glcl.latitude,glcl.longitude]});
}else{alert('google.loader.ClientLocation fails');}
map.locate();
}