@@ -9,7 +9,9 @@ Module.register("MMM-BirdNET", {
99 lon : - 76.47363144 ,
1010 width : '400px' ,
1111 height : '400px' ,
12- zoomLevel : 7
12+ zoomLevel : 7 ,
13+ markerDistance : 300 ,
14+ markerColor : 'LightGreen' // distance from map center to put markers
1315 } ,
1416
1517 start : function ( ) {
@@ -26,6 +28,7 @@ Module.register("MMM-BirdNET", {
2628 this . birdData = { } ;
2729 this . birdMap = null ;
2830 this . markersLayer = new L . layerGroup ( ) ;
31+ this . locations = [ ] ;
2932
3033 this . popupOptions = {
3134 closeButton : false ,
@@ -111,6 +114,9 @@ Module.register("MMM-BirdNET", {
111114
112115 this . birdData = JSON . parse ( birdData ) ;
113116 var markers = this . markersLayer ;
117+ this . locations = [ ] ;
118+ var skipped = 0 ;
119+ var markerRadius = this . birdMap . getZoom ( ) - 2 ;
114120 markers . clearLayers ( ) ; // clear markers ahead of data load
115121
116122 var observations = this . birdData . observations ;
@@ -119,21 +125,35 @@ Module.register("MMM-BirdNET", {
119125 var lat = entry . lat ;
120126 var lon = entry . lon ;
121127 var dist = this . getDistance ( this . config . lat , this . config . lon , lat , lon ) ;
122- if ( dist < 300 ) { // remove entries further than 300 km
128+ if ( dist < this . config . markerDistance ) { // remove entries further than 300 km
129+ // ensure only one marker per lat/lon to nearest 10th.
130+ var loc_code = ( ( lat * 5 ) . toFixed ( 0 ) / 5 ) + ";" + ( ( lon * 5 ) . toFixed ( 0 ) / 5 ) ;
131+ if ( this . locations . includes ( loc_code ) ) {
132+ skipped ++ ;
133+ continue ;
134+ } else ( this . locations . push ( loc_code ) ) ;
135+
123136 // split species into common & Latin
124137 var species_split = entry . species . split ( ";" ) ;
125138 var name = species_split [ 0 ] ;
126139 var species = species_split [ 1 ] ;
127140 var percent = entry . score ;
128141 var ts = entry . ts ;
129142
130- var marker = L . marker ( [ lat , lon ] ) ;
143+ // var marker = L.marker([lat, lon]);
144+ var circle = L . circleMarker ( [ lat , lon ] , {
145+ stroke : false ,
146+ fill : true ,
147+ fillColor : this . config . markerColor ,
148+ radius : markerRadius ,
149+ fillOpacity : 1
150+ } ) ;
131151 var popup = this . createPopup ( name , species , percent , ts ) ;
132- marker . bindPopup ( popup , this . popupOptions ) ;
133- markers . addLayer ( marker ) ;
134- }
152+ circle . bindPopup ( popup , this . popupOptions ) ;
153+ markers . addLayer ( circle ) ;
154+ } else { skipped ++ ; }
135155 }
136- this . schedulePopInterval ( ) ;
156+ Log . info ( "Processed " + observations . length + " bird hits. (skipped " + skipped + ")" ) ;
137157 } ,
138158
139159 createPopup : function ( name , species , percent , ts ) {
@@ -256,6 +276,7 @@ Module.register("MMM-BirdNET", {
256276 this . loaded = true ;
257277 this . buildMap ( ) ;
258278 this . updateData ( ) ;
279+ this . schedulePopInterval ( ) ;
259280 }
260281 } ,
261282
0 commit comments