You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

141 lines
5.5 KiB

3 years ago
var LatLngSwitch = function (parent) {
this.Parent = parent;
this.Startup = function () {
$('#first-lng-copy-btn').on('click', this.OnFirstLngCopyClick.bind(this));
$('#first-lat-copy-btn').on('click', this.OnFirstLatCopyClick.bind(this));
$('#second-lng-copy-btn').on('click', this.OnSecondLngCopyClick.bind(this));
$('#second-lat-copy-btn').on('click', this.OnSecondLatCopyClick.bind(this));
$('#first-lng-switch-btn').on('click', this.onFirstLngSwitchClick.bind(this));
$('#first-lat-switch-btn').on('click', this.onFirstLatSwitchClick.bind(this));
$('#second-lng-switch-btn').on('click', this.onSecondLngSwitchClick.bind(this));
$('#second-lat-switch-btn').on('click', this.onSecondLatSwitchClick.bind(this));
$('#close-lat-lng-switch-dialog').on('click', this.HideDialog.bind(this));
$('#dialog-lat-lng-switch-cancel').on('click', this.HideDialog.bind(this));
};
this.ShowDialog = function (point) {
$('#dialog-lat-lng-switch').show();
var lng = this.getLatLng(point.lng);
var lat = this.getLatLng(point.lat);
var decimalLng = this.changeToDecimal(lng);
var decimalLat = this.changeToDecimal(lat);
// change to degree
var firstLngDegree = $('#first-lng-degree').val(decimalLng.degree);
var firstLngMinute = $('#first-lng-minute').val(decimalLng.minute);
var firstLngSecond = $('#first-lng-second').val(decimalLng.second);
var firstLatDegree = $('#first-lat-degree').val(decimalLat.degree);
var firstLatMinute = $('#first-lat-minute').val(decimalLat.minute);
var firstLatSecond = $('#first-lat-second').val(decimalLat.second);
var degreeLng = this.changeToDegree(firstLngDegree.val(), firstLngMinute.val(), firstLngSecond.val());
var degreeLat = this.changeToDegree(firstLatDegree.val(), firstLatMinute.val(), firstLatSecond.val());
$('#first-lng-decimal').val(degreeLng);
$('#first-lat-decimal').val(degreeLat);
// change to decimal
$('#second-lng-decimal').val(lng);
$('#second-lat-decimal').val(lat);
$('#second-lng-degree').val(decimalLng.degree);
$('#second-lng-minute').val(decimalLng.minute);
$('#second-lng-second').val(decimalLng.second);
$('#second-lat-degree').val(decimalLat.degree);
$('#second-lat-minute').val(decimalLat.minute);
$('#second-lat-second').val(decimalLat.second);
$('#hide-lng').val(decimalLng.degree + "°" + decimalLng.minute + "'" + decimalLng.second + "\"");
$('#hide-lat').val(decimalLat.degree + "°" + decimalLat.minute + "'" + decimalLat.second + "\"");
};
this.getLatLng = function (value) {
value = value.toString()
let index = value.indexOf('.')
if (index !== -1) {
value = value.substring(0, 6 + index + 1)
} else {
value = value.substring(0)
}
return parseFloat(value).toFixed(6)
}
this.onFirstLngSwitchClick = function () {
var value = this.changeToDegree($('#first-lng-degree').val(), $('#first-lng-minute').val(), $('#first-lng-second').val());
$('#first-lng-decimal').val(value);
};
this.onFirstLatSwitchClick = function () {
var value = this.changeToDegree($('#first-lat-degree').val(), $('#first-lat-minute').val(), $('#first-lat-second').val());
$('#first-lat-decimal').val(value)
}
this.onSecondLngSwitchClick = function () {
var value = this.changeToDecimal($('#second-lng-decimal').val());
$('#second-lng-degree').val(value.degree);
$('#second-lng-minute').val(value.minute);
$('#second-lng-second').val(value.second);
};
this.onSecondLatSwitchClick = function () {
var value = this.changeToDecimal($('#second-lat-decimal').val());
$('#second-lat-degree').val(value.degree);
$('#second-lat-minute').val(value.minute);
$('#second-lat-second').val(value.second);
}
this.changeToDecimal = function (value) {
var text = value.split(".");
var degree = text[0];
var temp = "0." + text[1];
var temp = String(temp * 60);
var str = temp.split(".");
var minute = str[0];
temp = "0." + str[1];
temp = temp * 60;
var second = temp;
return {
degree: degree,
minute: minute,
second: second
}
}
this.changeToDegree = function (degree, minute, second) {
var str = parseFloat(minute) + parseFloat(second / 60);
var value = parseFloat(str / 60) + parseFloat(degree);
return value;
}
this.HideDialog = function () {
$('#dialog-lat-lng-switch').hide();
$('#map').css('cursor', 'grab');
this.Parent.isSwitch = false;
};
this.OnFirstLngCopyClick = function () {
var selected = document.querySelector('#first-lng-decimal');
selected.select();
document.execCommand('Copy');
};
this.OnFirstLatCopyClick = function () {
var selected = document.querySelector('#first-lat-decimal');
selected.select();
document.execCommand('Copy');
};
this.OnSecondLngCopyClick = function () {
var selected = document.querySelector('#hide-lng');
selected.select();
document.execCommand('Copy');
};
this.OnSecondLatCopyClick = function () {
var selected = document.querySelector('#hide-lat');
selected.select();
document.execCommand('Copy');
};
}