Google地图在LatLng.toUrlValue中返回经度> 180

时间:2012-08-23 21:35:31

标签: javascript jquery google-maps-api-3

我正在使用叠加多边形构建全局地图。它在jQuery手风琴中。每当我切换手风琴窗格然后回到地图时,它就会跳到南极洲。为了克服这种现象,我一直在尝试捕获当前的中心LatLng,将其存储在变量中,然后在返回到地图的手风琴面板时设置setCenter()。

它不起作用,所以我尝试使用.toUrlValue()方法将当前中心坐标转储到页面上的可见元素。当我向东或向西平移地图时,经度数字会不断递增。我预计它会转到180然后重置为-180。

map longitude problem

我的代码:

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?

4 个答案:

答案 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());