Добавление маркера полностью увеличивает карту при использовании Gmaps G_SATELLITE_3D_MAP с плагином заземления - PullRequest
0 голосов
/ 11 марта 2012

Gmap.addoverlay() приводит к уменьшению карты, если вы позвонили getEarthInstance().

Используя плагин ge 6.2.1.6014, Chrome / Mac OSX и {Firefox, Chrome} / Windows Vista Home Premium (Cross- размещено на проблемах Google Планета Земля API ).См. Тестовый код здесь .

Вскоре после появления второго маркера карты уменьшаются, хотя никто этого не просил.Поместив alert() в этот обратный вызов и увеличив интервал timeout(), я почти уверен, что проблема возникла в addOverlay(), а не getEarthInstance().

Чтобы иммунизировать мой код,Я пробовал закомментированный код в обратном вызове, но к тому времени уже слишком поздно.

Итак, есть ли способ определить версию плагина без вызова getEarthInstance()?Возможно, какой-нибудь взлом с google.load?Без чистого способа определения версии плагина, мне пришлось бы отключить G_SATELLITE_3D_MAP, пока любая из этой версии плагина остается там, что, я думаю, довольномного навсегда?

Я звоню getEarthInstance(), потому что я хочу включить несколько слоев и установить прослушиватель щелчков на глобусе.Можно ли сделать что-то из этого без getEarthInstance()?

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

Для всех, кого поразила эта ошибка, благодаря предложению в ответе г-на Кенни, вот некоторый код, чтобы проверить версию плагина, не становясь жертвой ошибки, которую мы пытаемся избежать:

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);
    }
  );
}

Используется, например, здесь .

(В OSX / Chrome document.body.removeChild(earth_div) генерирует Uncaught ReferenceError: NPObject удален , но это наименьшее из моих опасений.)

Таким образом, теперь мы можем эффективно отключить G_SATELLITE_3D_MAP для плохих выпусков плагинов, но я все еще надеюсь, что кто-то, работающий над плагином, исправит ошибку.

0 голосов
/ 13 марта 2012

Я не использовал v2 API Карт широко, поэтому, возможно, это давно известное поведение, но, похоже, это ошибка.Я предлагаю подать его на трекер проблем Maps API v2 , так как сам плагин (или API плагина) не может ничего сделать для изменения вида карты.

Обратите вниманиеверсия v2 API устарела (с мая 2010 года!), поэтому они исправляют только регрессии.Кроме того, вы должны подумать о переходе на v3 API;есть даже удобная библиотека для интеграции Earth API .

. Тем временем, есть несколько подходов, которые могут помочь:

  1. Есть липричина, по которой вы проверяете номер версии плагина?В последних выпусках были некоторые дополнения к API, но я не уверен, что в 6.2 будет нарушителем соглашения.В течение некоторого времени плагин использовал тот же автообновитель, что и Google Планета Земля, поэтому подавляющее большинство пользователей в любом случае используют последнюю версию плагина.Есть несколько несогласных с 5.x и 6.0 по определенным причинам, но на самом деле их не так много.Почти для всех, кто посещает ваш сайт, проверки isSupported () должно быть достаточно, и если это не так, они, вероятно, намеренно отказались и знают, почему что-то не работает.

  2. Так как вы все равно загружаете земную библиотеку Javascript, вы можете рассмотреть возможность загрузки экземпляра плагина без использования API. google.earth.createInstance поможет вам в этом (вы можете использовать скрытый html-элемент, если это имеет значение, просто обязательно отсоедините его и дайте ему собрать мусор, когда закончите).Существуют некоторые издержки при запуске экземпляра плагина и его отбрасывании, но это довольно незначительно по сравнению с его запуском, что вы уже делаете здесь.Следующий экземпляр плагина также будет создан быстрее при переключении вида в 3D.

...