【发布时间】:2015-05-10 08:56:05
【问题描述】:
大家好,我在为 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 in addresses) {} 中使用 theMarkers.push 时,地图如下所示:
但是当我手动制作 theMarkers 完成 for(i in addresses) {} 时:
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']
];
那么地图是这样的:
我需要让它在循环中完成。
【问题讨论】:
-
我很想仅对标题进行投票,但这会滥用我的权力。 :-)
-
地理编码器是异步的,需要在最后一个回调中设置缩放才能运行。
-
@geocodezip 介意展示一个例子吗?
标签: javascript arrays google-maps google-maps-api-3