【发布时间】:2012-11-19 06:53:29
【问题描述】:
我的 Google maps API 地图缩放显示所有在 google 地方搜索后添加的标记。在移动地图上,这可能需要一些时间来加载,并且作为骑自行车者的这个应用程序,我更喜欢只在视口中显示结果。我读过的大多数研究表明,不可能只在视口内返回结果。我是否可以在添加标记后保持地图边界不变?如果它只向我显示添加到当前边界的标记,除非只有一个标记返回,否则它应该缩放到该标记。因此,搜索诸如比萨饼之类的一般事物将在当前视口中显示许多比萨饼店,而无需平移或缩放。搜索特定地址会放大到该标记,即使它位于视口之外。
var input = document.getElementById('target');
var searchBox = new google.maps.places.SearchBox(input);
var bounds = map.getBounds();
searchBox.setBounds(bounds);
var markers = [];
service = new google.maps.places.PlacesService(map);
google.maps.event.addListener(searchBox, 'places_changed', function() {
var places = searchBox.getPlaces();
// alert("getPlaces returns "+places.length+" places");
for (var i = 0; i < gmarkers.length; i++) {
gmarkers[i].setMap(null);
}
gmarkers = [];
var bounds = new google.maps.LatLngBounds();
for (var i = 0, place; place = places[i]; i++) {
var place = places[i];
createMarker(place);
bounds.extend(place.geometry.location);
}
map.fitBounds(bounds);
// if (markers.length == 1) map.setZoom(17);
});
google.maps.event.addListener(map, 'bounds_changed', function() {
var bounds = map.getBounds();
searchBox.setBounds(bounds);
});
ib = new InfoBox({});
【问题讨论】:
-
这听起来很容易实现。你这样做有什么问题?您的代码当前编写为缩放以显示所有返回的标记。
-
我的主要问题是这是我的第一个项目,我还在学习。就代码问题而言,我相信 bounds.extend(place.geometry.location);正在获取我的空边界变量并给它一个 lat 和 long 以显示所有标记。然后 map.fitBounds(bounds) 实际上是使用该边界来调整地图的大小以显示所有标记。我试过注释掉 map.fitBounds ,它似乎阻止了地图移动,但并非总是如此。此外,if 语句仅在添加的标记超出当前范围时才会缩放。
标签: google-maps-api-3 viewport bounds fitbounds