Reference: https://imm.dtf.wa.gov.au/helpfiles/Latitude_Longitude_conversion_hlp.htm
Webpage calculator - Latitude and Longitude- Converting Sexagesimal to Decimal
The IMM will only accept latitude and longitude information in the decimal format. Geographical information is often provided in the sexagesimal format, i.e in degrees, minutes and seconds. To convert sexagesimal format to decimal format use the formula below.
Decimal Degrees= degrees + (minutes / 60) + (seconds / 3600)
For example assuming a sexagesimal latitude of east 35 degrees, 45 minutes and 36 seconds. To convert to decimal the calculation is as follows;
Decimal = 35.0 + (43 / 60) + (36 / 3600)
Decimal = 35.0 + 0.71666 + 0.01
Decimal = 35.72666
East = -35.72666
[-350,45’,36”] ⟶ -35.72666
http://www-history.mcs.st-and.ac.uk/HistTopics/Babylonian_numerals.html
Sumerian Sexagesimal Number System
Example:
previous number is equivalent to: 1*603 + 57*602 + 46*601 + 40*600 = 424000
Any decimal number can be represented using the sexagesimal base. Consider next examples:
Example1:
10,12,5;1,52,30 represents the number
10 × 602+ 12 × 601 + 5× 600 +1/60+52/602+30/603 = 36000+720+5+ = 36725.031244888
Exampl2: (Summerians 2200BC)
1;24,51,10 = 1× 600 +24/60+51/602+10/603 ⋍ 2
Example3: (Ptolemy c. 100AD)
3;8,30 =3+8/60+30/602=377/120≈3.141666.... ⋍ π
1 mean lunation (29;31,50,8,20d)
1 regular lunar year = 12 mean lunations (354;22,1,40d)
1 tropical year (365;14,48d)
Claudius Ptolemy of Alexandria (c. 100AD) Author of Almagest Ephemeris (tetrabiblos)
Claudius Ptolemy
Joos van Wassenhove (c.1475)
Map of the Roman Empire c. 100AD (era of Emperor Nero)
// A simple Sexagesimal representation class
package csu.matos;
public class Sexa {
// class variables ------
private int degree;
private int minute;
private int second;
// constructors ------
public Sexa() {
super();
this.degree = 0;
this.minute = 0;
this.second = 0;
}
public Sexa(int degree, int minute, int second) {
super();
this.degree = degree % 360;
this.minute = minute;
this.second = second;
}
public Sexa(double decimalAngle) {
Sexa newSexa = decimal2Sexa(decimalAngle);
this.degree = newSexa.degree;
this.minute = newSexa.minute;
this.second = newSexa.second;
}
// accessors ------
public int getDegree() {
return degree;
}
public void setDegree(int degree) {
this.degree = degree;
}
public int getMinute() {
return minute;
}
public void setMinute(int minute) {
this.minute = minute;
}
public int getSecond() {
return second;
}
public void setSecond(int second) {
this.second = second;
}
// user-defined methods ------
public String showData() {
final String DEGREE_SYMBOL = "\u00B0";
final String MINUTE_SYMBOL = "'";
final String SECOND_SYMBOL = "\"";
return String.format("[%4d%s", degree, DEGREE_SYMBOL)
+ String.format(" %2d%s", minute, MINUTE_SYMBOL)
+ String.format(" %2d%s]",second, SECOND_SYMBOL);
}
private int sexa2TotalSeconds(int degree, int minute, int second) {
// convert degrees,minutes,seconds to decimal notation
int sign = (int) Math.signum(degree);
return sign*(60 * 60 * Math.abs(degree) + 60 * minute + second);
}
private int sexa2TotalSeconds(Sexa angle) {
// convert degrees,minutes,seconds to decimal notation
int sign = (int) Math.signum(angle.degree);
return sign*(60 * 60 * Math.abs(angle.degree)
+ 60 * angle.minute + angle.second);
}
public Sexa seconds2Sexa(int total) {
Sexa result = new Sexa();
result.second = total % 60;
result.minute = ((total - result.second) / 60) % 60;
result.degree = ((total - 60 * result.minute - result.second) / (60 * 60)) % (360);
return result;
}
public Sexa add(Sexa other) {
int thisTotalSeconds = sexa2TotalSeconds(this);
int otherTotalSeconds = sexa2TotalSeconds(other);
Sexa newSexa = seconds2Sexa(thisTotalSeconds + otherTotalSeconds);
// TODO: this = newSexa;
this.degree = newSexa.degree;
this.minute = newSexa.minute;
this.second = newSexa.second;
return newSexa;
}
public Sexa subtract(Sexa other) {
int thisTotalSeconds = sexa2TotalSeconds(this);
int otherTotalSeconds = sexa2TotalSeconds(other);
Sexa newSexa = seconds2Sexa(thisTotalSeconds - otherTotalSeconds);
// TODO: this = newSexa;
this.degree = newSexa.degree;
this.minute = newSexa.minute;
this.second = newSexa.second;
return newSexa;
}
public Sexa decimal2Sexa(double decimalAngle) {
int sign = (int) Math.signum(decimalAngle);
decimalAngle = Math.abs(decimalAngle);
int degree = (int)decimalAngle % 360;
double fraction = 60*(decimalAngle - (int)decimalAngle);
int minute = (int)fraction;
fraction = 60*(fraction - (int)fraction);
int second = (int)(fraction+0.5);
return new Sexa(sign*degree,minute, second);
}
public double sexa2Decimal(Sexa sexaAngle) {
int sign = (int) Math.signum(this.degree);
int deg = (int) Math.abs(this.degree);
return sign
* ( deg
+ sexaAngle.minute / 60.0
+ sexaAngle.second / (60.0 * 60.0));
}
public double sexa2Decimal() {
int sign = (int) Math.signum(this.degree);
int deg = (int) Math.abs(this.degree);
return sign
* ( deg
+ this.minute / 60.0
+ this.second / (60.0 * 60.0));
}
public Sexa complement(){
if (this.degree < 0){
this.degree = 360 + this.degree;
}else {
this.degree = this.degree - 360;
}
return this;
}
}