0
  • すべてのページで Google.maps API を 1 回だけ読み込めるようにしたいと考えています。
  • 次に、地理位置情報を使用したり、Web アプリのどこにでもマップをページにロードしたりしたいと考えています。
  • 問題は、API の読み込みとマップの初期化を分離する方法がわからないことです。つまり、マップを作成するたびに API をロードする必要があります。

記事の後半でほとんどのコードを参照しましたが、次のコードが問題だと思います。そのコードは API の読み込みを処理しますが、同時に initialize() 関数をコールバックとして設定します。関数とそれを呼び出します。

var script = document.createElement("script");
script.type = "text/javascript";
script.src ="http://maps.googleapis.com/maps/api/js?key=mykey&sensor=false&callback=initialize";
document.body.appendChild(script);

API を 1 回読み込み、ヘッダーで言って、特定のページに移動するたびに新しいマップを作成するにはどうすればよいですか。Maps API を再度ロードすることなく。(Jquery モバイルを使用しているため、ヘッダーはセッションで 1 回だけ読み込まれることに注意してください。)

次のエラーが表示されます。

警告: このページには Google Maps API が何度も含まれています。これにより、予期しないエラーが発生する可能性があります。

私の設定を教えてください。

- Google Map API v3 を使用しています

-ページの読み込み後に API を動的に読み込みます。

-Jquery モバイルを使用しています。つまり、Google マップを含むページは、アクセスしたときに部分的にしか再読み込みされません。

-地図の表示と地理位置情報の 2 つの目的で Google マップを使用しています。

-複数のページで Google マップ API を使用しています。

3 つの異なる場所でマップを操作しています。ヘッダーの JavaScript で、以下のコードを参照してください。

  • ヘッダー JavaScript

  • ボディ内の JavaScript

  • マップを保持する本文の DIV。

API の読み込み、地図の表示、マーカーなどを処理する JavaScript のコードは次のとおりです。

        <script>
            $('.error').hide();
            //search criterias
            var radius;
            var timerange;
            var type;
            //user position variables
            var userposition = false;
            var mylatitudedegree = "=55.698";
            var mylongitudedegree = "=12.579";
            //map variables
            var mapready = false;
            var map;
            var bound;
            var markersArray = [];
            //array for keeping track of the markers
            var markercenter;
            //hack
            var pageinit = 0;
            var initializer = 0;
            var triggersearch = 0;
            var loadscripts = 0;
            var isgooglemapsloaded = false;

                $( '#soegsagside' ).live( 'pageinit',function(event)
                {
                pageinit++;

                if (navigator.geolocation) {
                    navigator.geolocation.getCurrentPosition(setPosition, function(error) {
                        alert('Din location er ikke tilgængelig! Error code: ' + error.code);
                        userposition = false;
                    }, {
                        maximumAge : 60000,
                        timeout : 10000,
                        enableHighAccuracy : true
                    });
                } 
                else {
                    alert("Din browser tillader ikke, at vise din lokation!");
                    userposition = false;
                }

                loadScript();       

                $("#search_filter_button").click(function() {
                    //hide the "skal udfyldes" labels
                    $('.error').hide();
                    // validate and process form here
                    radius = $("select#choose_radius_select").val();
                    if (radius == "vælg") {
                        $("label#radius_error").show();
                        $("select#choose_radius_select").focus();
                        return false;
                    }
                    timerange = $("select#choose_timerange_select").val();
                    if (timerange == "vælg") {
                        $("label#timerange_error").show();
                        $("select#choose_timerange_select").focus();
                        return false;
                    }
                    type = $("select#vælg_type").val();
                    if (type == "vælg") {
                        $("label#select_type_error").show();
                        $("select#vælg_type").focus();
                        return false;
                    }
                    //------------------post to php script ---------------
                    var dataString = 'radius=' + radius + '&timerange=' + timerange + '&type=' + type + '&mylatitudedegree=' + mylatitudedegree + '&mylongitudedegree=' + mylongitudedegree;
                    $.ajax({
                        type : "POST",
                        url : "soegsagDB.php",
                        data : dataString,
                        success : function(data) {
                            $('#søgeresultater').html(data);
                            $('#søgeresultater').trigger('create');
                            clearOverlays();
                            createtaskmarkers();
                            findCenterOfMarkers();
                            if (userposition) {
                                usergeoposition = new google.maps.LatLng(mylatitudedegree, mylongitudedegree);
                                map.setCenter(usergeoposition);
                                createuserposition(usergeoposition);
                            } else {
                                map.setCenter(markercenter);
                            }
                            expandMapBoundForMarkers()

                        }
                    });
                    //end of post search query to server
                    return false;
                });
                //end of click seach button
            });
            //end of page ready

            function setPosition(position) {
                userposition = true;
                myposition = position.coords;
                mylatitudedegree = position.coords.latitude;
                mylongitudedegree = position.coords.longitude;
                var milli = new Date();
            }

            //function for clearing the markerArray
            function clearOverlays() {
                for (var i = 0; i < markersArray.length; i++) {
                    markersArray[i].setMap(null);
                }
            }

            //Function for initializing the map, which is called when the map is created
            function initialize() {
                initializer++;
                bound = new google.maps.LatLngBounds();

                var mapOptions = {
                    zoom : 13,
                    center : new google.maps.LatLng(55, 12),
                    mapTypeId : google.maps.MapTypeId.ROADMAP
                }

                //Create a map
                map = new google.maps.Map(document.getElementById("map"), mapOptions);
                mapready = true;
                $("#search_filter_button").trigger('click');//Trigger click on the search button
                triggersearch++;
            }

            //create user positio marker
            function createuserposition(usergeoposition) {
                var userPositionMarker = new google.maps.Marker({
                    position : usergeoposition,
                    map : map,
                    title : "Din position",
                });
                markersArray.push(userPositionMarker);
            }

            function createtaskmarkers() {
                //Create the markers of the tasks
                //1. find the task <li> that contain the data and loop through each one
                //2. for each task collect the dato into variables and create markers and infowindows
                //3. calculate center of point
                //4. extendt map area to contain all points

                var data = $.map($('li'), function(element) {
                    if (element.hasAttribute("data-latitude")) {

                        var tempPos = new google.maps.LatLng($(element).attr('data-latitude'), $(element).attr('data-longitude'));
                        var link = $(element).attr('data-link');
                        var title = $(element).attr('data-title');
                        var type = $(element).attr('data-type');
                        var date = $(element).attr('data-date');

                        tempMarker = new google.maps.Marker({
                            position : tempPos,
                            map : map,
                            title : title,
                        });

                        tempMarker.setIcon('http://maps.google.com/mapfiles/ms/icons/blue-dot.png')

                        var tempContentString = '<div style="width: 200px; height: 100px;">' + date + '<br></br>' + '<a href="' + link + '" rel="external"><b>' + type + ' , ' + title + '</b></a>' + '</div>';

                        //Create infowindow
                        var tempInfowindow = new google.maps.InfoWindow({
                            content : tempContentString
                        });
                        //add market to markerArray
                        markersArray.push(tempMarker);
                        //Create event with infowindow
                        google.maps.event.addListener(tempMarker, 'click', function() {
                            tempInfowindow.open(map, this);
                        });
                    }
                });
            }

            function findCenterOfMarkers() {
                //calculate center of markers and change mapcenter to that
                var sumlatitude = 0;
                var sumlongitude = 0;
                for ( position = 0; position < markersArray.length; position++) {
                    sumlatitude += markersArray[position].getPosition().lat();
                    sumlongitude += markersArray[position].getPosition().lat();
                }
                avglatitude = sumlatitude / markersArray.length;
                avglongitude = sumlongitude / markersArray.length;
                markercenter = new google.maps.LatLng(avglatitude, avglongitude);
            }

            function expandMapBoundForMarkers() {
                //Extend bounds for map to fit all markers into map
                for (var i in markersArray) {
                    bound.extend(markersArray[i].getPosition());
                }
                map.fitBounds(bound);
            }

            //loads the google maps api with KEY and appends the script to the document body
            function loadScript() {
                var script = document.createElement("script");
                script.type = "text/javascript";
                script.src = "http://maps.googleapis.com/maps/api/js?key=AIzaSyC8wZ6RmFySy0DnWvrUaA-2OJqcM1_AOIc&sensor=false&callback=initialize";
                document.body.appendChild(script);
            }
            </script>

ページの本文でマップに関係する唯一のもの。マップが読み込まれる DIV です。

<div id="map" style="width: 80%; height: 280px; margin: auto; background-color: gray">Kortet loader, vent venligst.</div> <!--alternative for full screen style="position:absolute;top:30px;bottom:50px;left:0;right:0;"-->

API は、共通のヘッダー スクリプトにも読み込まれます。通常、他のページにロードする必要があるためです。

<script src='http://maps.google.com/maps/api/js?sensor=false'></script>
4

1 に答える 1

0
<script type="text/javascript">
      $(document).ready( function () {

        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=mynamespace.init_google_maps";
        document.body.appendChild(script);
    $(document).bind('pageinit', function() {
    //do stuff here that happens each time a new page is loaded

    });
    });
}); 
</script>

API は .ready() 内で一度ロードされます。新しいページがロードまたは挿入されるたびに呼び出される .bind() に渡されたコールバックで新しいマップを作成できます。mynamespace 内でマップを初期化できます。mynamespace は、ページに含まれる .js ファイルです

于 2013-02-14T20:06:02.607 に答える