这是一个可行的解决方案,它检测用户的位置,在其上放置一个标记并使用您的 Fusion Markers 绘制地图。根据Google Maps v3 API 文档:
$(function() {
var position = new google.maps.LatLng(52.450939, -1.721002);
getCurrentPosition = function(callback) {
// Try W3C Geolocation (Preferred)
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
function(pos) {
position = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
callback(position);
}, callback(position));
} // Try Google Gears Geolocation
else if (google.gears) {
var geo = google.gears.factory.create('beta.geolocation');
geo.getCurrentPosition(
function(pos) {
position = new google.maps.LatLng(pos.latitude,pos.longitude);
callback(position);
}, callback(position));
} // Browser doesn't support Geolocation
else {
// Drop the user off in Coventry =)
callback(position);
}
};
// call the above function
getCurrentPosition(InitMap);
});
function InitMap(pos) {
map = new google.maps.Map(document.getElementById('map_canvas'), {
center: pos,
zoom: 14,
mapTypeId: 'roadmap'
});
var marker = new google.maps.Marker({
position: pos,
animation: google.maps.Animation.DROP,
map: map,
title: "You are here, mate!"
});
var layer = new google.maps.FusionTablesLayer({
query: {
select: 'Geocodable address',
from: '1260763'
},
});
layer.setMap(map);
};
当用户拒绝跟踪他的位置时,会在 中捕获异常getCurrentPosition
,但是,此函数中的第二个可选参数是异常处理程序,所以我所做的只是简单地传入,callback(position)
以便在地图上设置默认位置。如果您不想这样做,请将地图初始化程序代码从InitMap
单独的函数中移出,并在捕获异常时调用它以显示空白地图。
在此处查看实际操作:http: //jsfiddle.net/twGHC/36/
PS 如果您的下一个问题是“如何在标记点击时添加气球弹出窗口”,这就是您需要做的。