0

我正在构建一个带有叠加多边形的全球地图。它位于 jQuery Accordion 中。每当我切换手风琴窗格然后回到地图时,它就会跳到南极洲。为了克服这种行为,我一直在尝试捕获当前中心 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);
}

文档表明getCenter () 返回一个 LatLng,而 setCenter() 需要一个 LatLng。我是否误解了当我尝试设置 currMapCenter = map.getCenter() 时会发生什么?鉴于我的地图需要像现在一样包装,我如何捕获可用的 LatLng 以与 setCenter() 一起使用?

4

4 回答 4

3

getCenter() 返回 LatLng,但它可能超过 180 度。这取决于您将地球绕其轴旋转多少次。:)

我找到了解决这个问题的简单方法

var loc=map.getCenter();
loc=new google.maps.LatLng(loc.lat(), loc.lng(), false);

现在 LatLng 被重新计算为正确的值,您可以使用它...

于 2015-11-15T16:02:54.493 回答
1

Map 对象的getCenter 方法记录了该行为

getCenter()
LatLng
返回显示在地图中心的位置。请注意,此LatLng 对象未包装。有关详细信息,请参阅 LatLng。

也许您可以使用 getBounds() (如果地图被缩小以显示多个副本,则可能不起作用)

getBounds()
LatLngBounds
返回当前视口的纬度/经度边界。如果世界的多个副本可见,则范围的经度范围为 -180 到 180 度(含)。

于 2012-08-23T21:51:57.483 回答
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());
于 2014-04-22T11:45:59.417 回答
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 中测试。

于 2012-08-24T16:26:54.700 回答