我有一个kml文件,可以在Google地图中加载。在同一页面上,我有一个文本框,用户可以在其中输入他们的位置,这将添加一个标记,这也适用。Google Maps API V3: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);
});
});
这听起来像你知道该怎么做,但我不跟着你所说的一切。 (“获得kml的界限”和“用额外的标记扩展”) 你能举个例子吗? – Pat 2012-08-14 15:57:18
我没有一个这样的例子。但我会做的是运行您的示例与preserveViewport:false,对KmlLayer做一个[getDefaultViewport()](https://developers.google.com/maps/documentation/javascript/reference#KmlLayer),扩展该边界附加标记,然后做一个map.fitBounds()。 – geocodezip 2012-08-14 16:27:28