$(function() { // var infoWindows=[]; var cd; // countdown var this_marker; // clicked marker var _conf; var _lang; $.fn.googleMap = function(params) { params = $.extend( { zoom : 10, coords : [42.667884, 23.307406], type : "ROADMAP", debug : false, langage : "english", overviewMapControl: false, streetViewControl: false, scrollwheel: true, mapTypeControl: true }, params); _conf=params.akumConf; _lang=params.akumLang; switch(params.type) { case 'ROADMAP': case 'SATELLITE': case 'HYBRID': case 'TERRAIN': params.type = google.maps.MapTypeId[params.type]; break; default: params.type = google.maps.MapTypeId.ROADMAP; break; } this.each(function() { var map = new google.maps.Map(this, { zoom: params.zoom, center: new google.maps.LatLng(params.coords[0], params.coords[1]), mapTypeId: params.type, scrollwheel: params.scrollwheel, streetViewControl: params.streetViewControl, overviewMapControl: params.overviewMapControl, mapTypeControl: params.mapTypeControl, zoomControl: true, fullscreenControl: false, mapTypeControlOptions: { position: google.maps.ControlPosition.BOTTOM_CENTER, style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, mapTypeIds: ["roadmap","satellite"] } }); // Polygons var kmLayer = new google.maps.KmlLayer({ map: map, preserveViewport: true, url: "https://kam.acwa.app/kml/kameno3.kml" }); // Polygons var kmLayer = new google.maps.KmlLayer({ map: map, preserveViewport: true, url: "https://kam.acwa.app/kml/Burgas_municipality.kml" }); $(this).data('googleMap', map); $(this).data('googleLang', params.langage); $(this).data('googleDebug', params.debug); $(this).data('googleMarker', new Array()); var bounds=new google.maps.LatLngBounds(); $(this).data('googleBound', bounds); }); return this; } $.fn.addPath = function(cords) { var path = new google.maps.Polyline({ path: cords, geodesic: true, strokeColor: '#6699FF', strokeOpacity: 0.7, strokeWeight: 8 }); path.setMap($(this).data('googleMap')); return path; } $.fn.removePath = function(path) { path.setMap(null); } $.fn.addMarker = function(params) { // trigger opened infoWindow again // commented for random infoWindow opening on addMarker imarh // google.maps.event.trigger(this_marker, 'click'); params = $.extend( { coords : false, address : false, url : false, id : false, icon : false, draggable : false, label : "", labelClass : "", labelContent : "", labelAnchor : "", labelInBackground : "", date : "", last_date : "", title : "", info : "", current_date : "", types : "", text : "", animation : "", success : function() {} }, params); this.each(function() { $this = $(this); bounds=$this.data('googleBound'); if(!$this.data('googleMap')) { if($this.data('googleDebug')) console.error("jQuery googleMap : Unable to add a marker where there is no map !"); return false; } if(!params.coords && !params.address) { if($this.data('googleDebug')) console.error("jQuery googleMap : Unable to add a marker if you don't tell us where !"); return false; } if(params.address && typeof params.address == "string") { var geocodeAsync = function($that) { var geocoder = new google.maps.Geocoder(); geocoder.geocode({ address : params.address, bounds : $that.data('googleBound'), language : $that.data('googleLang') }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { $that.data('googleBound').extend(results[0].geometry.location); if(params.icon) { var marker = new MarkerWithLabel({ map: $this.data('googleMap'), position: results[0].geometry.location, // label: params.label, // commented for ressolving label remove and random multiply each imarh labelClass: params.labelClass, labelContent: params.labelContent, labelAnchor: params.labelAnchor, labelInBackground: params.labelInBackground, date: params.date, last_date: params.last_date, title: params.title, info: params.info, types: params.types, current_date : params.current_date, icon: params.icon, draggable: params.draggable, animation: params.animation }); } else { var marker = new MarkerWithLabel({ map: $that.data('googleMap'), position: results[0].geometry.location, // label: params.label, // commented for ressolving label remove and random multiply each imarh labelClass: params.labelClass, labelContent: params.labelContent, labelAnchor: params.labelAnchor, labelInBackground: params.labelInBackground, date: params.date, last_date: params.last_date, title: params.title, info: params.info, types: params.types, current_date : params.current_date, draggable: params.draggable, animation: params.animation }); } if(params.draggable) { google.maps.event.addListener(marker, 'dragend', function() { var location = marker.getPosition(); var coords = {}; coords.lat = location.lat(); coords.lon = location.lng(); params.success(coords, $this); }); } if(params.title != "" && params.text != "" && !params.url) { var infowindow = new google.maps.InfoWindow({ content: "

"+params.title+"

"+params.text }); // infoWindows.push(infowindow); var map = $that.data('googleMap'); google.maps.event.addListener(marker, 'click', function() { infowindow.open(map, marker); }); } else if(params.url) { google.maps.event.addListener(marker, 'click', function() { document.location = params.url; }); } if(!params.id) { $that.data('googleMarker').push(marker); } else { $that.data('googleMarker')[params.id] = marker; } if($that.data('googleMarker').length == 1) { // $that.data('googleMap').setCenter(results[0].geometry.location); // $that.data('googleMap').setZoom($that.data('googleMap').getZoom()); } else { // $that.data('googleMap').fitBounds($that.data('googleBound')); } var coords = {}; coords.lat = results[0].geometry.location.lat(); coords.lon = results[0].geometry.location.lng(); params.success(coords, $this); } else { if($this.data('googleDebug')) console.error("jQuery googleMap : Unable to find the place asked for the marker ("+status+")"); } }); }($this); } else { $this.data('googleBound').extend(new google.maps.LatLng(params.coords[0], params.coords[1])); var loc=new google.maps.LatLng(params.coords[0], params.coords[1]); bounds.extend(loc); if(params.icon) { var marker = new MarkerWithLabel({ map: $this.data('googleMap'), position: loc, // label: params.label, // commented for ressolving label remove and random multiply each imarh labelClass: params.labelClass, labelContent: params.labelContent, labelAnchor: params.labelAnchor, labelInBackground: params.labelInBackground, date: params.date, last_date: params.last_date, title: params.title, info: params.info, types: params.types, current_date : params.current_date, icon: params.icon, draggable: params.draggable, animation: params.animation }); } else { var marker = new MarkerWithLabel({ map: $this.data('googleMap'), position: loc, // label: params.label, // commented for ressolving label remove and random multiply each imarh labelClass: params.labelClass, labelContent: params.labelContent, labelAnchor: params.labelAnchor, labelInBackground: params.labelInBackground, date: params.date, last_date: params.last_date, title: params.title, info: params.info, types: params.types, current_date : params.current_date, draggable: params.draggable, animation: params.animation }); } if(params.title != "" && params.text != "" && !params.url) { var infowindow = new google.maps.InfoWindow({ content: "

"+params.title+"

"+params.text }); // infoWindows.push(infowindow); var map = $this.data('googleMap'); var myZIndex=parseInt(google.maps.Marker.MAX_ZINDEX); google.maps.event.addListener(marker, 'click', function(t) { if (!infowindow.getMap()) { myZIndex=myZIndex + 1; marker.setZIndex(parseInt(myZIndex)); // $.each(infoWindows, function(k,v) { // infoWindows[k].close(); // }); $.ajax({ url: "/api/v2/deviceGetInfoWidget", method: "POST", data: JSON.stringify({ "devID" : params.title, "info" : params.info, "date" : params.current_date }), beforeSend: function() { infowindow.open(map, marker); infowindow.setContent('

'+params.title+'

'); }, success: function(res) { var data=res.data.devInfo; this_marker=marker; var content='

'+params.title+'

'; /* var blink=''; if (data.next_refresh<0) { blink="blink"; } content+='
'+toHHMMSS(data.next_refresh)+'
'; */ content+='
'; var mapAlarmBgColors={ 1:"color: #eea800;", 2:"color: #ed730f;", 3:"color: #dc1e1e;" } // map if (data.params!=null) { var all_params=''; if (typeof data.alarms==='object' && data.alarms!==null) { var hasAlarms=true; var firstAlarmColor=''; var firstAlarmColorID=data.alarms[Object.keys(data.params)[0]]; if (data.alarms.hasOwnProperty(Object.keys(data.params)[0])) { firstAlarmColor=mapAlarmBgColors[firstAlarmColorID]; var firstBlink="blink"; } all_params+='
'+Object.keys(data.params)[0]+' '+Object.values(data.params)[0]+'
'; } // graph only first param var graphParams=[]; graphParams.push(Object.keys(data.params)[0]); content+='
'+all_params+'
'; var img_url=''; var imgs=' '; if (data.imgIDs.length) { $.each(data.imgIDs, function(k,v) { img_url='imgs/'+params.title+'/'+v; thumb_url='imgs/'+params.title+'/thumb/'+v; var lastIMG=''; imgs+=''+lastIMG+''; }); content+='
'+imgs+'
'; } content+='
'; var graphParamReports=[]; var MinMaxXAxis=[]; var seriesAxis=[]; $.ajax({ url: "/api/v2/reportsGetDataWidget", method: "POST", data: JSON.stringify({ "devices" : [params.title], "params" : graphParams, }), beforeSend: function() { $('.preloader').removeClass('hide'); }, success: function(res) { var i=0; $.each(graphParams, function(k,v) { $.each(res.data.reports, function(k1,v1) { if (k1.indexOf(v+'[')!=-1) { graphParamReports.push(res.data.reports[k1]); if (i==0) { var p=''; } else { var p=i+1; } i++; seriesAxis.push({ yaxis: "y"+p+"axis", label: v }); if (i>=9) { return false; } } }) }); if (graphParamReports.length>0) { var merged = [].concat.apply([], graphParamReports); $.each(merged, function(k,v) { MinMaxXAxis.push(v[0]); }); var minXaxis=Math.min(...MinMaxXAxis); var maxXaxis=Math.max(...MinMaxXAxis); var plot_options={ grid : { drawGridlines: false, background: 'transparent', borderWidth: 0, shadow: false }, axes : { xaxis: { showTicks : false, renderer: $.jqplot.DateAxisRenderer, tickRenderer: $.jqplot.CanvasAxisTickRenderer, min: minXaxis, max: maxXaxis } }, seriesDefaults: { shadow: false, lineWidth: 1, showMarker: false, fillToZero: true }, axesDefaults: { showTicks : true, autoscale: true, tickOptions: { fontSize: '8px' }, // useSeriesColor: true, rendererOptions: { alignTicks: false } }, series: seriesAxis } $('#'+params.id+'akumPlot').css('height','80px'); var plot=$.jqplot(params.id+'akumPlot', graphParamReports, plot_options); } } }); } if (data.last) { content+='
'+data.last+'
'; } infowindow.setContent(content); $("a.fancybox").fancybox({ buttons: [ // "zoom", // "share", // "slideShow", // "fullScreen", // "download", // "thumbs", "close" ], protect: true, wheel: "auto" }); /* clearInterval(cd); cd=setInterval(function() { data.next_refresh=data.next_refresh-1; $('.infow_countdown').text(toHHMMSS(data.next_refresh)); if (data.next_refresh<=10) { $('.infow_countdown').addClass('blink'); } else { $('.infow_countdown').removeClass('blink'); } }, 1000); */ } }); } else { infowindow.close(); } }); } else if(params.url) { google.maps.event.addListener(marker, 'click', function() { document.location = params.url; }); } if(params.draggable) { google.maps.event.addListener(marker, 'dragend', function() { var location = marker.getPosition(); var coords = {}; coords.lat = location.lat(); coords.lon = location.lng(); params.success(coords, $this); }); } if(!params.id) { $this.data('googleMarker').push(marker); } else { $this.data('googleMarker')[params.id] = marker; } if($this.data('googleMarker').length == 1) { $this.data('googleMap').setCenter(new google.maps.LatLng(params.coords[0], params.coords[1])); $this.data('googleMap').setZoom($this.data('googleMap').getZoom()); } else { if (params.init) { $this.data('googleMap').fitBounds($this.data('googleBound')); $this.data('googleMap').setZoom($this.data('googleMap').getZoom()); } } // map.panToBounds(bounds); params.success({ lat: params.coords[0], lon: params.coords[1] }, $this); } }); return this; } $.fn.removeMarker = function(id) { this.each(function() { var $this = $(this); if(!$this.data('googleMap')) { if($this.data('googleDebug')) console.log("jQuery googleMap : Unable to delete a marker where there is no map !"); return false; } var $markers = $this.data('googleMarker'); if(typeof $markers[id] != 'undefined') { var label_text=$markers[id].labelContent; var devID=label_text.substring(0, label_text.indexOf(' ')); $('.pinger_labels.round.'+devID).remove(); // $('.pinger_labels.round:contains('+label_text+')').remove(); $markers[id].setMap(null); if($this.data('googleDebug')) console.log('jQuery googleMap : marker deleted'); var bounds = new google.maps.LatLngBounds(); for (var i = 0; i < Object.keys($markers).length; i++) { var marker=Object.values($markers)[i]; var geoCode = new google.maps.LatLng(marker.position.lat(), marker.position.lng()); bounds.extend(geoCode); } // $this.data('googleMap').fitBounds(bounds); // $this.data('googleMap').panToBounds(bounds); return true; } else { if($this.data('googleDebug')) console.error("jQuery googleMap : Unable to delete a marker if it not exists !"); return false; } }); } $.fn.addWay = function(params) { params = $.extend( { start : false, end : false, step : [], route : false, langage : 'english' }, params); var direction = new google.maps.DirectionsService({ region: "fr" }); var way = new google.maps.DirectionsRenderer({ draggable: true, map: $(this).data('googleMap'), panel: document.getElementById(params.route), provideTripAlternatives: true, suppressMarkers: true, // suppressInfoWindows: true, }); document.getElementById.innerHTML = ""; var waypoints = []; for(var i in params.step) { var step; if(typeof params.step[i] == "object") { step = new google.maps.LatLng(params.step[i][0], params.step[i][1]); } else { step = params.step[i]; } waypoints.push({ location: step, stopover: true }); } if(typeof params.end != "object") { var geocodeAsync = function($that) { var geocoder = new google.maps.Geocoder(); geocoder.geocode({ address : params.end, bounds : $that.data('googleBound'), language : params.langage }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { var request = { origin: params.start, destination: results[0].geometry.location, travelMode: google.maps.DirectionsTravelMode.DRIVING, region: "fr", waypoints: waypoints }; direction.route(request, function(response, status) { if (status == google.maps.DirectionsStatus.OK) { way.setDirections(response); } else { if($that.data('googleDebug')) console.error("jQuery googleMap : Unable to find the place asked for the route ("+response+")"); } }); } else { if($that.data('googleDebug')) console.error("jQuery googleMap : Address not found"); } }); }($(this)); } else { var request = { // origin: params.start, origin: new google.maps.LatLng(params.start[0], params.start[1]), destination: new google.maps.LatLng(params.end[0], params.end[1]), // travelMode: google.maps.DirectionsTravelMode.DRIVING, travelMode: google.maps.DirectionsTravelMode.WALKING, region: "fr", waypoints: waypoints }; direction.route(request, function(response, status) { if (status == google.maps.DirectionsStatus.OK) { way.setDirections(response); } else { if($(this).data('googleDebug')) console.error("jQuery googleMap : Address not found"); } }); } return this; } });