1

私はこれまで、地図にマーカーを追加する方法に関する公式ドキュメントに従ってきました

それにもかかわらず、私は一度に1つのマーカーしか見ることができません。別のものを追加しようとすると、機能しません(最初のものも表示されません)。私のプロセスは次のとおりです。

gmapsapiを初期化します。

    jQuery(window).ready(function(){ 
        //If we click on Find me Lakes
        jQuery("#btnInit").click(initiate_geolocation);
    });

    function initiate_geolocation() {  
        if (navigator.geolocation)  
        {  
            var script = document.createElement("script");
            script.type = "text/javascript";
            script.src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyBbfJJVh0jL1X9b7XFDcPuV7nHD1HlfsKs&sensor=true&callback=initialize";
            document.body.appendChild(script);

            navigator.geolocation.getCurrentPosition(handle_geolocation_query, handle_errors);
        }  
        else  
        {  
            yqlgeo.get('visitor', normalize_yql_response);
        }  
    }

次に、適切なdivに表示します。しかし、AJAX呼び出しを行う場合、表示したいさまざまなマーカーの場所を取得するために、正しく機能しません。これが単純なマップが表示されたコードです(これまでのところ、これが私のために機能している唯一のものであるため)。

    function handle_geolocation_query(position){ 

        var mapOptions = {
            zoom: 14,
            center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
            mapTypeId: google.maps.MapTypeId.SATELLITE
          }

        alert('Lat: ' + position.coords.latitude + ' ' +  
              'Lon: ' + position.coords.longitude);

        $('#map-canvas').slideToggle('slow', function(){
            var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
        });

        $.when( getLakes(position.coords.latitude, position.coords.longitude)).done(function(results) {
            // InitializeGoogleMaps(results);
            if(results)
            var data = results.map(function (lake) {
                //Check if the lake has any open swims, if not, the button will not be clickable and an alert will pop up
                if (lake.available>0)
                    clickable=true;
                else
                    clickable=false;

                    return {
                        name: lake.name,
                        fishs: lake.fisheryType,
                        swims: lake.swims,
                        dist: lake.distance,
                        lat: lake.latitude,
                        long: lake.longitude,
                        id: lake.id,
                        avail: lake.available,
                        clickable: clickable,
                        route: Routing.generate('lake_display', { id:  lake.id, lat: position.coords.latitude, lng: position.coords.longitude})
                    }
                });

            var template = Handlebars.compile( $('#template').html() );
            $('#list').append( template(data) );


        } );
    };

そこで、AJAX呼び出しの後にマーカーを追加したいと思います。when()で呼び出す必要のある関数を設定しました

function InitializeGoogleMaps(results) {

};

foreachループにマーカーを表示することはできませんが、機能させることはできません。このように見えます:

CentralPark = new google.maps.LatLng(37.7699298, -122.4469157);
marker = new google.maps.Marker({
    position: location,
    map: map
});

どんな助けでも素晴らしいでしょう!

ありがとう

4

1 に答える 1

2

主な問題は、mapslideToggleの匿名コールバックのスコープ内でのみ変数が宣言されることです。まず、最上位の関数スコープで宣言します。

function handle_geolocation_query(position){ 

    var map,
        mapOptions = {
            zoom: 14,
            center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
            mapTypeId: google.maps.MapTypeId.SATELLITE
        }
    ...

次に、slideToggleコールバックを変更して、再宣言する代わりに変数を初期化します。

$('#map-canvas').slideToggle('slow', function(){
    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
});

次にmap、2番目のパラメーターとしてInitializeGoogleMaps関数に渡し、を使用して呼び出す必要がありますInitializeGoogleMaps(results, map)。これがあなたをどこに連れて行くかを見て、質問で私を打ち返してください。

于 2013-03-18T01:57:35.723 に答える