จะรวมตารางฟิวชันคู่หนึ่งเข้ากับ GroundOverlays จากไฟล์ KML ได้อย่างไร อัปเดตด้วยความพยายามที่จะแก้ไข (ไม่สำเร็จ)

คำถามของฉันสั้นๆ:
ฉันจะรวมตารางฟิวชันของ Google Maps (รูปหลายเหลี่ยมและเครื่องหมาย) เข้ากับ GroundOverlays จากไฟล์ KML ได้อย่างไร ทุกอย่างคลิกได้

ความเป็นมา: ฉันกำลังทำโปรเจ็กต์การทำแผนที่ประวัติศาสตร์เชิงโต้ตอบที่ใช้ตารางฟิวชัน 2 ชั้น (ชั้นหนึ่งเป็นรูปหลายเหลี่ยม และอีกชั้นหนึ่งคือเครื่องหมายระบุตำแหน่ง)

ฉันยังต้องการซ้อนทับแผนที่เก่าผ่าน GroundOverlay ซึ่งไม่สามารถทำได้ในปัจจุบันกับตารางฟิวชัน ดังนั้นฉันจึงทดลองกับ GroundOverlay ในไฟล์ KML

ฉันทำให้มันซับซ้อนด้วยการเพิ่มผู้ฟังทั้งสองหน้าเพื่อควบคุมกล่องคลิก

ฉันมีหน้าเว็บสองหน้า:
1. ตารางฟิวชันและ
2. KML กราวด์โอเวอร์เลย์
ทำงานได้ดีทั้งคู่

สิ่งที่ฉันต้องการทำคือรวมไว้ในหน้าเดียว ฉันไม่ใช่โปรแกรมเมอร์และไม่เข้าใจ JS ดีพอที่จะทำให้สิ่งนี้เกิดขึ้น

สคริปต์ที่ใช้ทั้งหมดดัดแปลงมาจากตัวอย่างที่พบทางออนไลน์

นี่คือหน้าการทำงานหน้าแรกของฉัน:
http://wendysmithtoronto.com/mapping/townofyork-fusiontables2.html

คุณจะพบลิงค์ไปยังหน้าที่ 2 ที่นั่น

ความช่วยเหลือของคุณจะได้รับการชื่นชมอย่างมาก ขอบคุณ เวนดี้


อัปเดต:

นี่คือความพยายามของฉันในการรวมข้อมูลสองชุดของฉัน:

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 ของคุณมีข้อผิดพลาดที่สำคัญในส่วนของจาวาสคริปต์ คุณควรศึกษาจาวาสคริปต์พื้นฐานแบบเดียวกันและโดยเฉพาะอย่างยิ่งการใช้ JS กับ GMap API

คุณสร้างวัตถุแผนที่สากล 2 รายการ คุณไม่ได้สรุปการสร้างแผนที่และเลเยอร์ทั้งหมดของคุณไว้ในการเริ่มต้นฟังก์ชัน() การสร้างแผนที่และเลเยอร์ทั้งหมดจะต้องดำเนินการภายในฟังก์ชันเตรียมใช้งาน (เมื่อโหลดเนื้อหา) คุณต้องตั้งค่า globals นอกฟังก์ชันเริ่มต้นของคุณ เช่น แผนที่ เลเยอร์ทั้งหมด ฯลฯ ในที่สุดคุณก็ล้มเหลวในการเรียก layer.setMap(map) บน 2 เลเยอร์ KML ของคุณ

แม้ว่าทั้งหมดนี้ ฉันได้แก้ไขไฟล์ของคุณแล้ว แต่จริงๆ แล้วก็แค่จัดเรียงสิ่งต่าง ๆ ใหม่ นี่เป็นเพียงส่วนที่ฉันต้องแก้ไข ย้ายทุกอย่างไปที่การเริ่มต้น ()

     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. แผนที่ทั้งสามจะปรากฏขึ้นทันทีเมื่อหน้าเว็บปรากฏขึ้น อัปเดตหน้าเว็บ: [link]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
สวัสดีเวนดี้ ส่งอีเมลถึงฉัน ebridger(at)gmri.org แล้วฉันจะส่งไฟล์ทั้งหมดไปให้คุณ อันที่ฉันสร้างขึ้นนั้นใช้งานได้ - person Eric Bridger; 17.03.2012
comment
ขอบคุณเอริคที่ทำอุบายได้ ชิ้นส่วนเหล่านี้ทั้งหมดทำงานร่วมกันในขณะนี้ การทดสอบเพิ่มเติมทำให้เกิดแนวคิดอื่นๆ เกี่ยวกับวิธีปรับปรุงโครงการ แต่ฉันจะสำรวจเพิ่มเติมและกลับมาที่ฟอรัมในภายหลังพร้อมคำถามอื่นๆ เวนดี้ - person wendysmith; 24.03.2012