Utils.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. 205.395583333332 = 205°23'44.1"
  3. 1,直接读取"度":205
  4. 2,(205.395583333332-205)*60=23.734999999920 得到"分":23
  5. 3,(23.734999999920-23)*60=44.099999995200 得到"秒":44.1
  6. return string,
  7. */
  8. export function latLngDecimalToDegrees(decimal) {
  9. let absDecimal = Math.abs(decimal);
  10. let isNegative = Math.abs(decimal) != decimal;
  11. let d = Math.floor(absDecimal); //度
  12. let m = Math.floor((absDecimal - d) * 60); //分
  13. let s = Math.round((absDecimal - d) * 3600 % 60); //秒
  14. if (s == 60) {
  15. s = 0;
  16. m++;
  17. }
  18. if (m == 60) {
  19. m = 0;
  20. d++;
  21. }
  22. //d = ('000'+d).slice(-3); // left-pad with leading zeros
  23. const mm = ('00' + m).slice(-2); // left-pad with leading zeros
  24. const ss = ('00' + s).slice(-2);
  25. //if (s<10) s = '0' + s; // left-pad with leading zeros (note may include decimals)
  26. return (isNegative ? "-" : "") + d + '°' + mm + "′" + ss + '″';
  27. }
  28. /*
  29. Decimal Degrees = Degrees + minutes/60 + seconds/3600
  30. 例:57°55'56.6" =57+55/60+56.6/3600=57.9323888888888
  31. return Float or NaN
  32. */
  33. export function latLngDegreesToDecimal(degreesStr) {
  34. let degreesArr = degreesStr.split("°");
  35. let degrees = parseInt(degreesArr[0]);
  36. let isNegative = Math.abs(degrees) != degrees;
  37. if (degreesArr.length == 1) {
  38. return degrees;
  39. }
  40. else if (!isSafeString(degreesArr[1])) {
  41. return degrees;
  42. }
  43. let minutesArr = degreesArr[1].split("′");
  44. let minutes = parseInt(minutesArr[0]);
  45. let min = parseFloat((isNegative ? "-" : "") + (Math.abs(degrees) + Math.abs(minutes) / 60));
  46. if (minutesArr.length == 1) {
  47. return min;
  48. }
  49. else if (!isSafeString(minutesArr[1])) {
  50. return min;
  51. }
  52. let secondsStr = minutesArr[1];
  53. let secondsArr = secondsStr.split('″');
  54. let seconds = parseFloat(secondsArr[0]);
  55. return parseFloat((isNegative ? "-" : "") + (Math.abs(degrees) + Math.abs(minutes) / 60 + Math.abs(seconds) / 3600));
  56. }
  57. export function isObject(arg) {
  58. return typeof arg === 'object' && arg !== null;
  59. }
  60. export function isUndefined(arg) {
  61. return arg === void 0;
  62. }
  63. export function isString(arg) {
  64. return typeof arg === 'string';
  65. }
  66. export function isSafeString(arg) {
  67. if (isUndefined(arg)) {
  68. return false;
  69. }
  70. if (!isString(arg)) {
  71. return false;
  72. }
  73. if (arg.length == 0) {
  74. return false;
  75. }
  76. return true;
  77. }
  78. export function isNumber(arg) {
  79. return typeof arg === 'number';
  80. }
  81. export function hasPoint(obj) {
  82. return (isObject(obj)
  83. && isNumber(obj.lat)
  84. && isNumber(obj.lng));
  85. }