簡體   English   中英

Javascript數組將其推送(Salt n Pepa樣式)

[英]Javascript array push it (Salt n Pepa style)

嘿,向我添加有關Google Maps API V3的數組時,我需要一些幫助。

以下是我用位置標記填充地圖的代碼:

var geocoder;
var map;
var infowindow = null;
var addresses = [];
var theMarkers = [];

function initialize() {
    var centerMap = new google.maps.LatLng(45.3517923, 6.3101660);

    geocoder = new google.maps.Geocoder();    
    addresses.push("11111","22222","33333");

    for(i in addresses) {
          var address = addresses[i];

          geocoder.geocode( { 'address': address}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var bounds = new google.maps.LatLngBounds();

                map.setCenter(results[0].geometry.location);

                var marker = new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location
                });

                var tmpAddress = results[0].formatted_address;

                tmpAddress = tmpAddress.split(',');             
                theMarkers.push([tmpAddress[0], results[0].geometry.location.lat(), results[0].geometry.location.lng(), i, 'This location is ' + tmpAddress[0]]);
            } else {
                alert('Geocode was not successful for the following reason: ' + status);
            }
          });
    }

    /*theMarkers = [
        ['city1', 00.0000, -00.000000, 1, 'This is HTML Test 1'],
        ['city2', 00.00000, -00.000000000, 2, 'This is HTML Test 2'],
        ['city3', 00.00000, -00.000000, 3, 'This is HTML Test 3']
    ];*/

    var mapOptions = {
        zoom: 0,
        center: centerMap,
        panControl: false,
        zoomControl: false,
        scaleControl: false,
        streetViewControl: false,
        mapTypeControl: false
    }

    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
    setZoom(map, theMarkers);
    setMarkers(map, theMarkers);    

    infowindow = new google.maps.InfoWindow({
        content: "Loading..."
    });
}

function setZoom(map, markers) {
    var boundbox = new google.maps.LatLngBounds();

    for ( var i = 0; i < markers.length; i++ )
    {
      boundbox.extend(new google.maps.LatLng(markers[i][1], markers[i][2]));
    }

    map.setCenter(boundbox.getCenter());
    map.fitBounds(boundbox);
}

function setMarkers(map, markers) {
    for (var i = 0; i < markers.length; i++) {
        var site = markers[i];
        var site = markers[i];
        var siteLatLng = new google.maps.LatLng(site[1], site[2]);      
        var marker = new google.maps.Marker({
            position: siteLatLng,
            map: map,
            title: site[0],
            zIndex: site[3],
            html: site[4],
            draggable: false,
            //Markers drop on the map
            animation: google.maps.Animation.DROP
        });

        google.maps.event.addListener(marker, "click", function () {
            infowindow.setContent(this.html);
            infowindow.open(map, this);
            //marker.setAnimation(google.maps.Animation.BOUNCE);
        });
    }
}

雖然工作沒有上面我的錯誤不再有圍繞我靜態設置theMarkers時使用有標記的區域變焦。

for(在地址中的i){}中使用theMarkers.push時 ,地圖如下所示:

沒有變焦

但是當我完成for(i在地址中){} 之后手動制作標記時:

theMarkers = [
    ['city1', 00.0000, -00.000000, 1, 'This is HTML Test 1'],
    ['city2', 00.00000, -00.000000000, 2, 'This is HTML Test 2'],
    ['city3', 00.00000, -00.000000, 3, 'This is HTML Test 3']
];

然后,地圖如下所示:

放大

我需要讓它在循環中完成。

地理編碼器是異步的,您需要在要運行的最后一個回調中設置縮放。 最簡單的修復方法是,將bounds.extend / fitBounds移動到回調中並使邊界成為全局:

bounds.extend(results[0].geometry.location);
geocodedResults++;
if (geocodedResults >= (addresses.length - 1)) map.fitBounds(bounds);

更新了初始化函數:

function initialize() {
    var centerMap = new google.maps.LatLng(45.3517923, 6.3101660);

    geocoder = new google.maps.Geocoder();
    addresses = ["New York, NY", "Newark, NJ", "Philadelphia, PA"];

    for (var i = 0; i < addresses.length; i++) {
        var address = addresses[i];
        geocoder.geocode({
            'address': address
        }, function (results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                map.setCenter(results[0].geometry.location);

                var marker = new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location
                });

                var tmpAddress = results[0].formatted_address;

                tmpAddress = tmpAddress.split(',');
                theMarkers.push([tmpAddress[0], results[0].geometry.location.lat(), results[0].geometry.location.lng(), i, 'This location is ' + tmpAddress[0]]);
                bounds.extend(results[0].geometry.location);
                geocodedResults++;
                if (geocodedResults >= (addresses.length - 1)) map.fitBounds(bounds);
            } else {
                alert('Geocode was not successful for the following reason: ' + status);
            }
        });
    }

    var mapOptions = {
        zoom: 0,
        center: centerMap,
        panControl: false,
        zoomControl: false,
        scaleControl: false,
        streetViewControl: false,
        mapTypeControl: false
    };

    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    setMarkers(map, theMarkers);

    infowindow = new google.maps.InfoWindow({
        content: "Loading..."
    });
}

工作小提琴

代碼段:

 var map; var bounds = new google.maps.LatLngBounds(); var infowindow = null; var addresses = []; var theMarkers = []; var geocodedResults = 0; function geocodeAddress(address, i) { geocoder.geocode({ 'address': address }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); var tmpAddress = results[0].formatted_address; tmpAddress = tmpAddress.split(','); theMarkers.push([tmpAddress[0], results[0].geometry.location.lat(), results[0].geometry.location.lng(), i, 'This location is ' + tmpAddress[0]]); bounds.extend(results[0].geometry.location); geocodedResults++; if (geocodedResults >= (addresses.length - 1)) map.fitBounds(bounds); } else { alert('Geocode was not successful for the following reason: ' + status); } }); } function initialize() { var centerMap = new google.maps.LatLng(45.3517923, 6.3101660); geocoder = new google.maps.Geocoder(); addresses = ["New York, NY", "Newark, NJ", "Philadelphia, PA"]; for (var i = 0; i < addresses.length; i++) { var address = addresses[i]; geocodeAddress(address, i); } var mapOptions = { zoom: 0, center: centerMap, panControl: false, zoomControl: false, scaleControl: false, streetViewControl: false, mapTypeControl: false }; map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); // setZoom(map, theMarkers); setMarkers(map, theMarkers); infowindow = new google.maps.InfoWindow({ content: "Loading..." }); } function setZoom(map, markers) { var boundbox = new google.maps.LatLngBounds(); for (var i = 0; i < markers.length; i++) { boundbox.extend(new google.maps.LatLng(markers[i][1], markers[i][2])); } map.setCenter(boundbox.getCenter()); map.fitBounds(boundbox); } function setMarkers(map, markers) { for (var i = 0; i < markers.length; i++) { var site = markers[i]; var siteLatLng = new google.maps.LatLng(site[1], site[2]); var marker = new google.maps.Marker({ position: siteLatLng, map: map, title: site[0], zIndex: site[3], html: site[4], draggable: false, //Markers drop on the map animation: google.maps.Animation.DROP }); google.maps.event.addListener(marker, "click", function() { infowindow.setContent(this.html); infowindow.open(map, this); //marker.setAnimation(google.maps.Animation.BOUNCE); }); } } google.maps.event.addDomListener(window, 'load', initialize); 
 <script src="http://maps.googleapis.com/maps/api/js"></script> <div id="map-canvas" style="height: 500px; width:500px;"></div> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM