2011-11-30 235 views
0

,我有以下的Javascript,我修改了标准的谷歌地图API初始化()函数和标准addMarker功能。地图加载和居中,但标记不会被添加到地图中。我看着previous question,但我不知道我做错了..添加标记 - 谷歌地图API V3

<script type="text/javascript"> 
// Note that using Google Gears requires loading the Javascript 
// at http://code.google.com/apis/gears/gears_init.js 

var siberia = new google.maps.LatLng(60, 105); 
var newyork = new google.maps.LatLng(40.69847032728747, -73.9514422416687); 
var usa = new google.maps.LatLng(44.58, -95.46); //middle of the US w 50 states  

var browserSupportFlag = new Boolean(); 

function initialize() { 
    var myOptions = { 
    zoom: 4, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions) 
    map.setCenter(usa); 
} 

function getMyLocation() { 
    var initialLocation= newyork; 
    var myOptions = { 
    zoom: 10, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    // Try W3C Geolocation (Preferred) 
    if(navigator.geolocation) { 
     browserSupportFlag = true; 
     navigator.geolocation.getCurrentPosition(function(position) { 
     initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude); 
     map.setCenter(initialLocation); 
     addMarker(initialLocation); 
    }, function() { 
    handleNoGeolocation(browserSupportFlag); 
    }); 
    // Try Google Gears Geolocation 
    } 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); 
     addMarker(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 Siberia."); 
      initialLocation = siberia; 
     } 
     map.setCenter(usa); 
    } 

} 

function addMarker(location) { 
    marker = new google.maps.Marker({ 
    position: location, 
    map: map, 
    title: "Hello World!" 
    }); 
    //markersArray.push(marker); 
} 
</script> 
+0

你并没有在任何地方调用getLocation函数,因此为什么addMarker也没有被调用... – Flukey

+0

getLocation函数在我按下按钮时被调用.. JK0124

+0

好的,那么在这种情况下,如果你发布了整个代码,它会有所帮助。 – Flukey

回答

0

所以你的问题是与范围有关:

添加这上面你用来初始化函数:

var map; 

而在你的初始化函数改变这一点:

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

这样:

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

你并不需要在你的getLocation功能来重新创建地图:

所以删除这些行:

var myOptions = { 
    zoom: 10, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

这里是与变化的jsfiddle:

http://jsfiddle.net/bQ3AG/

编辑:我刚刚注意到,当你指向他们的位置时,你wa NT缩放级别设置为10

要做到这一点,你可以使用:map.setZoom(10);,而不是通过新的选项。