2017-07-10 4 views
-1

Je souhaite afficher plusieurs polygones sur la carte google et afficher la visibilité de chaque polygone. J'ai écrit le code pour afficher plusieurs polygones et la fonction de bascule, mais les cartes sont affichées mais la fonction bascule ne fonctionne pas. Où est-ce que je fais l'erreur?Comment activer la visibilité de chaque polygone à l'aide de la case à cocher dans Google Maps?


<!DOCTYPE html> 
<html> 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
    <meta charset="utf-8"> 
    <title>Toggle Visibility</title> 
    <style> 
     html, body, #map-canvas { 
     height: 650px; 
     margin: 0px; 
     padding: 0px 
     } 
    </style> 
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script> 
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> 
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script> 
    <!-- Include jQuery --> 
    <script src="https://code.jquery.com/jquery-1.11.0.min.js"></script> 
    <script> 

    var map; 


     function toggleLayer(toggleLayer,id) 
     { 
      if ($('#'+id).is(':checked')) { 
       toggleLayer.setMap(map); 
      } 
      else 
      { 
       toggleLayer.setMap(null); 
      } 
     } 

    function initialize() { 
      var mapOptions = { 
       zoom: 11, 
       center: new google.maps.LatLng(41.8500,-87.9645), 
      }; 

    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

    var path1 = [ 
    [41.769007157585534,-88.20167541503906], 
    [41.76081263047197,-88.12236785888672], 
    [41.717517926019624,-88.19429397583008] 
]; 

    var path2 = [ 
    [41.88336502279732,-88.09249877929688], 
    [41.88157575821145,-88.12957763671875], 
    [41.84271080015277,-88.12408447265625], 
    [41.841431946284025,-88.08425903320312]]; 

var path3 = [ 
    [41.96051129429776,-88.12957763671875], 
    [41.93906275484857, -88.00048828125], 
    [41.884387437207835, -88.02314758300781], 
    [41.879275201550634, -88.07395935058594], 
    [41.948766559468574, -88.11172485351562]]; 

var path4 = [ 
    [41.80203073088394, -88.09730529785156], 
    [41.801006999656636, -88.07533264160156], 
    [41.74313962010849, -88.05301666259766]]; 

var path5 = [ 
    [41.901254912872794, -87.94418334960938], 
    [41.949277245116555, -87.92015075683594], 
    [41.93446570034958, -87.87895202636719], 
    [41.96459591213679, -87.82608032226562], 
    [41.9753167881278, -87.78968811035156], 
    [41.899721690058364, -87.83706665039062], 
    [41.937019660425264, -87.72239685058594], 
    [41.87569639323101, -87.63175964355469]]; 

var path6 = [ 
    [41.780016905285535, -87.95448303222656], 
    [41.83171182161546, -87.96066284179688], 
    [41.83273506215261, -87.94281005859375], 
    [41.81073178596061, -87.88925170898438], 
    [41.81226714359981, -87.78282165527344], 
    [41.87723019276536, -87.77114868164062], 
    [41.782577040867636, -87.74848937988281], 
    [41.77182378456081, -87.88581848144531], 
    [41.801006999656636, -87.9290771484375]]; 

var path7 = [ 
    [41.852173524388824, -87.62489318847656], 
    [41.70880422215806, -87.62283325195312], 
    [41.70829161455626, -88.0059814453125], 
    [41.74416427530836, -87.96821594238281], 
    [41.73545418490723, -87.91603088378906], 
    [41.735966575868716, -87.68051147460938], 
    [41.840920397579936, -87.67707824707031]]; 


    function newPolyLine(path) { 
    var polyLine = new google.maps.Polyline(new google.maps.Polygon({ 
    path:path.map(
     function(source, index, array) { 
      return new google.maps.LatLng(source[0], source[1]); 
     }), 
    // strokeColor:"FF0000", 
    // strokeOpacity:0, 
    // strokeWeight:3, 
    // //fillColor:"#94C11F", 
    // fillOpacity:0.5, 
    // clickable:false 
    strokeColor: '#FF0000', 
    strokeOpacity: 0.8, 
    strokeWeight: 3, 
       // fillOpacity: 0.1, 
    fillColor: '#ff987b', 
    fillOpacity: 0.35, 
    // name: 'Polygon 2', 
    map:map 
    })); 
    polyLine.setMap(map); 
    return polyLine; 
}; 

var multipoly1 = newPolyLine(path1); 
var multipoly2 = newPolyLine(path2); 
var multipoly3 = newPolyLine(path3); 
var multipoly4 = newPolyLine(path4); 
var multipoly5 = newPolyLine(path5); 
var multipoly6 = newPolyLine(path6); 
var multipoly7 = newPolyLine(path7); 
} 


google.maps.event.addDomListener(window, 'load', initialize); 
    </script> 
    </head> 
    <body> 
    <div id="map-canvas"></div> 
    <input id="togglepoly1" type="checkbox" checked="t" onClick="toggleLayer(multipoly1,'togglepoly1')" /> Polygon 1 
    <input id="togglepoly2" type="checkbox" checked="t" onClick="toggleLayer(multipoly1,'togglepoly1')" /> Polygon 2 
    <input id="togglepoly3" type="checkbox" checked="t" onClick="toggleLayer(multipoly1,'togglepoly1')" /> Polygon 3 
    <input id="togglepoly4" type="checkbox" checked="t" onClick="toggleLayer(multipoly1,'togglepoly1')" /> Polygon 4 
    <input id="togglepoly5" type="checkbox" checked="t" onClick="toggleLayer(multipoly1,'togglepoly1')" /> Polygon 5 
    <input id="togglepoly6" type="checkbox" checked="t" onClick="toggleLayer(multipoly1,'togglepoly1')" /> Polygon 6 
    <input id="togglepoly7" type="checkbox" checked="t" onClick="toggleLayer(multipoly1,'togglepoly1')" /> Polygon 7 
    </body> 
</html> 

Toute aide sera grandement appréciée. Merci d'avance. Je l'ai eu à travailler, avec quelques modifications.

+0

Aucun de vos violons ne fonctionne (je ne vois pas de cartes non plus), ils ont tous deux des erreurs javascript. – geocodezip

+0

@geocodezip: Veuillez vérifier maintenant. Ça marche. Si vous pouvez m'aider avec mes questions ce serait génial. Merci d'avance. – BKhanderia

Répondre

0

J'ai eu des erreurs dues à multipoly1 -multipoly7 étant indéfini lorsque j'ai cliqué sur les cases à cocher. J'ai résolu cela en définissant des variables globales pour chacun d'eux, puis en les définissant là où vous les aviez précédemment définies.

J'ai aussi remarqué que le code HTML de vos cases à cocher a eu quelques erreurs, ils étaient tous Vocation:

onClick="toggleLayer(multipoly1,'togglepoly1')" 

J'ai fait les modifications suivantes:

<input id="togglepoly1" type="checkbox" checked="t" onClick="toggleLayer(multipoly1,'togglepoly1')" /> Polygon 1 
<input id="togglepoly2" type="checkbox" checked="t" onClick="toggleLayer(multipoly2,'togglepoly2')" /> Polygon 2 
<input id="togglepoly3" type="checkbox" checked="t" onClick="toggleLayer(multipoly3,'togglepoly3')" /> Polygon 3 
<input id="togglepoly4" type="checkbox" checked="t" onClick="toggleLayer(multipoly4,'togglepoly4')" /> Polygon 4 
<input id="togglepoly5" type="checkbox" checked="t" onClick="toggleLayer(multipoly5,'togglepoly5')" /> Polygon 5 
<input id="togglepoly6" type="checkbox" checked="t" onClick="toggleLayer(multipoly6,'togglepoly6')" /> Polygon 6 
<input id="togglepoly7" type="checkbox" checked="t" onClick="toggleLayer(multipoly7,'togglepoly7')" /> Polygon 7 

Aussi, j'ai changé la logique utilisée lors de la définition des chemins, vous n'avez pas besoin de l'étape supplémentaire pour créer un objet lat, lng pour chaque point du chemin dans votre fonction pour créer le polygone:

var path1 = [ 
    {lat: 41.769007157585534,lng: -88.20167541503906}, 
    {lat: 41.76081263047197,lng: -88.12236785888672}, 
    {lat: 41.717517926019624,lng: -88.19429397583008} 
    ]; 

création de polygone:

function newPolyLine(path) { 
var polyLine = new google.maps.Polygon({ 
paths: path, 
strokeColor: '#FF0000', 
strokeOpacity: 0.8, 
strokeWeight: 2, 
fillColor: '#FF0000', 
fillOpacity: 0.35 
}); 
polyLine.setMap(map); 
return polyLine; 

Si vous définissez les chemins comme décrit, vous aurez pas besoin de créer une latitude, objet lng dans votre fonction newPolyLine, vous pouvez simplement créer le polygone de la même manière que l'échantillon ici:

https://developers.google.com/maps/documentation/javascript/examples/polygon-simple?csw=1

J'ai ce travail dans un jsFiddle que je le lien ci-dessous. S'il vous plaît sachez que j'ai expurgée ma clé API pour la sécurité, vous aurez donc besoin de bien vouloir entrer votre propre à utiliser le violon:

https://jsfiddle.net/9trd0pg2/1/

J'espère que cela aide!

+0

Cela fonctionne parfaitement! Merci beaucoup! :) – BKhanderia