我有一个可以在谷歌地图中正常加载的 kml 文件。在同一页面上,我有一个文本框,用户可以在其中输入他们的位置,这将添加一个标记,这也可以。
我遇到的问题是,如果用户输入了 kml 文件范围之外的位置,则地图不会缩放以同时包含 kml 和新标记。
如果我有preserveViewport = false,它将缩放以适合kml。如果为真,它将缩放以适应新标记。
$(document).ready(function () {
var mapOptions = {
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
var ctaLayer = new google.maps.KmlLayer('KMLLOCATION', { preserveViewport: false });
ctaLayer.setMap(map);
var marker = new google.maps.Marker({ position: new google.maps.LatLng(LAT, LONG), map: map, title: 'You are here', clickable: false, icon: '/media/youarehere.png' });
var bounds = new google.maps.LatLngBounds();
var ll = new google.maps.LatLng(LAT, LONG);
bounds.extend(ll);
map.fitBounds(bounds);
});
编辑
感谢 geocodezip 为我指明了正确的方向。这是我更新的有效代码。
$(document).ready(function () {
var mapOptions = {
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
var layer = new google.maps.KmlLayer('KMLLOCATION', { map: map, preserveViewport: true });
var marker = new google.maps.Marker({ position: new google.maps.LatLng(LAT, LONG), map: map, title: 'You are here', clickable: false, icon: '/media/youarehere.png' });
google.maps.event.addListener(layer, 'defaultviewport_changed', function() {
var bounds = layer.getDefaultViewport();
var ll = new google.maps.LatLng(LAT, LONG);
bounds.extend(ll);
map.fitBounds(bounds);
});
});