1

我似乎无法在我的地图上添加标记。我正在使用 Google Maps v.3 和 Ruby on Rails。

这是我的 JavaScript:

<script type="text/javascript">
var map;
    function initialize()
    {
        var lat, lon, myOptions;
        if(navigator.geolocation)
        {
            navigator.geolocation.getCurrentPosition(function(position)
            {
                lat = position.coords.latitude;
                lon = position.coords.longitude;
                myOptions = {
                   center: new google.maps.LatLng(lat, lon),
                   zoom: 8,
                   mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
            },
            function(error)
            {
                alert('Error: An error occur while fetching information from the Google API');
            });
        }
        else 
        {
            alert("Your browser doesn't support geolocations, please consider downloading Google Chrome");
        }
    }

    // Function for adding a marker to the page.
    function addMarker(lat, lng) {
        marker = new google.maps.Marker({
            position: new google.maps.LatLng(lat, lng),
            map: map
        });
    }

</script>

这是 HTML 页面以及我如何称呼它:

<div id="maps">
  <div id="map_canvas" style="width:100%; height:400px">
</div>
<script type="text/javascript">
initialize();
addMarker(46.4352,-80.9455);
</script>
4

1 回答 1

2

这是因为在完成addMarker()之前被调用initialize()

initialize()需要等待来自地理位置 api 的响应,这意味着当您尝试创建标记时地图未初始化。

如果您将 addMarker 包装在回调中并将其传递给初始化函数,该函数在收到响应后调用回调函数,那么它应该按预期工作。

initialize(function() {
    addMarker(46.4352,-80.9455);
});

function initilize(callback) {
    navigator.geolocation.getCurrentPosition(function(position) {
       // set up the map
       callback();
    });
}
于 2013-01-08T06:07:36.753 回答