galadrielmap_sk
Version:
a server-based chartplotter navigation software for pleasure crafts, motorhomes, and off-road cars. It's can be used on tablets and smartphones without install any app. Only browser need.
85 lines (69 loc) • 2.08 kB
JavaScript
var CoordinateNumber, Coordinates, Validator;
Coordinates = class Coordinates {
constructor(coordinateString) {
this.coordinates = coordinateString;
this.latitudeNumbers = null;
this.longitudeNumbers = null;
this.validate();
this.parse();
}
validate() {
var validator;
validator = new Validator();
return validator.validate(this.coordinates);
}
parse() {
this.groupCoordinateNumbers();
this.latitude = this.extractLatitude();
return this.longitude = this.extractLongitude();
}
groupCoordinateNumbers() {
var coordinateNumbers, numberCountEachCoordinate;
coordinateNumbers = this.extractCoordinateNumbers(this.coordinates);
numberCountEachCoordinate = coordinateNumbers.length / 2;
this.latitudeNumbers = coordinateNumbers.slice(0, numberCountEachCoordinate);
return this.longitudeNumbers = coordinateNumbers.slice((0 - numberCountEachCoordinate));
}
extractCoordinateNumbers(coordinates) {
return coordinates.match(/-?\d+(\.\d+)?/g);
}
extractLatitude() {
var latitude;
latitude = this.coordinateNumbersToDecimal(this.latitudeNumbers);
if (this.latitudeIsNegative()) {
latitude = latitude * -1;
}
return latitude;
}
extractLongitude() {
var longitude;
longitude = this.coordinateNumbersToDecimal(this.longitudeNumbers);
if (this.longitudeIsNegative()) {
longitude = longitude * -1;
}
return longitude;
}
coordinateNumbersToDecimal(coordinateNumbers) {
var coordinate, decimalCoordinate;
coordinate = new CoordinateNumber(coordinateNumbers);
coordinate.detectSpecialFormats();
decimalCoordinate = coordinate.toDecimal();
return decimalCoordinate;
}
latitudeIsNegative() {
var isNegative;
isNegative = this.coordinates.match(/s/i);
return isNegative;
}
longitudeIsNegative() {
var isNegative;
isNegative = this.coordinates.match(/w/i);
return isNegative;
}
getLatitude() {
return this.latitude;
}
getLongitude() {
return this.longitude;
}
};