我使用以下代码获取我的客户地理坐标:
loc={}
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(function(position){
loc.lat = position.coords.latitude;
loc.lng = position.coords.longitude;
});
}
然后我尝试使用以下代码将其转换为谷歌地图坐标
var clientLocation = new google.maps.LatLng(loc.lat, loc.lng);
然而这又回来了
(NaN,NaN)
任何人都可以提出我可能做错的事吗?
答案 0 :(得分:0)
这很可能是因为getCurrentPosition()是异步的,但您期望同步响应。
getCurrentPosition()将您的函数作为参数,我假设它将在运行完毕后调用。您的函数是一个更新loc对象的回调函数。
问题是你期望在getCurrentPosition完成运行之前更新loc。
你应该做的是让你的函数调用LatLng创建,如下所示:
var loc={} // Don't forget the var declaration, or you might mess with the global scope
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(function(position){
loc.lat = position.coords.latitude;
loc.lng = position.coords.longitude;
createLatLng();
});
}
function createLatLng() {
var clientLocation = new google.maps.LatLng(loc.lat, loc.lng);
// and whatever else you need to do when you have the coordinate
}
答案 1 :(得分:0)
实际上,它将loc.lat和loc.lng作为2个参数。这就是你得到的(NaN,NaN)错误。通过直接传递坐标值来使用以下代码,
navigator.geolocation.getCurrentPosition(onSuccess, onError);
function onSuccess(pos) {
var myCenter = new google.maps.LatLng(pos.coords.latitude,pos.coords.longitude);
var mapProp = {
center: myCenter,
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
var marker = new google.maps.Marker({
position: myCenter,
});
marker.setMap(map);
}
function onError(){
alert('error');
}
希望它会帮助你!!!!!