由于某些原因,Google Maps v3的getBounds()
函数似乎扩展得远远超出了 map 实际显示的范围。如果我错了,请纠正我,但是它不应该返回当前 View 正显示的拐角处的NE(右上角)和SW(左下角)纬度和经度坐标吗?
我正在返回这些坐标之间的搜索结果(由lat和lng映射),并且正在返回的结果比getBounds()
返回的区域更远。关于这里可能会发生什么的任何想法?
仅供引用,我正在了解 map 的空闲事件的范围:
google.maps.event.addListener(map, 'idle', function() {
var bounds = map.getBounds();
var NE = bounds.getNorthEast();
var SW = bounds.getSouthWest();
...并使用.lat()和.lng()从各个角获取坐标。然后,将其输入到SQL查询中,以检查这些坐标之间的结果。结果在一般区域内,但可能远远超出了 map 上实际显示的范围。
任何想法表示赞赏!谢谢!
最佳答案
正确,map.getBounds()
将返回可见区域的边界,如下例所示。在此示例中,当map.getBounds()
事件触发时,使用idle
的点绘制了一个红色的Polyline框。
您的SQL查询可能没有返回您要查找的结果,因此可能需要再次检查。
<!DOCTYPE html>
<html>
<head>
<title>Bounds Box</title>
<script type="text/javascript"
src="http://maps.google.com/maps/api/js?sensor=false">
</script>
<script type="text/javascript">
function initialize() {
var latlng = new google.maps.LatLng(30.405865,-87.283362);
var myOptions = {
zoom: 8,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
var viewportBox;
google.maps.event.addListener(map, 'idle', function(event) {
var bounds = map.getBounds();
var ne = bounds.getNorthEast();
var sw = bounds.getSouthWest();
var viewportPoints = [
ne, new google.maps.LatLng(ne.lat(), sw.lng()),
sw, new google.maps.LatLng(sw.lat(), ne.lng()), ne
];
/*strokeOpacity = 0 , if don't want to show the border moving. */
if (viewportBox) {
viewportBox.setPath(viewportPoints);
} else {
viewportBox = new google.maps.Polyline({
path: viewportPoints,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 4
});
viewportBox.setMap(map);
};
var info = document.getElementById('info');
info.innerHTML = 'NorthEast: ' + ne.lat() + ' ' + ne.lng() +
'<br />' + 'SouthWest: ' + sw.lat() + ' ' + sw.lng();
});
};
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width:500px; height:500px"></div>
<div id="info"></div>
</body>
</html>