我正在使用叠加多边形构建全局地图。它在jQuery手风琴中。每当我切换手风琴窗格然后回到地图时,它就会跳到南极洲。为了克服这种现象,我一直在尝试捕获当前的中心LatLng,将其存储在变量中,然后在返回到地图的手风琴面板时设置setCenter()。
它不起作用,所以我尝试使用.toUrlValue()方法将当前中心坐标转储到页面上的可见元素。当我向东或向西平移地图时,经度数字会不断递增。我预计它会转到180然后重置为-180。
我的代码:
var currMapCenter = null;
jQuery(document).ready(function() {
jQuery("#accordion").bind('accordionchange', function(event, ui) {
if (ui.newContent.attr('id') == 'region-list')
{
triggerMapResize();
}
});
});
function initialize_map() {
//do all the initialization here...
currMapCenter = map.getCenter(); //set initial center in variable.
google.maps.event.addListener(map, 'center_changed', function() {
currMapCenter=map.getCenter();
jQuery("#description").html(currMapCenter.toUrlValue());//to see what is happening...
});
}
function triggerMapResize()
{
google.maps.event.trigger(map, "resize");
map.setCenter(currMapCenter);
}
documentation表示getCenter()返回LatLng,setCenter()表示需要LatLng。我是否误解了当我尝试设置currMapCenter = map.getCenter()时会发生什么?鉴于我的地图需要像现在一样进行换行,如何捕获可用于setCenter()的可用LatLng?
答案 0 :(得分:2)
getCenter()返回LatLng,但可能超过180度。这取决于绕地轴旋转地球的次数。 :)
我找到了解决这个问题的简单方法
var loc=map.getCenter();
loc=new google.maps.LatLng(loc.lat(), loc.lng(), false);
现在将LatLng重新计算为正确的值,您可以使用它......
答案 1 :(得分:1)
记录了Map object getCenter方法
的行为 getCenter()
经纬度
返回地图中心显示的位置。请注意,此 LatLng对象未包装。有关详细信息,请参阅LatLng。
也许您可以使用getBounds()(如果缩小地图以显示多个副本,则可能无效)
的getBounds()
的LatLngBounds
返回当前视口的lat / lng范围。如果可以看到世界的多个副本,则边界的范围为-180到180度(包括-180到180度)。
答案 2 :(得分:0)
现在看来,这个主题的标题是不准确的,与实际问题无关。 IE8 - 毫不奇怪 - 给了我各种各样的问题并且根本没有绘制地图,而符合标准的浏览器很好,除了在切换手风琴窗格时失去中心。
在原始代码中,我正在侦听'center_changed'事件以捕获当前地图中心坐标。我开始想知道当手风琴关闭时jQuery的事件是否改变了地图的位置,所以我将中心捕捉事件切换为'mouseout'。这解决了这个问题,但我仍然不知道是什么导致了它。
旁注:我一直在使用window.onload = function(){initialize_map();在IE以外的浏览器中取得了成功,但是IE被阻塞了,根本无法加载。
var map=null;
var currMapCenter = null;
jQuery(document).ready(function() {
jQuery("#accordion").bind('accordionchange', function(event, ui) {
if (ui.newContent.attr('id') == 'region-list')
{
if(map==null) {
//first load; call map initialization
initialize_map();
}
triggerMapResize();
}
});
function initialize_map() {
//do initilization here...
google.maps.event.addListener(map, 'mouseout', function() {
currMapCenter=map.getCenter();
});
}
function triggerMapResize() {
google.maps.event.trigger(map, "resize");
map.setCenter(currMapCenter);
}
上面的代码没有问题;在Firefox 14,Chrome和IE8中测试过。
答案 3 :(得分:0)
谢谢,这个帖子帮助了我。这是我用来验证noWarp设置的代码,并且访问我需要的中心,而坐标不超过+/- 180度: -
var gmap_center = new google.maps.LatLng(map.getCenter().lat(), map.getCenter().lng(), false);
console.log('GMap lat/lng with default noWrap:true = ' + map.getCenter().lat() + ' / ' + map.getCenter().lng());
console.log('GMap lat/lng with noWrap:false = ' + gmap_center.lat() + ' / ' + gmap_center.lng());