как интегрировать пару таблиц слияния с GroundOverlays из файла KML? Обновлено с моей попыткой решить (неудачно)

Краткая версия моего вопроса:
Как мне интегрировать пару сводных таблиц Google Maps (многоугольники и маркеры) с GroundOverlays из файла KML? Все кликабельно.

Предыстория: я работаю над интерактивным проектом отображения истории, в котором используются 2 слоя таблиц слияния (один слой — полигоны, другой — маркеры местоположения).

Я также хочу накладывать старые карты с помощью GroundOverlay, что в настоящее время невозможно с таблицами слияния, поэтому я экспериментировал с GroundOverlay в файле KML.

Я усложнил это, добавив слушателей на обе страницы для управления окнами кликов.

У меня есть две веб-страницы:
1. сводные таблицы и
2. фоновые наложения KML,
обе работают нормально.

Что я хочу сделать, так это объединить их на одной странице. Я не программист и недостаточно хорошо понимаю JS, чтобы это произошло.

Все используемые сценарии были адаптированы из примеров, найденных в Интернете.

Вот моя первая рабочая страница:
http://wendysmithtoronto.com/mapping/townofyork-fusiontables2.html

Там вы найдете ссылку на вторую страницу.

Ваша помощь будет принята с благодарностью. Спасибо. Венди


Обновлять:

Вот моя попытка объединить два набора данных:

http://wendysmithtoronto.com/mapping/townofyork-merged.html

Я пытался сделать это, добавляя фрагменты скрипта со страницы kmlmaps на страницу fusiontables, но, очевидно, я разместил что-то не в том месте. Или я пропускаю знаки препинания (или смешиваю разные типы сценариев, или?)

Появится карта с правильным отображением полигонов и маркеров. Но теперь (1) значки таблицы слияния не кликабельны, и (2) карты истории не отображаются. Однако флажки таблицы слияния (в синей таблице) ДЕЙСТВИТЕЛЬНО работают.

Я недостаточно хорошо понимаю JS, чтобы понять это.

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

Эрик, спасибо, что посмотрели это! (Я только что нашел ваш ответ. Я искал уведомление об ответе, но не проверял нужное место.)

Привет, Венди


person wendysmith    schedule 12.03.2012    source источник
comment
Ваши две существующие страницы, кажется, работают хорошо. Почему бы вам просто не попробовать объединить их в одну страницу. Тогда у вас могут возникнуть более конкретные вопросы о ваших проблемах. Я без проблем объединил слои Fusion Table и KML на одной странице. Я предполагаю, что у вас возникнут проблемы с отображением маркеров и многоугольника поверх наложений земли, но еще слишком рано говорить об этом.   -  person Eric Bridger    schedule 12.03.2012


Ответы (1)


В вашем html-файле были серьезные ошибки в частях javascript. Вам действительно следует изучить тот же базовый javascript и, в частности, использовать JS с API GMap.

Вы создали 2 объекта глобальной карты. Вы не инкапсулировали все созданные вами карты и слои в функцию инициализации(). Все создание карт и слоев должно выполняться в рамках функции инициализации (при загрузке тела). Вы должны установить глобальные переменные вне вашей функции инициализации, например. карта, все слои и т. д. Наконец, вам не удалось вызвать layer.setMap(map) для двух слоев KML.

Несмотря на все это, я исправил ваш файл, на самом деле просто переставив вещи. Это как раз тот раздел, который мне нужно было исправить. Переместил все в initialize()

     function showbuildings(buildingcheck) {
    if (buildingcheck.checked == true)
      {
        campusmap.setMap(map);
      } else {
        campusmap.setMap(null);
      }
  }


  function showphilpotts(philpottscheck) {
    if (philpottscheck.checked == true)
      {
        philpotts.setMap(map);        
      } else {
        philpotts.setMap(null);
      }
  }



  function showbeartrail(beartrailcheck) {
    if (beartrailcheck.checked == true)
      {
        beartrail.setMap(map);        
      } else {
        beartrail.setMap(null);
      }
  }


var infoWindow = new google.maps.InfoWindow();

function openIW(FTevent) {
  // infoWindow.setContent(FTevent.infoWindowHtml);
  // infoWindow.setPosition(FTevent.latLng);
  infoWindow.setOptions(
    { 
     content: FTevent.infoWindowHtml,
     position: FTevent.latLng,
     pixelOffset: FTevent.pixelOffset
    });
  infoWindow.open(map);
}

// Globals
//Begin map parameters
var map;
var layer_2;
var layer_1;
var tableid_1 = 2920040;  // polygons
var tableid_2 = 3189980;  // houses
var zoom = 12;
var center = new google.maps.LatLng(43.652417455515476, -79.37926607055226);

var campusmap;
var philpotts;
var beartrail;

function initialize() {

  map = new google.maps.Map(document.getElementById('map_canvas'), {
    center: center,
    zoom: zoom,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });
   //End map parameters

    campusmap = new google.maps.KmlLayer('http://wendysmithtoronto.com/mapping/1851mapshoreline.kml',  {preserveViewport:true, suppressInfoWindows:true});
    campusmap.setMap(map);

    google.maps.event.addListener(campusmap, 'click', function(kmlEvent) {
      document.getElementById('sidebarinfo').innerHTML = kmlEvent.featureData.description;
    });         

   philpotts = new google.maps.KmlLayer('http://wendysmithtoronto.com/mapping/1818maplieutphilpottsd.kml', {preserveViewport:true, suppressInfoWindows:true}); 
  google.maps.event.addListener(philpotts, 'click', function(kmlEvent) {
    document.getElementById('sidebarinfo').innerHTML = kmlEvent.featureData.description;
   });    
    philpotts.setMap(map);

    beartrail = new google.maps.KmlLayer('http://wendysmithtoronto.com/mapping/1842map-jamescaneb.kml', {preserveViewport:true, suppressInfoWindows:true}); 
  google.maps.event.addListener(beartrail, 'click', function(kmlEvent) {
    document.getElementById('sidebarinfo').innerHTML = kmlEvent.featureData.description;
  }); 
   beartrail.setMap(map);

layer_2 = new google.maps.FusionTablesLayer({
  suppressInfoWindows:true,
  query: {
    select: 'Location',
    from: '3189980'
  },
styles: [
  {where: "'style' = 14", markerOptions:{ iconName:"star"}},
  {where: "'style' = 13", markerOptions:{ iconName:"wht_pushpin"}},
  {where: "'style' = 11", markerOptions:{iconName:"red_blank"}}, //town houses
  {where: "'style' = 12", markerOptions:{ iconName:"orange_blank"}}, //country homes


  {where: "'style' = 15", markerOptions:{ iconName:"target"}},
  ]});
layer_1 = new google.maps.FusionTablesLayer({
  suppressInfoWindows:true,
  query: {
    select: 'Location',
    from: '2920040'
  }}),

 google.maps.event.addListener(layer_1, "click", openIW);
 google.maps.event.addListener(layer_2, "click", openIW);
 google.maps.event.addListener(map, "click", function() { infoWindow.close();});

layer_1.setMap(map);
layer_2.setMap(map);

} // end initialize
person Eric Bridger    schedule 15.03.2012
comment
Спасибо, Эрик, я бы проголосовал за это, но я новичок в правлении и еще не имею права голоса. Ваша переработка сценария великолепна! Но пока не все работает правильно. Проблемы: 1. перестали работать галочки в синем окошке (управление появлением маркеров). 2. Все три карты сразу появляются при открытии веб-страницы. Обновленная веб-страница: [ссылка]wendysmithtoronto.com/mapping/townofyork-mergedEric.html - person wendysmith; 16.03.2012
comment
Добро пожаловать. 1. Эти флажки вызывают функцию filterData(), которой нет в файле. 2. Это моя вина. Я добавил вызовы kmllayer.setMap(map) для всех трех слоев kml. Вы должны закомментировать те, которые вы не хотите, чтобы флажки KMLL работали. - person Eric Bridger; 17.03.2012
comment
Привет, Эрик. Извините, не совсем понял. (Согласен, мне нужно изучить JS, но не на этой неделе.) Как добавить функцию filterData() (или заставить ее работать?) Что закомментировать, чтобы карты не появлялись, пока не установлены галочки? Как сделать так, чтобы флажки маркеров снова работали, как в исходном файле (городские дома/загородные дома/и т. д.)? Есть ли шанс, что вы добавите исправления в сценарий? Я лучше всего учусь на примере и поэтому могу изучить изменения, добавленные, чтобы все заработало. Большое-большое спасибо за вашу помощь с этим проектом. Венди - person wendysmith; 17.03.2012
comment
Привет Венди, напишите мне. ebriger(at)gmri.org, и я вышлю вам весь файл. Тот, который я создал, работает. - person Eric Bridger; 17.03.2012
comment
Спасибо, Эрик, это помогло. Теперь все эти части работают вместе. Дальнейшее тестирование породило другие идеи о том, как улучшить проект, но я продолжу изучение и вернусь на форум позже с другими вопросами. Венди - person wendysmith; 24.03.2012