Javascript 在kml上居中放置谷歌地图,而不是位置

Javascript 在kml上居中放置谷歌地图,而不是位置,javascript,google-maps,geolocation,kml,Javascript,Google Maps,Geolocation,Kml,我在网页上有一个简单的脚本,加载一个小的kml文件,但是当我添加地理位置时,它总是将地图放在当前位置的中心。 我想加载以kml文件为中心的地图。仅当用户位于kml区域内,或将地图拖至其所在区域时,才应显示用户位置。 另外,是否有一种方法可以使用javascript(maps api 3)轻松刷新地图上的用户位置,而无需重新调整地图中心 var map; function initialize() { var centre = new google.maps.LatLng(4,4); var ma

我在网页上有一个简单的脚本,加载一个小的kml文件,但是当我添加地理位置时,它总是将地图放在当前位置的中心。 我想加载以kml文件为中心的地图。仅当用户位于kml区域内,或将地图拖至其所在区域时,才应显示用户位置。 另外,是否有一种方法可以使用javascript(maps api 3)轻松刷新地图上的用户位置,而无需重新调整地图中心

var map;
function initialize() {
var centre = new google.maps.LatLng(4,4);
var mapOptions = {
zoom: 11,
center: centre
}

map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
var ctaLayer = new google.maps.KmlLayer({
url: 'http://www.server.com/kmlfile.kml',
preserveViewport: false
});
ctaLayer.setMap(map);

if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
  var pos = new google.maps.LatLng(position.coords.latitude,
                                   position.coords.longitude);

  var infowindow = new google.maps.InfoWindow({
    map: map,
    position: pos,
    content: 'Location found using HTML5.'
   });

//  map.setCenter(pos);
   }, function() {
  handleNoGeolocation(true);
   });
  }
}

function handleNoGeolocation(errorFlag) {
if (errorFlag) {
var content = 'Error: The Geolocation service failed.';
} else {
var content = 'Error: Your browser doesn\'t support geolocation.';
}

var options = {
map: map,
position: new google.maps.LatLng(60, 105),
content: content
};

var infowindow = new google.maps.InfoWindow(options);
map.setCenter(options.position);
}
google.maps.event.addDomListener(window, 'load', initialize);
因此,这是我的最新更新,我向infoWindow添加了disableAutoPan:true选项,如图所示,为了刷新用户位置,我使用了watchPosition代替getCurrentPosition,并使用setPosition移动infoWindow位置:

var map;
function initialize() {
  var center_map = new google.maps.LatLng(45,-4);
  var mapOptions = {
    zoom: 11,
    center: centre
  }

map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
var ctaLayer = new google.maps.KmlLayer({
  url: 'http://www.server.com/kmlfile.kml', preserveViewport: false
}); 
var ctaLayer.setMap(map);
if(navigator.geolocation) {
  navigator.geolocation.watchPosition(function(position) {
    var pos = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
    if(typeof infowindow == "undefined") {
      infowindow = new google.maps.InfoWindow({
        disableAutoPan: true,
        map: map, position: pos,
        content: 'Your position',
        zIndex: 0 /* not needed */
      });
    }
    else {
      infowindow.setPosition(pos);
    }
  }, function() {
/*handleNoGeolocation(true);*/
/* had to delete this because errors centered the map on North Pole */
  },
  { timeout: 10000, enableHighAccuracy: true  }); /* high accuracy for tests */
  }
}; 

google.maps.event.addDomListener(window, 'load', initialize);

很明显,它是有效的,尽管我认为它相当原始…

当您打开
信息窗口时,它正在平移地图以显示它。在中,将
disableAutoPan
设置为true

代码片段:

var映射;
函数初始化(){
var center=newgoogle.maps.LatLng(4,4);
变量映射选项={
缩放:11,
中心:中心
}
map=new google.maps.map(document.getElementById('map-canvas'),mapOptions);
var ctaLayer=new google.maps.KmlLayer({
网址:'http://www.geocodezip.com/geoxml3_test/cta.xml',
保存视口:false
});
ctaLayer.setMap(map);
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(函数(位置){
var pos=新的google.maps.LatLng(position.coords.latitude,
位置坐标经度);
var infowindow=new google.maps.infowindow({
是的,
地图:地图,
职位:pos,,
内容:“使用HTML5找到的位置。”
});
//地图设置中心(pos);
},函数(){
手持导航(真);
});
}
}
函数handleNogeLocation(errorFlag){
如果(错误标志){
var content='错误:地理位置服务失败';
}否则{
var content='错误:您的浏览器不支持地理位置';
}
变量选项={
地图:地图,
职位:新google.maps.LatLng(60105),
内容:内容,,
真的吗
};
var infowindow=new google.maps.infowindow(选项);
//地图设置中心(选项位置);
}
google.maps.event.addDomListener(窗口“加载”,初始化)
html,
身体,
#地图画布{
身高:100%;
宽度:100%;
边际:0px;
填充:0px
}


谢谢,听起来很完美。为了刷新用户位置,我尝试用watchPosition代替getCurrentPosition,添加了第三个参数,{timeout:10000,enableHighAccurance:true},看起来不错,对吗?是否足以更新用户的位置?还不能用我的智能手机测试…这是另一个问题。是的,我在第一篇帖子中提到了一个辅助问题。。。显然它可以工作,但以前的信息窗口仍然显示(android)。可能是一个zIndex…相关问题的副本
var infowindow = new google.maps.InfoWindow({
  map: map,
  position: pos,
  content: 'Location found using HTML5.',
  disableAutoPan: true
 });