Utils.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. function latLngDecimalToDegrees(decimal) {
  9. let absDecimal = Math.abs(decimal);
  10. let isNegative = Math.abs(decimal) != decimal;
  11. let degrees = Math.floor(absDecimal); //度
  12. let minutes = Math.floor((absDecimal - degrees) * 60); //分
  13. let seconds = Math.round((absDecimal - degrees) * 3600 % 60); //秒
  14. return (isNegative ? "-" : "") + degrees + '°' + minutes + "′" + seconds + '″';
  15. }
  16. /*
  17. Decimal Degrees = Degrees + minutes/60 + seconds/3600
  18. 例:57°55'56.6" =57+55/60+56.6/3600=57.9323888888888
  19. return Float or NaN
  20. */
  21. function latLngDegreesToDecimal(degreesStr) {
  22. let degreesArr = degreesStr.split("°");
  23. let degrees = degreesArr[0];
  24. let isNegative = Math.abs(degrees) != degrees;
  25. if (degreesArr.length == 1) {
  26. return parseInt(degrees);
  27. }
  28. let minutesArr = degreesArr[1].split("′");
  29. let minutes = minutesArr[0];
  30. if (minutesArr.length == 1) {
  31. return parseFloat((isNegative ? "-" : "") + (Math.abs(degrees) + Math.abs(minutes) / 60));
  32. }
  33. let secondsStr = minutesArr[1];
  34. let secondsArr = secondsStr.split('″');
  35. let seconds = secondsArr[0];
  36. return parseFloat((isNegative ? "-" : "") + (Math.abs(degrees) + Math.abs(minutes) / 60 + Math.abs(seconds) / 3600));
  37. }
  38. function isObject(arg) {
  39. return typeof arg === 'object' && arg !== null;
  40. }
  41. function isUndefined(arg) {
  42. return arg === void 0;
  43. }
  44. function isString(arg) {
  45. return typeof arg === 'string';
  46. }
  47. function hasLine(obj) {
  48. return (isObject(obj)
  49. && isSafeString(obj.lat)
  50. && isSafeString(obj.lng));
  51. }
  52. function isSafeString(arg) {
  53. if (isUndefined(arg)) {
  54. return false;
  55. }
  56. if (!isString(arg)) {
  57. return false;
  58. }
  59. if (arg.length == 0) {
  60. return false;
  61. }
  62. return true;
  63. }
  64. function hasPoint(obj) {
  65. return (isObject(obj)
  66. && isSafeString(obj.lat)
  67. && isSafeString(obj.lng));
  68. }
  69. module.exports = {
  70. latLngDecimalToDegrees,
  71. latLngDegreesToDecimal,
  72. isObject,
  73. isUndefined,
  74. isString,
  75. isSafeString,
  76. hasLine,
  77. hasPoint
  78. }