diff --git a/application/config/cloudlog.php b/application/config/cloudlog.php
index b1209ad7..e51407e1 100644
--- a/application/config/cloudlog.php
+++ b/application/config/cloudlog.php
@@ -32,4 +32,17 @@ $config['show_time'] = FALSE;
| Default is: M
|
*/
-$config['measurement_base'] = 'M';
\ No newline at end of file
+$config['measurement_base'] = 'M';
+
+/*
+|--------------------------------------------------------------------------
+| Show Gridsquares on Maps
+|--------------------------------------------------------------------------
+|
+| You can turn on whether gridsquares are shown on maps automatically else
+| you have to turn them on via the layer control
+|
+| Default is: FALSE
+|
+*/
+$config['map_gridsquares'] = FALSE;
\ No newline at end of file
diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php
index 977df936..f67386cb 100644
--- a/application/views/interface_assets/footer.php
+++ b/application/views/interface_assets/footer.php
@@ -31,6 +31,7 @@ $(document).ready(function() {
uri->segment(1) == "" || $this->uri->segment(1) == "dashboard" ) { ?>
+
diff --git a/assets/js/leaflet/L.Maidenhead.js b/assets/js/leaflet/L.Maidenhead.js
new file mode 100644
index 00000000..0b0bde27
--- /dev/null
+++ b/assets/js/leaflet/L.Maidenhead.js
@@ -0,0 +1,113 @@
+/*
+ * L.Maidenhead displays a Maidenhead Locator of lines on the map.
+ */
+
+L.Maidenhead = L.LayerGroup.extend({
+
+
+ options: {
+ // Line and label color
+ color: 'rgba(255, 0, 0, 0.4)',
+ // Redraw on move or moveend
+ redraw: 'move'
+ },
+
+ initialize: function (options) {
+ L.LayerGroup.prototype.initialize.call(this);
+ L.Util.setOptions(this, options);
+
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+ var grid = this.redraw();
+ this._map.on('viewreset '+ this.options.redraw, function () {
+ grid.redraw();
+ });
+
+ this.eachLayer(map.addLayer, map);
+ },
+
+ onRemove: function (map) {
+ // remove layer listeners and elements
+ map.off('viewreset '+ this.options.redraw, this.map);
+ this.eachLayer(this.removeLayer, this);
+ },
+
+ redraw: function () {
+ var d3 = new Array(20,10,10,10,10,10,1 ,1 ,1 ,1 ,1/24,1/24,1/24,1/24,1/24,1/240,1/240,1/240,1/240,1/240/24,1/240/24 );
+ var lat_cor = new Array(0 ,8 ,8 ,8 ,10,14,6 ,8 ,8 ,8 ,1.4 ,2.5 ,3 ,3.5 ,4 ,4 ,3.5 ,3.5 ,3 ,1.8 ,1.6 );
+ var bounds = map.getBounds();
+ var zoom = map.getZoom();
+ var unit = d3[zoom];
+ var lcor = lat_cor[zoom];
+ var w = bounds.getWest();
+ var e = bounds.getEast();
+ var n = bounds.getNorth();
+ var s = bounds.getSouth();
+ if (zoom==1) {var c = 2;} else {var c = 0.1;}
+ if (n > 85) n = 85;
+ if (s < -85) s = -85;
+ var left = Math.floor(w/(unit*2))*(unit*2);
+ var right = Math.ceil(e/(unit*2))*(unit*2);
+ var top = Math.ceil(n/unit)*unit;
+ var bottom = Math.floor(s/unit)*unit;
+ this.eachLayer(this.removeLayer, this);
+ for (var lon = left; lon < right; lon += (unit*2)) {
+ for (var lat = bottom; lat < top; lat += unit) {
+ var bounds = [[lat,lon],[lat+unit,lon+(unit*2)]];
+ this.addLayer(L.rectangle(bounds, {color: this.options.color, weight: 1, fill:false, interactive: false}));
+ //var pont = map.latLngToLayerPoint([lat,lon]);
+ //console.log(pont.x);
+ this.addLayer(this._getLabel(lon+unit-(unit/lcor),lat+(unit/2)+(unit/lcor*c)));
+ }
+ }
+ return this;
+ },
+
+ _getLabel: function(lon,lat) {
+ var title_size = new Array(0 ,10,12,16,20,26,12,16,24,36,12 ,14 ,20 ,36 ,60 ,12 ,20 ,36 ,60 ,12 ,24 );
+ var zoom = map.getZoom();
+ var size = title_size[zoom]+'px';
+ var title = '' + this._getLocator(lon,lat) + '';
+ var myIcon = L.divIcon({className: 'my-div-icon', html: title});
+ var marker = L.marker([lat,lon], {icon: myIcon}, clickable=false);
+ return marker;
+ },
+
+ _getLocator: function(lon,lat) {
+ var ydiv_arr=new Array(10, 1, 1/24, 1/240, 1/240/24);
+ var d1 = "ABCDEFGHIJKLMNOPQR".split("");
+ var d2 = "ABCDEFGHIJKLMNOPQRSTUVWX".split("");
+ var d4 = new Array(0 ,1 ,1 ,1 ,1 ,1 ,2 ,2 ,2 ,2 ,3 ,3 ,3 ,3 ,3 ,4 ,4 ,4 ,4 ,5 ,5 );
+ var locator = "";
+ var x = lon;
+ var y = lat;
+ var precision = d4[map.getZoom()];
+ while (x < -180) {x += 360;}
+ while (x > 180) {x -=360;}
+ x = x + 180;
+ y = y + 90;
+ locator = locator + d1[Math.floor(x/20)] + d1[Math.floor(y/10)];
+ for (var i=0; i<4; i=i+1) {
+ if (precision > i+1) {
+ rlon = x%(ydiv_arr[i]*2);
+ rlat = y%(ydiv_arr[i]);
+ if ((i%2)==0) {
+ locator += Math.floor(rlon/(ydiv_arr[i+1]*2)) +""+ Math.floor(rlat/(ydiv_arr[i+1]));
+ } else {
+ locator += d2[Math.floor(rlon/(ydiv_arr[i+1]*2))] +""+ d2[Math.floor(rlat/(ydiv_arr[i+1]))];
+ }
+ }
+ }
+ return locator;
+ },
+
+
+
+
+});
+
+L.maidenhead = function (options) {
+ return new L.Maidenhead(options);
+};
diff --git a/assets/js/leaflet/leafembed.js b/assets/js/leaflet/leafembed.js
index ca38d65e..41b82413 100644
--- a/assets/js/leaflet/leafembed.js
+++ b/assets/js/leaflet/leafembed.js
@@ -5,7 +5,7 @@ var ajaxRequest;
var plotlist;
var plotlayers=[];
-function initmap() {
+function initmap(ShowGrid = 'No') {
// set up AJAX request
ajaxRequest=getXmlHttpObject();
if (ajaxRequest==null) {
@@ -27,6 +27,15 @@ function initmap() {
askForPlots();
map.on('moveend', onMapMove);
+
+ if(ShowGrid == "Yes") {
+ var maidenhead = L.maidenhead().addTo(map);
+ }
+
+ var layerControl = new L.Control.Layers(null, {
+ 'Gridsquares': maidenhead = L.maidenhead()
+ }).addTo(map);
+
}
function getXmlHttpObject() {