2015-10-09 27 views
1

在需要用户可以选择区域onclick的葡萄牙地图时,我遵循this examplethis one。问题是我使用每个分区的KML文件作为多边形绘制,而不是使用所有区域多边形的KML。geoxml v3在使用多个KML文件时突出显示多边形

已经在这里搜索了许多问题,也试图改变useTheData()回调函数,包括额外的循环像下面,但没有成功显示...

function useTheData(doc) { 

     var sidebarHtml = '<table><tr><td><a href="javascript:showAll();">Show All</a></td></tr>'; 

     for (var j = 0; j < doc.length ; j++) { 
      ... 
     } 
     sidebarHtml += "</table>"; 

     document.getElementById("map_barralateral").innerHTML = sidebarHtml; 
    }; 

悬停区在地图上正常工作,但当点击侧边栏上的高亮链接时,它默认突出显示用列表的最后一个KML文件创建的多边形...

有没有办法解决这个问题?

我完整的代码是在这里:http://afonsogomes.com/mapas

<!DOCTYPE html> 
<html lang="pt"> 

<head> 
    <meta charset="utf-8"> 
    <title>XXXXX</title> 
    <style> 
    html,body {margin: 0;padding: 0;} 
    #map_canvas, #map_barralateral {width: 300px;height: 500px;margin: 0;padding: 0;float: left;background-color: #e5e3df;} 
    #map_canvas{height: 520px;} 
    #map_barralateral{width: 300px;font-family: Arial, sans-serif;font-size: 12px;padding: 10px;} 
    #loaddiv {width: 620px;background-color: #78A04C;border: none;padding: 20px 0;font-family: Arial, sans-serif;color: #FFF;font-weight: 700;text-align: center;position: absolute;left: 0;top: 200px;margin: 0 auto;filter: alpha(opacity=90);opacity: .90;z-index: 100;} 
    </style> 
    <script src="../js/jquery-1.11.1.min.js"></script> 
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
    <script type="text/javascript" src="http://geoxml3.googlecode.com/svn/branches/polys/geoxml3.js"></script> 
    <script type="text/javascript" src="http://geoxml3.googlecode.com/svn/trunk/ProjectedOverlay.js"></script> 

    <script> 
     var geoXml = null; 
     var geoXmlDoc = null; 
     var map = null; 
     var myLatLng = null; 
     var myGeoXml3Zoom = true; 
     var sidebarHtml = ""; 

     var filename_example = ["kml/porto.kml", "kml/faro.kml", "kml/braganca.kml", "kml/evora.kml"]; 
     function initialize() { 
      myLatLng = new google.maps.LatLng(39.96293, -8.03770); 

      var myOptions = { 
       zoom: 18, 
       center: myLatLng, 

       mapTypeId: google.maps.MapTypeId.ROADMAP 
      }; 
      map = new google.maps.Map(document.getElementById("map_canvas"), 
       myOptions); 

      showLoad(); 

      geoXml = new geoXML3.parser({ 
       map: map, 
       zoom: myGeoXml3Zoom, 
       suppressInfoWindows: true, 
       singleInfoWindow: false, 
       afterParse: useTheData 
      }); 
      google.maps.event.addListener(geoXml, 'parsed', function() { 
       hideLoad(); 
      }); 

      geoXml.parse(filename_example); 
     }; 

     function kmlHighlightPoly(poly) { 
      for (var i = 0; i < geoXmlDoc.gpolygons.length; i++) { 
       if (i == poly) { 
        geoXmlDoc.gpolygons[i].setOptions({ fillColor: "#0000FF", strokeColor: "#0000FF" }); 
       } else { 
        geoXmlDoc.gpolygons[i].setOptions({ fillColor: "#FF0000", strokeColor: "#FF0000" }); 
       } 
      } 
     } 

     function showAll() { 
      map.fitBounds(geoXmlDoc.bounds); 
      for (var i = 0; i < geoXmlDoc.gpolygons.length; i++) { 
       geoXmlDoc.gpolygons[i].setMap(map); 
      } 
     } 

     function highlightPoly(poly) { 
      google.maps.event.addListener(poly, "mouseover", function() { 
       poly.setOptions({ fillColor: "#FF0000", strokeColor: "#FF0000" }); 
      }); 
      google.maps.event.addListener(poly, "mouseout", function() { 
       poly.setOptions({ fillColor: "#78A04C", strokeColor: "#78A04C", fillOpacity: 0.4 }); 
      }); 
     } 

     function useTheData(doc) { 

      var sidebarHtml = '<table><tr><td><a href="javascript:showAll();">Show All</a></td></tr>'; 

      for (var j = 0; j < doc.length ; j++) { // Added by me to parse all kml files to the map 

       geoXmlDoc = doc[j]; 
       for (var i = 0; i < doc[j].gpolygons.length; i++) { 
        sidebarHtml += '<tr><td>' + doc[j].placemarks[i].name + ' - <a href="javascript:kmlHighlightPoly(' + j + ');">highlight</a><br></td></tr>'; 
        highlightPoly(doc[j].gpolygons[i]); 
       } 
      } 
      sidebarHtml += "</table>"; 

      document.getElementById("map_barralateral").innerHTML = sidebarHtml; 
     }; 

     function hideLoad() { 
      var loaddiv = document.getElementById("loaddiv"); 
      if (loaddiv == null) { 
       alert("Sorry can't find the loaddiv"); 
       return; 
      } 
      loaddiv.style.visibility = "hidden"; 
     } 

     function showLoad() { 
      var loaddiv = document.getElementById("loaddiv"); 
      if (loaddiv == null) { 
       alert("Sorry can't find your loaddiv"); 
       return; 
      } 
      loaddiv.style.visibility = "visible"; 
     } 
    </script> 
</head> 

<body onload="initialize()"> 
    <div id="loaddiv">A carregar.....&#160;&#160;&#160; Por favor aguarde!</div> 
    <div id="map_canvas"></div> 
    <div id="map_barralateral"></div> 
    <div id="map_status"></div> 
</body> 
</html> 

回答

1

您需要修改kmlHighlightPoly也考虑使用多个KML文件:

function kmlHighlightPoly(doc,poly) { 
    for (var j=0; j < geoXmlDoc.length; j++) { 
    for (var i = 0; i < geoXmlDoc[doc].gpolygons.length; i++) { 
     if ((j == doc) && (i == poly)) { 
      geoXmlDoc[j].gpolygons[i].setOptions({ fillColor: "#FF0000", strokeColor: "#FF0000" }); 
     } else { 
      geoXmlDoc[j].gpolygons[i].setOptions({ fillColor: "#78A04C", strokeColor: "#78A04C", fillOpacity: 0.4 }); 
     } 
    } 
    } 
} 

并更改useTheData文档中传递给kmlHighlightPoly函数。

function useTheData(doc) { 
    var sidebarHtml = '<table><tr><td><a href="javascript:showAll();">Show All</a></td></tr>'; 

    for (var j = 0; j < doc.length ; j++) { // Added by me to parse all kml files to the map 

     geoXmlDoc = doc; 
     for (var i = 0; i < doc[j].gpolygons.length; i++) { 
      sidebarHtml += '<tr><td>' + doc[j].placemarks[i].name + ' - <a href="javascript:kmlHighlightPoly('+j+','+i+');">highlight</a><br></td></tr>'; 
      highlightPoly(doc[j].gpolygons[i]); 
     } 
    } 
    sidebarHtml += "</table>"; 
    document.getElementById("map_barralateral").innerHTML = sidebarHtml; 
}; 

working example

+0

非常感谢!整个上午都在这里,最后2个小时试图实现这一目标。只是出于好奇:是否可以在侧边栏上的每个项目上包含复选框,并且在发生事件鼠标事件时,标记为突出显示每个多边形并且让它变得不高亮? –

+0

我期望如此,你只需要编码即可。 – geocodezip

+0

我已经这样做了:)我认为使用kmlHighlightPoly函数的想法是,当它突出显示一个poly时,它会从先前突出显示的一个中移除突出显示。 –

相关问题