1
0
Fork 0
satnogs-network/network/static/js/gridsquare.js

59 lines
2.3 KiB
JavaScript

/* This script calculates the grid locator based on the Maidenhead
* Locator System. It references the longitude and latitude fields
* in the Station Add/Edit view, calculating the grid square and adding
* that to the location field if both lat/lon values exist and are
* valid.
*/
$(document).ready(function() {
'use strict';
function gridsquare() {
var FIELD_IDENTIFIERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
// starting points, the fields from the Station form
var latitude = $('#lat').val();
var longitude = $('#lng').val();
// this gets called any time one of the two lat/long fields
// have been changed. We only need to do the work if both
// fields have been entered with a proper entry, otherwise
// skip the cycles
if ((latitude !== '') &&
(latitude <= 90) &&
(latitude >= -90) &&
(longitude !== '') &&
(longitude <= 180) &&
(longitude >= -180)) {
// to figure out the individual grid identifiers we make a mess
// of the longitude and latitude
var working_lon = ((+longitude + 180) % 20);
var lon_field = FIELD_IDENTIFIERS[Math.floor((+longitude + 180) / 20)];
var lon_square = Math.floor(working_lon / 2);
working_lon = Math.floor((working_lon % 2) * 12);
var lon_subsquare = FIELD_IDENTIFIERS[working_lon];
var working_lat = ((+latitude + 90) % 10);
var lat_field = FIELD_IDENTIFIERS[Math.floor((+latitude + 90) / 10)];
var lat_square = Math.floor(working_lat);
working_lat = Math.floor((working_lat - Math.floor(working_lat)) * 24);
var lat_subsquare = FIELD_IDENTIFIERS[working_lat];
// write the result, like EM69uf, to qthlocator field
var qthlocator = $('#qthlocator');
qthlocator.val('' + lon_field + lat_field + lon_square + lat_square +
lon_subsquare.toLowerCase() + lat_subsquare.toLowerCase());
}
}
$('input#lat').change(function() {
gridsquare();
});
$('input#lng').change(function() {
gridsquare();
});
});