59 lines
2.3 KiB
JavaScript
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();
|
|
});
|
|
});
|