These libraries ‘latitude/longitude’ decimal degree covering MGRS string and opposit converting.
How to use it
import MgrsPole from './node_modules/mgrs-pole/mgrs-pole.js';
const mgrsPole = new MgrsPole();
let lat = 89.4;
let lon = -124.54;
console.log(mgrsPole.toMgrs(lat, lon));
let mgrs ='ZAJ0193711009';
console.log(mgrsPole.toDegree(mgrs));
Run it
node app.js
Result
( 89.4 , -124.54 ) ==> Y ZH 45127 37769
ZAJ0193711009 ==> 89.00000561585777 179.00034534622264
B AN 12345 67890 ==> -89.3784881350407 10.305960479100179
How to data type file
npx -p typescript tsc *.js --declaration --allowJs --emitDeclarationOnly --outDir ./
How to test package
Once
npm install
After install dependencies
npm run test
In the package.json, make shure test
script is exist.
"type": "module",
"scripts": {
"test": "mocha --exit test/*.js",
"type": "npx -p typescript tsc *.js --declaration --allowJs --emitDeclarationOnly --outDir types"
},
"devDependencies": {
"@types/node": "^20.6.2",
"chai": "^4.3.8",
"mocha": "^10.2.0"
}
Result of test
$npm run test
> mgrs-pole-test@0.0.2 test
> mocha --exit test/*.js
North Pole
To MGRS
✔ input ( 89.4 , -124.54 ) => output Y ZH 45127 37769
✔ input ( 90.0 , 0.0 ) => output Z AH 00000 00000
✔ input ( 85.49868, 180 ) => output Z AN 00000 00000
✔ input ( 84.974211, 174.289458 ) => output Z AN 55555 55555
✔ input ( 84.30793, 161.56511 ) => output Z BN 99999 99999
✔ input ( 85.4986848, 90 ) => output Z HH 00000 00000
✔ input ( 85.49868485,-90 ) => output Y TH 00000 00000
✔ input ( 84.92113141, -19.425812 ) => output Y YB 12345 67890
✔ input ( 84.30791588, -108.43483423 ) => output Y RJ 99999 99999
✔ input ( 84.525201427, 9.46230672 ) => output Z BA 00000 99999
✔ input ( 84.30791304032213, -18.434920175075227 ) => output Y YA 00000 99999
To Degree
✔ input Y ZH 45127 37769 => output (89.4, -124.53958)
✔ input `Z AH 00000 00000` => output (90, 0)
✔ input `Z AN 00000 00000` => output (85.49868, 180)
✔ input `Z AN 55555 55555` => output (84.97421, 174.28946)
✔ input `Z HH 00000 00000` => output (85.4986848, 90)
✔ input `Z TH 00000 00000` => output (85.49868485, -90)
✔ input `Y YB 12345 67890` => output (84.92113141, -19.425812)
✔ input `Z JJ 00000 00000` => output (84.52521029, 99.46232221)
✔ input `Y RJ 99999 99999` => output (84.30791588, -108.43483423)
✔ input `Z BA 00000 99999` => output (84.52520142658405, 9.462306722704914)
✔ input `Z BN 99999 99999` => output (84.30793, 161.56511)
✔ input `Y YA 00000 99999` => output (84.30791304032213, -18.434920175075227)
✔ input `31U DQ 48251 11932` => output (48.858193837921434, 2.2944892452301553)
✔ input `Z AH 1 6` => output (89.45212493960805, 170.53767779197437)
✔ input `Z AH 12 67` => output (89.38692865323186, 169.84573341979976)
✔ input `Z AH 123 678` => output (89.37935813037085, 169.71746497072658)
✔ input `Z AH 1234 6789` => output (89.37849619026939, 169.698124263963)
✔ input `Z AH 12345 67890` => output (89.3784881350407, 169.69403952089982)
Exception
✔ longitude `1000.0` out of range
✔ longitude `-375.0` out of range
✔ latitude `94.4` out of range
✔ latitude `-94.4` out of range
✔ wrong MGRS `Y XX 00000 00000`
✔ wrong MGRS `Z KH 12345 12345`
✔ wrong MGRS `Z ZP 12345 12345`
✔ wrong MGRS `Y BP 12345 12345`
✔ wrong MGRS `Z AH`
Call getOnCirclePointY()
✔ input "Z AP 00000 00000" => output "Z AP 00000 66727"
✔ input "Z BP 00000 00000" => output "Z BP 00000 59185"
✔ input "Z CP 00000 00000" => output "Z CP 00000 36023"
✔ input "Z FN 00000 00000" => output "Z FN 00000 95420"
✔ input "Z GN 00000 00000" => output "Z GN 00000 33409"
✔ input "Z HM 00000 00000" => output "Z HM 00000 41050"
✔ input "Z JK 00000 00000" => output "Z JK 00000 90732"
✔ input "Y ZP 00000 00000" => output "Y ZP 00000 59185"
✔ input "Y YP 00000 00000" => output "Y YP 00000 36023"
✔ input "Y XN 00000 00000" => output "Y XN 00000 95420"
✔ input "Y UN 00000 00000" => output "Y UN 00000 33409"
✔ input "Y TM 00000 00000" => output "Y TM 00000 41050"
✔ input "Y SK 00000 00000" => output "Y SK 00000 90732"
✔ input "Z AA 00000 00000" => output "Z AA 00000 33273"
✔ input "Z BA 00000 00000" => output "Z BA 00000 40815"
✔ input "Z CA 00000 00000" => output "Z CA 00000 63977"
✔ input "Z FB 00000 00000" => output "Z FB 00000 04580"
✔ input "Z GB 00000 00000" => output "Z GB 00000 66591"
✔ input "Z HC 00000 00000" => output "Z HC 00000 58950"
✔ input "Z JE 00000 00000" => output "Z JE 00000 09268"
✔ input "Y ZA 00000 00000" => output "Y ZA 00000 40815"
✔ input "Y YA 00000 00000" => output "Y YA 00000 63977"
✔ input "Y XB 00000 00000" => output "Y XB 00000 04580"
✔ input "Y UB 00000 00000" => output "Y UB 00000 66591"
✔ input "Y TC 00000 00000" => output "Y TC 00000 58950"
✔ input "Y SE 00000 00000" => output "Y SE 00000 09268"
Call getOnCirclePointX()
✔ input "Z JH 00000 00000" => output "Z JH 66727 00000"
✔ input "Z JJ 00000 00000" => output "Z JJ 59185 00000"
✔ input "Z JK 00000 00000" => output "Z JK 36023 00000"
✔ input "Z HL 00000 00000" => output "Z HL 95420 00000"
✔ input "Z HM 00000 00000" => output "Z HM 33409 00000"
✔ input "Z GN 00000 00000" => output "Z GN 41050 00000"
✔ input "Z CP 00000 00000" => output "Z CP 90732 00000"
✔ input "Y RH 00000 00000" => output "Y RH 33273 00000"
✔ input "Y RJ 00000 00000" => output "Y RJ 40815 00000"
✔ input "Y RK 00000 00000" => output "Y RK 63977 00000"
✔ input "Y SL 00000 00000" => output "Y SL 04580 00000"
✔ input "Y SM 00000 00000" => output "Y SM 66591 00000"
✔ input "Y TN 00000 00000" => output "Y TN 58950 00000"
✔ input "Y XP 00000 00000" => output "Y XP 09268 00000"
✔ input "Z JG 00000 00000" => output "Z JG 59185 00000"
✔ input "Z JF 00000 00000" => output "Z JF 36023 00000"
✔ input "Z HE 00000 00000" => output "Z HE 95420 00000"
✔ input "Z HD 00000 00000" => output "Z HD 33409 00000"
✔ input "Z GC 00000 00000" => output "Z GC 41050 00000"
✔ input "Z CB 00000 00000" => output "Z CB 90732 00000"
✔ input "Y RG 00000 00000" => output "Y RG 40815 00000"
✔ input "Y RF 00000 00000" => output "Y RF 63977 00000"
✔ input "Y SE 00000 00000" => output "Y SE 04580 00000"
✔ input "Y SD 00000 00000" => output "Y SD 66591 00000"
✔ input "Y TC 00000 00000" => output "Y TC 58950 00000"
✔ input "Y XB 00000 00000" => output "Y XB 09268 00000"
South Pole
To MGRS
✔ input (-89.4 , -124.54) => output A ZM 45127 62230
✔ input (-90.0 , 0.0 ) => output B AN 00000 00000
To Degree
✔ input B AN 00000 00000 => output (-90, 0)
✔ input A ZN 00000 00000 => output (-89.09931, -90)
✔ input B AB 00000 00000 => output (-80.11581108958083, 180)
✔ input B AY 00000 00000 => output (-81.01066338749857, 0)
✔ input B QN 00000 00000 => output (-81.01066338749857, 90)
✔ input A KN 00000 00000 => output (-80.11581108958083, -90)
✔ input B KV 00000 00000 => output (-81.10066069064223, 45)
✔ input A QV 00000 00000 => output (-80.44664636312663, -48.81407483429035)
✔ input B LF 00000 00000 => output (-80.44664636312663, 131.18592516570965)
✔ input A QF 00000 00000 => output (-80.44664636312663, -131.18592516570965)
✔ input B KW 00000 00000 => output (-80.44664636312663, 41.18592516570965)
✔ input B RW 00000 00000 => output (-80.44664636312663, -41.18592516570965)
✔ input `B AN 1 6` => output (-89.45212493960805, 9.462322208025617)
✔ input `B AN 12 67` => output (-89.38692865323186, 10.154266580200263)
✔ input `B AN 123 678` => output (-89.37935813037085, 10.282535029273433)
✔ input `B AN 1234 6789` => output (-89.37849619026939, 10.301875736036996)
✔ input `B AN 12345 67890` => output (-89.3784881350407, 10.305960479100179)
Exception
✔ longitude out of range `1000.0`
✔ longitude out of range `-375.0`
✔ latitude out of range `-94.4`
✔ wrong MGRS `B SN 12345 12345`
✔ wrong MGRS `A HN 12345 12345`
✔ wrong MGRS `B ZY 12345 12345`
✔ wrong MGRS `A BY 12345 12345`
✔ wrong MGRS `A ZA`
Call getOnCirclePointY()
✔ input "B AZ 00000 00000" => output "B AZ 00000 12951"
✔ input "B BZ 00000 00000" => output "B BZ 00000 08449"
✔ input "B CY 00000 00000" => output "B CY 00000 94833"
✔ input "B FY 00000 00000" => output "B FY 00000 71755"
✔ input "B GY 00000 00000" => output "B GY 00000 38585"
✔ input "B HX 00000 00000" => output "B HX 00000 94313"
✔ input "B JX 00000 00000" => output "B JX 00000 37368"
✔ input "B KW 00000 00000" => output "B KW 00000 65251"
✔ input "B LV 00000 00000" => output "B LV 00000 73731"
✔ input "B PU 00000 00000" => output "B PU 00000 54721"
✔ input "B QS 00000 00000" => output "B QS 00000 88528"
✔ input "B RP 00000 00000" => output "B RP 00000 69290"
✔ input "A ZZ 00000 00000" => output "A ZZ 00000 08449"
✔ input "A YY 00000 00000" => output "A YY 00000 94833"
✔ input "A XY 00000 00000" => output "A XY 00000 71755"
✔ input "A UY 00000 00000" => output "A UY 00000 38585"
✔ input "A TX 00000 00000" => output "A TX 00000 94313"
✔ input "A SX 00000 00000" => output "A SX 00000 37368"
✔ input "A RW 00000 00000" => output "A RW 00000 65251"
✔ input "A QV 00000 00000" => output "A QV 00000 73731"
✔ input "A PU 00000 00000" => output "A PU 00000 54721"
✔ input "A LS 00000 00000" => output "A LS 00000 88528"
✔ input "A KP 00000 00000" => output "A KP 00000 69290"
✔ input "B AA 00000 00000" => output "B AA 00000 87049"
✔ input "B BA 00000 00000" => output "B BA 00000 91551"
✔ input "B CB 00000 00000" => output "B CB 00000 05167"
✔ input "B FB 00000 00000" => output "B FB 00000 28245"
✔ input "B GB 00000 00000" => output "B GB 00000 61415"
✔ input "B HC 00000 00000" => output "B HC 00000 05687"
✔ input "B JC 00000 00000" => output "B JC 00000 62632"
✔ input "B KD 00000 00000" => output "B KD 00000 34749"
✔ input "B LE 00000 00000" => output "B LE 00000 26269"
✔ input "B PF 00000 00000" => output "B PF 00000 45279"
✔ input "B QH 00000 00000" => output "B QH 00000 11472"
✔ input "B RL 00000 00000" => output "B RL 00000 30710"
✔ input "A ZA 00000 00000" => output "A ZA 00000 91551"
✔ input "A YB 00000 00000" => output "A YB 00000 05167"
✔ input "A XB 00000 00000" => output "A XB 00000 28245"
✔ input "A UB 00000 00000" => output "A UB 00000 61415"
✔ input "A TC 00000 00000" => output "A TC 00000 05687"
✔ input "A SC 00000 00000" => output "A SC 00000 62632"
✔ input "A RD 00000 00000" => output "A RD 00000 34749"
✔ input "A QE 00000 00000" => output "A QE 00000 26269"
✔ input "A PF 00000 00000" => output "A PF 00000 45279"
✔ input "A LH 00000 00000" => output "A LH 00000 11472"
✔ input "A KL 00000 00000" => output "A KL 00000 30710"
Call getOnCirclePointX()
✔ input "B RN 00000 00000" => output "B RN 12951 00000"
✔ input "B RP 00000 00000" => output "B RP 08449 00000"
✔ input "B QQ 00000 00000" => output "B QQ 94833 00000"
✔ input "B QR 00000 00000" => output "B QR 71755 00000"
✔ input "B QS 00000 00000" => output "B QS 38585 00000"
✔ input "B PT 00000 00000" => output "B PT 94313 00000"
✔ input "B PU 00000 00000" => output "B PU 37368 00000"
✔ input "B LV 00000 00000" => output "B LV 65251 00000"
✔ input "B KW 00000 00000" => output "B KW 73731 00000"
✔ input "B JX 00000 00000" => output "B JX 54721 00000"
✔ input "B GY 00000 00000" => output "B GY 88528 00000"
✔ input "B BZ 00000 00000" => output "B BZ 69290 00000"
✔ input "B RM 00000 00000" => output "B RM 08449 00000"
✔ input "B QL 00000 00000" => output "B QL 94833 00000"
✔ input "B QK 00000 00000" => output "B QK 71755 00000"
✔ input "B QJ 00000 00000" => output "B QJ 38585 00000"
✔ input "B PH 00000 00000" => output "B PH 94313 00000"
✔ input "B PG 00000 00000" => output "B PG 37368 00000"
✔ input "B LF 00000 00000" => output "B LF 65251 00000"
✔ input "B KE 00000 00000" => output "B KE 73731 00000"
✔ input "B JD 00000 00000" => output "B JD 54721 00000"
✔ input "B GC 00000 00000" => output "B GC 88528 00000"
✔ input "B BB 00000 00000" => output "B BB 69290 00000"
✔ input "A JN 00000 00000" => output "A JN 87049 00000"
✔ input "A JP 00000 00000" => output "A JP 91551 00000"
✔ input "A KQ 00000 00000" => output "A KQ 05167 00000"
✔ input "A KR 00000 00000" => output "A KR 28245 00000"
✔ input "A KS 00000 00000" => output "A KS 61415 00000"
✔ input "A LT 00000 00000" => output "A LT 05687 00000"
✔ input "A LU 00000 00000" => output "A LU 62632 00000"
✔ input "A PV 00000 00000" => output "A PV 34749 00000"
✔ input "A QW 00000 00000" => output "A QW 26269 00000"
✔ input "A RX 00000 00000" => output "A RX 45279 00000"
✔ input "A TY 00000 00000" => output "A TY 11472 00000"
✔ input "A YZ 00000 00000" => output "A YZ 30710 00000"
✔ input "A JM 00000 00000" => output "A JM 91551 00000"
✔ input "A KL 00000 00000" => output "A KL 05167 00000"
✔ input "A KK 00000 00000" => output "A KK 28245 00000"
✔ input "A KJ 00000 00000" => output "A KJ 61415 00000"
✔ input "A LH 00000 00000" => output "A LH 05687 00000"
✔ input "A LG 00000 00000" => output "A LG 62632 00000"
✔ input "A PF 00000 00000" => output "A PF 34749 00000"
✔ input "A QE 00000 00000" => output "A QE 26269 00000"
✔ input "A RD 00000 00000" => output "A RD 45279 00000"
✔ input "A TC 00000 00000" => output "A TC 11472 00000"
✔ input "A YB 00000 00000" => output "A YB 30710 00000"
209 passing (33ms)