/* 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, */ export function latLngDecimalToDegrees(decimal: number): string { 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 */ export function latLngDegreesToDecimal(degreesStr: string): number { let degreesArr = degreesStr.split("°"); let degrees = parseInt(degreesArr[0]); let isNegative = Math.abs(degrees) != degrees; if (degreesArr.length == 1) { return degrees; } else if(!isSafeString(degreesArr[1])) { return degrees; } let minutesArr = degreesArr[1].split("′"); let minutes = parseInt(minutesArr[0]); let min = parseFloat((isNegative ? "-" : "") + (Math.abs(degrees) + Math.abs(minutes) / 60)); if (minutesArr.length == 1) { return min; } else if(!isSafeString(minutesArr[1])) { return min; } 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)); } export function isObject(arg: any): boolean { return typeof arg === 'object' && arg !== null; } export function isUndefined(arg: any): boolean { return arg === void 0; } export function isString(arg: any): boolean { return typeof arg === 'string'; } export function isSafeString(arg: any): boolean { if (isUndefined(arg)) { return false; } if (!isString(arg)) { return false; } if (arg.length == 0) { return false; } return true; } export function isNumber(arg: any): boolean { return typeof arg === 'number'; } export function hasPoint(obj: any): boolean { return (isObject(obj) && isNumber(obj.lat) && isNumber(obj.lng)); }