我正在为我的位置服务应用程序使用Google地图和Google地理编码服务。我使用Google地理编码服务将地址转换为lat / lng位置。我的问题是如何为某个地址自动查找适当的缩放,例如maps.google.com。
例如,当我在maps.google.com(例如Cisitu Baru, Bandung
)中搜索街道时,它会以较小的缩放比例显示街道。当我搜索某个区域(例如Bandung
)时,它会显示更大的缩放。省内的缩放比例较大(例如Jawa Barat
/ West Java
),等等。
我试过了两次
var geocoder = new google.maps.Geocoder();
geocoder.geocode( {
'address': someAddress
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
console.dir(results);
//cut
map.panToBounds(results[0].geometry.bounds); //setting bound
//cut
}
});
和
//cut
map.panToBounds(results[0].geometry.viewports); //setting bound
//cut
(老实说,我仍然不知道bounds
和viewport
之间的区别是什么,以及它们在code.google.com/apis/maps/documentation/javascript/geocoding.html中的用途是什么)
但两者仍然没有以适当的缩放显示地图。
现在,我使用像这样的小黑客
var tabZoom = {
street_address: 15,
route: 15,
sublocality: 14,
locality: 13,
country: 10
};
//cut
map.setCenter(results[0].geometry.location);
if (tabZoom[results[0].types[0]] != undefined){
map.setZoom(tabZoom[results[0].types[0]]);
} else {
map.zetZoom(10);
}
//cut
还有其他解决方案吗? (或者Google Map API中我还不知道的任何内容?)
谢谢!
答案 0 :(得分:4)
使用GLatLngBounds类
一个例子:
// map: an instance of GMap2
// latlng: an array of instances of GLatLng
var latlngbounds = new GLatLngBounds( );
for ( var i = 0; i < latlng.length; i++ )
{
latlngbounds.extend( latlng[ i ] );
}
map.setCenter( latlngbounds.getCenter( ), map.getBoundsZoomLevel( latlngbounds ) );
^
诀窍是将需要在地图上同时显示的所有点的列表同时添加到GLatLngBounds对象中。 Google Maps API可以完成其余的数学运算。
或在v3中,您可以使用LatLngBounds类(类似于v2中的GLatLngBounds),链接:http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLngBounds
举个例子 更好地检查一下:http://unicornless.com/code/google-maps-v3-auto-zoom-and-auto-center
答案 1 :(得分:3)
使用结果几何体的视口。如果您的搜索结果没有特定的边界,您将得到geometry.bounds
的错误viewport为您提供最佳的结果视图。
map.fitBounds(结果[0] .geometry.viewport);