| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /*
- 205.395583333332 = 205°23'44.1"
- 1,直接读取"度":205
- 2,(205.395583333332-205)*60=23.734999999920 得到"分":23
- 3,(23.734999999920-23)*60=44.099999995200 得到"秒":44.1
- return string,
- */
- function latLngDecimalToDegrees(decimal) {
- let absDecimal = Math.abs(decimal);
- let isNegative = Math.abs(decimal) != decimal;
- let d = Math.floor(absDecimal); //度
- let m = Math.floor((absDecimal - d) * 60); //分
- let s = Math.round((absDecimal - d) * 3600 % 60); //秒
- if (s == 60) {
- s = 0;
- m++;
- }
- if (m == 60) {
- m = 0;
- d++;
- }
- //d = ('000'+d).slice(-3); // left-pad with leading zeros
- const mm = ('00' + m).slice(-2); // left-pad with leading zeros
- const ss = ('00' + s).slice(-2);
- //if (s<10) s = '0' + s; // left-pad with leading zeros (note may include decimals)
- return (isNegative ? "-" : "") + d + '°' + mm + "′" + ss + '″';
- }
- /*
- Decimal Degrees = Degrees + minutes/60 + seconds/3600
- 例:57°55'56.6" =57+55/60+56.6/3600=57.9323888888888
- return Float or NaN
- */
- function latLngDegreesToDecimal(degreesStr) {
- let degreesArr = degreesStr.split("°");
- let degrees = parseInt(degreesArr[0]);
- let isNegative = Math.abs(degrees) != degrees;
- if (degreesArr.length == 1) {
- return degrees;
- }
- let minutesArr = degreesArr[1].split("′");
- let minutes = parseInt(minutesArr[0]);
- if (minutesArr.length == 1) {
- return parseFloat((isNegative ? "-" : "") + (Math.abs(degrees) + Math.abs(minutes) / 60));
- }
- let secondsStr = minutesArr[1];
- let secondsArr = secondsStr.split('″');
- let seconds = parseFloat(secondsArr[0]);
- return parseFloat((isNegative ? "-" : "") + (Math.abs(degrees) + Math.abs(minutes) / 60 + Math.abs(seconds) / 3600));
- }
- function isObject(arg) {
- return typeof arg === 'object' && arg !== null;
- }
- function isUndefined(arg) {
- return arg === void 0;
- }
- function isString(arg) {
- return typeof arg === 'string';
- }
- function hasLine(obj) {
- return (isObject(obj)
- && isSafeString(obj.lat)
- && isSafeString(obj.lng));
- }
- function isSafeString(arg) {
- if (isUndefined(arg)) {
- return false;
- }
- if (!isString(arg)) {
- return false;
- }
- if (arg.length == 0) {
- return false;
- }
- return true;
- }
- function hasPoint(obj) {
- return (isObject(obj)
- && isSafeString(obj.lat)
- && isSafeString(obj.lng));
- }
- module.exports = {
- latLngDecimalToDegrees,
- latLngDegreesToDecimal,
- isObject,
- isUndefined,
- isString,
- isSafeString,
- hasLine,
- hasPoint
- };
|