将Gmaps G_SATELLITE_3D_MAP与地球插件一起使用时,添加标记可以完全缩放地图

时间:2012-03-11 15:28:33

标签: google-maps-api-2 google-earth-plugin

Gmap.addoverlay()会导致地图缩小,如果您调用了getEarthInstance()

使用ge插件6.2.1.6014,Chrome / Mac OSX和{Firefox,Chrome} / Windows Vista家庭高级版(在Google Earth API issues上交叉发布)。请参阅测试代码here

第二个标记出现后不久,即使没有人要求,地图也会缩小。 通过在该回调中放置alert()并延长timeout()间隔,我非常确定问题发生的是addOverlay(),而不是getEarthInstance()

为了免疫我的代码,我在回调中尝试了注释代码,但到那时显然为时已晚。

那么,有没有办法在不调用getEarthInstance()的情况下确定插件的版本?也许是google.load的一些黑客攻击?如果没有一个干净的方法来检测插件的版本,只要这个版本的插件中的任何一个都安装在那里,我就必须禁用G_SATELLITE_3D_MAP,我想,几乎是永远的?

我正在调用getEarthInstance(),因为我想启用几个图层并在地球上设置点击监听器。是否可以在没有getEarthInstance()的情况下执行其中任何一项?

2 个答案:

答案 0 :(得分:0)

我没有广泛使用Maps API的v2,所以这可能是一个众所周知的行为,但这确实是一个错误。我建议在Maps API v2 issue tracker上进行归档,因为插件本身(或插件API)无法真正做任何改变地图视图的事情。

请注意,API的v2已被弃用(自2010年5月起!),因此它们仅修复了回归。另外,您应该考虑切换到API的v3;甚至还有一个方便的library for Earth API integration

与此同时,有一些方法可能有所帮助:

  1. 您是否有理由检查版本号 插入?最近有一些API增加了 发布,但我不确定6.2中的什么会成为交易破坏者。该 插件使用与Google地球相同的自动更新程序已有一段时间了 现在,所以绝大多数用户都是最新版本的 无论如何插件。在5.x和6.0上有一些坚持 具体原因,但确实不是很多。几乎 访问您网站的每个人都应该进行isSupported()检查 足够的,如果不是,他们可能有目的地选择了 出来并知道为什么事情不起作用。

  2. 既然你正在加载地球Javascript库,你可以 考虑只是加载一个插件的实例而不涉及 API。 google.earth.createInstance会帮助你 (如果重要,你可以使用隐藏的html元素,只需确保 分离它,并在你完成时将它收集起来。 启动插件实例然后会有一些开销 抛弃它,但它只是启动它,这是非常小的 你已经在这里了下一个插件实例也将是 视图切换到3D时创建得更快。

答案 1 :(得分:0)

对于任何受到这个bug攻击的人,感谢Kenny先生的回答中的建议,这里有一些代码可以检查插件版本而不会成为我们试图避免的bug的受害者:

function enable_geplugin(map, div, callback) {
  if (!google.earth.isSupported())
    return;

  var earth_div = document.createElement('div');
  document.body.appendChild(earth_div);
  earth_div.style.height  = '1px';
  earth_div.style.width   = '1px';

  google.earth.createInstance(
    earth_div,
    function(instance) {
      if (!instance.getPluginVersion().match(/^6\.2\./)) {
        map.addMapType(G_SATELLITE_3D_MAP);
        if (callback)
          map.getEarthInstance(callback);
        }
      earth_div.style.display = 'none';
      document.body.removeChild(earth_div);
    },
    function(errorCode) {
        // do this so user can click on map type "Earth" and see the download instructions
      map.addMapType(G_SATELLITE_3D_MAP);
      earth_div.style.display = 'none';
      document.body.removeChild(earth_div);
    }
  );
}

例如,使用here

(在OSX / Chrome上,document.body.removeChild(earth_div)会生成未捕获的ReferenceError:NPObject已删除,但这是我最不担心的事情。)

因此,我们现在可以有效地禁用G_SATELLITE_3D_MAP用于错误的插件版本,但我仍然希望有人在插件上修复错误。