decimal2sexagesimal function
Converts a decimal coordinate value to sexagesimal format
final String sexa1 = decimal2sexagesimal(51.519475);
expect(sexa1, '51° 31\' 10.11"');
Implementation
String decimal2sexagesimal(final double dec) {
List<int> _split(final double value) {
// NumberFormat is necessary to create digit after comma if the value
// has no decimal point (only necessary for browser)
final List<String> tmp = new NumberFormat("0.0#####")
.format(round(value, decimals: 10))
.split('.');
return <int>[int.parse(tmp[0]).abs(), int.parse(tmp[1])];
}
final List<int> parts = _split(dec);
final int integerPart = parts[0];
final int fractionalPart = parts[1];
final int deg = integerPart;
final double min = double.parse("0.${fractionalPart}") * 60;
final List<int> minParts = _split(min);
final int minFractionalPart = minParts[1];
final double sec = (double.parse("0.${minFractionalPart}") * 60);
return "${deg}° ${min.floor()}' ${round(sec, decimals: 2).toStringAsFixed(2)}\"";
}