javascript - How can I add a function as an action on a Leaflet layer? -
i have leaflet map , functions parse data json.
when click on "parcuri" button layers button, want display datas using addscoala1() function. how can this?
i'm noob in programming in leaflet. thanks! jsfiddle:
https://jsfiddle.net/324h2d9q/82/
$(document).ready(function() { var osmurl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', osmattrib = '© <a href="http://openstreetmap.org/copyright">openstreetmap</a> contributors', osm = l.tilelayer(osmurl), map = new l.map('map', { center: new l.latlng(44.9323281,26.0306833), zoom: 13 }), drawnitems = l.featuregroup().addto(map); l.control.layers({ 'scoli': osm.addto(map), 'muzee': osm.addto(map), 'parcuri': osm.addto(map) },).addto(map); var scoala = json.parse( '<?php echo json_encode($scoala) ?>' ); scoala1= json.stringify(scoala); var muzeu = json.parse( '<?php echo json_encode($muzeu) ?>' ); muzeu1= json.stringify(muzeu); var zona = json.parse( '<?php echo json_encode($zona) ?>' ); zona1= json.stringify(zona); function addscoala1() { for(var i=0; i<scoala.length; i++) { var greenicon = new l.icon({ iconurl: 'https://cdn.rawgit.com/pointhi/leaflet-color-markers/master/img/marker-icon-2x-green.png', shadowurl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/images/marker-shadow.png', iconsize: [25, 41], iconanchor: [12, 41], popupanchor: [1, -34], shadowsize: [41, 41] }); var marker = l.marker( [scoala[i]['latitudine'], scoala[i]['longitudine']], {icon: greenicon}).addto(map); marker.bindpopup( "<b>" + scoala[i]['scoala']+"</b><br>detalii:" + scoala[i]['detalii'] + "<br />telefon: " + scoala[i]['telefon']); } } function stringtogeopoints( geo ) { var linespin = geo.split(","); var lineslat = new array(); var lineslng = new array(); for(i=0; < linespin.length; i++) { if(i % 2) { lineslat.push(linespin[i]); }else{ lineslng.push(linespin[i]); } } var latlngline = new array(); for(i=0; i<lineslng.length;i++) { latlngline.push( l.latlng( lineslat[i], lineslng[i])); } return latlngline; } function addzona1() { for(var i=0; < zona.length; i++) { //console.log(zona[i]['geolocatii']); var polygon = l.polygon( stringtogeopoints(zona[i]['geolocatii']), { color: 'red'}).addto(map); polygon.bindpopup( "<b>" + zona[i]['nume']); } } function addmuzeu1() { for(var i=0; i<muzeu.length; i++) { var marker = l.marker( [muzeu[i]['latitudine'], muzeu[i]['longitudine']]).addto(map); marker.bindpopup( "<b>" + muzeu[i]['muzeu']+"</b><br>detalii:" + muzeu[i]['detalii'] + "<br />telefon: " + muzeu[i]['telefon']); } } $("#login").bootstrapvalidator({ framework: "bootstrap", icon: { valid: "glyphicon glyphicon-ok", invalid: "glyphicon glyphicon-remove", validating: "glyphicon glyphicon-refresh" }, fields: { "email": { validators: { notempty: { message: "required field" } } }, "user_password": { validators: { notempty: { message: "required field" } } } } }); $("#am-uitat-parola").bootstrapvalidator({ framework: "bootstrap", icon: { valid: "glyphicon glyphicon-ok", invalid: "glyphicon glyphicon-remove", validating: "glyphicon glyphicon-refresh" }, fields: { "user_recover_email": { validators: { notempty: { message: "required field" }, emailaddress: { message: "e-mail address invalid" } } } } }); $("#link-forgot").click(function(){ $("#am-uitat-parola").toggle(); }); }); </script>
use layer groups , layers control instead of method.
http://leafletjs.com/examples/layers-control/
something should work :
// create layer group can add markers var layergroup = new l.layergroup(); for(var i=0; i<scoala.length; i++) { var greenicon = new l.icon({ iconurl: 'https://cdn.rawgit.com/pointhi/leaflet-color-markers/master/img/marker-icon-2x-green.png', shadowurl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/images/marker-shadow.png', iconsize: [25, 41], iconanchor: [12, 41], popupanchor: [1, -34], shadowsize: [41, 41] }); // create marker , bind popup , add layergroup var marker = l.marker( [scoala[i]['latitudine'], scoala[i]['longitudine']], { icon: greenicon }).bindpopup( "<b>" + scoala[i]['scoala']+"</b><br>detalii:" + scoala[i]['detalii'] + "<br />telefon: " + scoala[i]['telefon']).addto(layergroup); } // it's function add control map l.control.layers(layergroup).addto(map);
Comments
Post a Comment