【发布时间】:2013-12-27 03:55:54
【问题描述】:
我有一个(相当大的)JSON 对象数组,每个对象都包含一个纬度和一个经度值。当我的谷歌地图加载时,我循环遍历这个数组并创建一个添加到地图的新标记。
除此之外,我正在使用 Google Maps Api v3 Places 插件(在此示例中几乎是开箱即用的:https://developers.google.com/maps/documentation/javascript/examples/places-searchbox)
当我搜索给定地址时,我需要确保至少有 N 个标记在地图上可见。现在,我一直将缩放级别设置为 10。但是,当我搜索即法罗群岛(那里大约有 5 个标记)时,缩放级别太近了,用户看不到 5 个标记。
是否有任何方法可以动态设置缩放级别,以便用户可以看到至少 4 或 5 个标记? :-)
我的代码如下:
$(document).ready(function () {
var map = null;
var markers = [];
var overlays = [];
var infowindow = new google.maps.InfoWindow();
// Init google map (API v. 3)
var mapOptions = {
center: new google.maps.LatLng(56.161, 10.77),
zoom: 7,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
var marker, i;
for (i = 0; i < data.length; i++) {
// Create a new marker
marker = new google.maps.Marker({
position: new google.maps.LatLng(data[i].Latitude, data[i].Longitude),
map: map,
title: data[i].Name
});
// Add the marker to a global array for filtering
markers.push(marker);
}
// Create the search box and link it to the UI element.
var input = /** @type {HTMLInputElement} */(
document.getElementById('pac-input'));
map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
var searchBox = new google.maps.places.SearchBox(
/** @type {HTMLInputElement} */(input));
// [START region_getplaces]
// Listen for the event fired when the user selects an item from the
// pick list. Retrieve the matching places for that item.
google.maps.event.addListener(searchBox, 'places_changed', function () {
var places = searchBox.getPlaces();
for (var i = 0, marker; marker = markers[i]; i++) {
if (markers[i].type == "userMarker") {
marker.setMap(null);
}
}
// For each place, get the icon, place name, and location.
var bounds = new google.maps.LatLngBounds();
for (var i = 0, place; place = places[i]; i++) {
var image = {
url: place.icon,
size: new google.maps.Size(71, 71),
origin: new google.maps.Point(0, 0),
anchor: new google.maps.Point(17, 34),
scaledSize: new google.maps.Size(35, 35)
};
// Create a marker for each place.
var marker = new google.maps.Marker({
map: map,
icon: image,
title: place.name,
position: place.geometry.location
});
marker.type = "userMarker";
markers.push(marker);
bounds.extend(place.geometry.location);
}
map.fitBounds(bounds);
map.setZoom(11);
});
// [END region_getplaces]
// Bias the SearchBox results towards places that are within the bounds of the
// current map's viewport.
google.maps.event.addListener(map, 'bounds_changed', function () {
var bounds = map.getBounds();
searchBox.setBounds(bounds);
});
}
提前非常感谢!
【问题讨论】:
-
地图完成缩放后,获取地图边界,计算边界中包含的地图上的标记,如果小于所需的阈值,则缩小直到达到。您应该能够计算给定地图中心和缩放级别的边界,并执行相同操作,而无需地图完成居中并缩放到第一个位置。
标签: javascript jquery google-maps google-maps-api-3