Calculate the Maidenhead locator for latitude/longitude coordinates
This Scilab program calculates the Maidenhead locator from coordinates given in decimal latitude and longitude.
//////////////////////////////////////////////////////////////////////////////
//
// Maidenhead Locator calculator
//
// Convert a longitude/latitude coordinate to Maidenhead Locator
//
// Copyright (C) 2012 Christophe DAVID (ON6ZQ)
// http://www.on6zq.be/Scilab/LatLong2MaidenheadLocator
//
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License version 2 as published
// by the Free Software Foundation (http://www.gnu.org/licenses/gpl.html).
//
//////////////////////////////////////////////////////////////////////////////
//
// This program was last tested with Scilab 5.5
// http://www.scilab.org
//
//////////////////////////////////////////////////////////////////////////////
// A semicolon at the end of an instruction causes the result not to be displayed.
errclear; // clear all errors
clear; // kill variables
clearglobal // kill global variables
clc; // clear command window
tohome; // move the cursor to the upper left corner of the Command Window
// stacksize('max'); // increase the size of this stack to the maximum.
stacksize(1e8); //stacksize('max') does not appear to work on my system ;-(
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
function [locator] = MaidenheadLocator(latitude, longitude)
locator = "";
if ((latitude > -90) & (latitude < 90) & (longitude > -180) & (longitude < 180)) then
longitude2 = longitude + 180;
latitude2 = latitude + 90;
lon1 = int(longitude2 / 20);
lat1 = int(latitude2 / 10);
lon2 = int(modulo(longitude2 / 2, 10));
lat2 = int(modulo(latitude2 , 10));
lon3 = 60 * (longitude2 - (2 * int(longitude2 / 2)));
lat3 = 60 * (latitude2 - int(latitude2));
lon4 = int(lon3 / 5);
lat4 = int(lat3 / 2.5);
locator = strcat([ascii(65 + lon1), ascii(65 + lat1), ascii(48 + lon2), ascii(48 + lat2), ascii(97 + lon4), ascii(97 + lat4)]);
// printf("\nlon1=%f, lon2=%f, lon3=%f, lon4=%f, lat1=%f, lat2=%f, lat3=%f, lat4=%f, locator=%s", lon1, lon2, lon3, lon4, lat1, lat2, lat3, lat4, locator);
end
endfunction
//////////////////////////////////////////////////////////////////////////////
assert_checkequal(MaidenheadLocator( 48.14666 , 11.60833 ), "JN58td");
assert_checkequal(MaidenheadLocator( -34.91 , -56.21166 ), "GF15vc");
assert_checkequal(MaidenheadLocator( 41.714775 , -72.727260 ), "FN31pr");
assert_checkequal(MaidenheadLocator( 37.413708 , -122.1073236 ), "CM87wj");
assert_checkequal(MaidenheadLocator( 59.19222 , -115.5925 ), "DO29ee");
assert_checkequal(MaidenheadLocator( -51.6922 , -58.8349 ), "GD08nh");
assert_checkequal(MaidenheadLocator( 45.8325 , 6.8644 ), "JN35kt");
assert_checkequal(MaidenheadLocator( -35.65944 , 148.79 ), "QF44ji");
//assert_checkequal(MaidenheadLocator() , "");
//////////////////////////////////////////////////////////////////////////////
InputLatitude = 45.8325;
InputLongitude = 6.8644;
printf("\n%f, %f => %s", InputLatitude, InputLongitude, MaidenheadLocator(InputLatitude, InputLongitude));
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// Calculate the Maidenhead Locator for all SOTA summits
// summitslist = "/home/cda/Downloads/summitslist.csv";
// [filedescriptor, err] = mopen(summitslist , "rt")
// if (err <> 0) then
// printf("\nerror reading %s", summitslist);
// else
// while 1
// line = mgetl(filedescriptor, 1)
// if (meof(filedescriptor))
// break;
// else
// fields = tokens(line,',');
// if size(fields, "r") > 10 then
// //printf("\n%s", line)
// loc = MaidenheadLocator(strtod(fields(10)), strtod(fields(9)));
// printf("\n%s %s %s %s", fields(1), fields(10), fields(9), loc);
// end
// end
// end
// mclose(filedescriptor);
// end
// mclose('all') // MUST be the last line of the script
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// Maidenhead Locator calculator
//
// Convert a longitude/latitude coordinate to Maidenhead Locator
//
// Copyright (C) 2012 Christophe DAVID (ON6ZQ)
// http://www.on6zq.be/Scilab/LatLong2MaidenheadLocator
//
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License version 2 as published
// by the Free Software Foundation (http://www.gnu.org/licenses/gpl.html).
//
//////////////////////////////////////////////////////////////////////////////
//
// This program was last tested with Scilab 5.5
// http://www.scilab.org
//
//////////////////////////////////////////////////////////////////////////////
// A semicolon at the end of an instruction causes the result not to be displayed.
errclear; // clear all errors
clear; // kill variables
clearglobal // kill global variables
clc; // clear command window
tohome; // move the cursor to the upper left corner of the Command Window
// stacksize('max'); // increase the size of this stack to the maximum.
stacksize(1e8); //stacksize('max') does not appear to work on my system ;-(
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
function [locator] = MaidenheadLocator(latitude, longitude)
locator = "";
if ((latitude > -90) & (latitude < 90) & (longitude > -180) & (longitude < 180)) then
longitude2 = longitude + 180;
latitude2 = latitude + 90;
lon1 = int(longitude2 / 20);
lat1 = int(latitude2 / 10);
lon2 = int(modulo(longitude2 / 2, 10));
lat2 = int(modulo(latitude2 , 10));
lon3 = 60 * (longitude2 - (2 * int(longitude2 / 2)));
lat3 = 60 * (latitude2 - int(latitude2));
lon4 = int(lon3 / 5);
lat4 = int(lat3 / 2.5);
locator = strcat([ascii(65 + lon1), ascii(65 + lat1), ascii(48 + lon2), ascii(48 + lat2), ascii(97 + lon4), ascii(97 + lat4)]);
// printf("\nlon1=%f, lon2=%f, lon3=%f, lon4=%f, lat1=%f, lat2=%f, lat3=%f, lat4=%f, locator=%s", lon1, lon2, lon3, lon4, lat1, lat2, lat3, lat4, locator);
end
endfunction
//////////////////////////////////////////////////////////////////////////////
assert_checkequal(MaidenheadLocator( 48.14666 , 11.60833 ), "JN58td");
assert_checkequal(MaidenheadLocator( -34.91 , -56.21166 ), "GF15vc");
assert_checkequal(MaidenheadLocator( 41.714775 , -72.727260 ), "FN31pr");
assert_checkequal(MaidenheadLocator( 37.413708 , -122.1073236 ), "CM87wj");
assert_checkequal(MaidenheadLocator( 59.19222 , -115.5925 ), "DO29ee");
assert_checkequal(MaidenheadLocator( -51.6922 , -58.8349 ), "GD08nh");
assert_checkequal(MaidenheadLocator( 45.8325 , 6.8644 ), "JN35kt");
assert_checkequal(MaidenheadLocator( -35.65944 , 148.79 ), "QF44ji");
//assert_checkequal(MaidenheadLocator() , "");
//////////////////////////////////////////////////////////////////////////////
InputLatitude = 45.8325;
InputLongitude = 6.8644;
printf("\n%f, %f => %s", InputLatitude, InputLongitude, MaidenheadLocator(InputLatitude, InputLongitude));
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// Calculate the Maidenhead Locator for all SOTA summits
// summitslist = "/home/cda/Downloads/summitslist.csv";
// [filedescriptor, err] = mopen(summitslist , "rt")
// if (err <> 0) then
// printf("\nerror reading %s", summitslist);
// else
// while 1
// line = mgetl(filedescriptor, 1)
// if (meof(filedescriptor))
// break;
// else
// fields = tokens(line,',');
// if size(fields, "r") > 10 then
// //printf("\n%s", line)
// loc = MaidenheadLocator(strtod(fields(10)), strtod(fields(9)));
// printf("\n%s %s %s %s", fields(1), fields(10), fields(9), loc);
// end
// end
// end
// mclose(filedescriptor);
// end
// mclose('all') // MUST be the last line of the script
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////