1

マップにマーカーを追加できないようです。Google マップ 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 に答える