10 REM Latitude/Longitude to Australian Map Grid Conversion 20 REM making use of Redfearn's Formula ( http://www.ga.gov.au/geodesy/datums/redfearn_geo_to_grid.jsp ) 25 SIX#=6378160# : TNE#=298.25# 27 SIX#=6378137# : TNE#=298.25722210# 30 PRINT : PRINT " GEOGRAPHICAL -> A.M.G. CONVERSION PROGRAM" : PRINT 40 rem PRINT "Please ensure LP is ready and 'ONLINE'" : PRINT 45 PRINT "NB. Southern Latitudes are considered positive" 50 DIM CEN%(2),ZON%(2),GC#(2),GCD$(2),GCM$(2),GCS$(2),EAS#(2),NOR#(2),BL$(8) 60 BL$(1)=" ": BL$(2)=" ": BL$(3)=" ": BL$(4)=" ": BL$(5)=" " 70 BL$(6)=" ": BL$(7)=" ": BL$(8)=" " 80 TIMES%=0 100 F#=1#/TNE# 120 EE#=2#*F#-F#*F# 140 EDE#=EE#/(1#-EE#) 160 A0#=1#-EE#/4#-3#*EE#*EE#/64#-5#*EE#*EE#*EE#/256# 180 A2#=0.375#*(EE#+(EE#*EE#/4#)+(15#*EE#*EE#*EE#/128#)) 200 A4#=(15#/256#)*((EE#*EE#)+(3#*EE#*EE#*EE#/4#)) 220 A6#=35#*EE#*EE#*EE#/3072# 240 I%=1: BOTH%=0: BOTH$="1" 260 NORTHHEM%=0 280 PRINT : PRINT "Enter LATITUDE then LONGITUDE in DDD.MMSSSS format " 300 INPUT LAT# : INPUT LONG# 305 TIMES%=TIMES%+1 : IF TIMES%=1 THEN PRINT 306 IF TIMES%=1 THEN PRINT "If nothing is happening check that LP is ONLINE" 307 IF TIMES%=1 THEN PRINT 310 IF TIMES%=1 THEN GOSUB 16000 : REM 14000 320 IF LAT#<0# THEN NORTHHEM%=1 325 LAT#=-LAT# 340 CHP#=LAT# : GOSUB 9000 360 LATD$=HPD$ : LATM$=HPM$ : LATS$=HPS$ 380 GOSUB 9500 400 LAT#=CDEC# : LAT#=ABS(LAT#) 420 CHP#=LONG# : GOSUB 9000 440 LONGD$=HPD$ : LONGM$=HPM$ : LONGS$=HPS$ 460 GOSUB 9500 480 LONG#=CDEC# : GAMMA#=LONG# 500 PH#=LAT#/57.295779513#*(-1#) 520 DECLO#=LONG#-102# : F6#=6# : OVER#=ABS(DECLO#-F6#*FIX(DECLO#/F6#)) 540 IF OVER#>5.49# GOTO 580 545 IF OVER#<0.51# GOTO 580 560 GOTO 780 580 ZONEW%=INT(47#+(LONG#-99#)/6#) : ZONEE%=ZONEW%+1 600 PRINT : PRINT "Do you want" " PRINT 620 PRINT "1 Zone ",ZONEW% : PRINT "2 Zone ",ZONEE% : PRINT "3 Both "; 640 BOTH$=INKEY$ : IF LEN(BOTH$)=0 GOTO 640 660 IF BOTH$="2" GOTO 680 664 IF BOTH$="1" GOTO 680 668 IF BOTH$="3" GOTO 680 670 GOTO 640 680 IF BOTH$="2" THEN ZONE%=ZONEE% : IF BOTH$="2" THEN CM%=(ZONEE%-47)*6+99 700 IF BOTH$="2" GOTO 860 720 CM%=(ZONEW%-47)*6+99 : ZONE%=ZONEW% 740 IF BOTH$="3" THEN CEN%(1)=CM% 745 IF BOTH$="3" THEN ZON%(1)=ZONEW% 760 IF BOTH$="3" THEN I%=1 770 GOTO 860 780 ZONE%=0 800 CM%=-183 820 VALUE#=ABS(GAMMA#-CM%) : IF VALUE#<=3# GOTO 860 840 CM%=CM%+6 : ZONE%=ZONE%+1 : ZON%(1)=ZONE% : GOTO 820 860 O#=(GAMMA#-CM%)/57.295779513# : SP#=SIN(PH#) : CP#=COS(PH#) 880 VV#=1#+(EDE#*CP#*CP#) : V#=VV#^0.5# 900 C#=SIX#/(1#-EE#)^0.5# : NU#=C#/V# : SI#=V#*V# : T#=TAN(PH#) 905 X#=SP# 910 PRINT 920 EA#=NU#*O#*CP# 940 EB#=O#*NU#*O#*O#/6#*(CP#*CP#*CP#*(SI#-T#*T#)) 960 ECA#=O#*NU#*O#*O#*O#*O#*CP#*CP#*CP#*CP#*CP#/120# 980 ECB#=4#*SI#^3*(1#-6#*T#*T#)+SI#*SI#*(1#+8#*T#*T#)-(SI#*2#*T#*T#) 1000 ECB#=ECB#+T#*T#*T#*T# 1020 ECC#=ECA#*ECB# 1040 ED#=EA#+EB#+ECC# 1060 EF#=0.9996#*ED# 1080 EAST#=EF#+500000# 1100 AA#=(A0#*PH#)-A2#*SIN(2#*PH#) 1120 AB#=A4#*SIN(4#*PH#)-A6#*SIN(6#*PH#) 1140 MAX#=SIX#*(AA#+AB#) 1160 NB#=MAX#+NU#*SP#*(O#*O#/2#)*CP# 1180 NC#=NU#*SP#*O#*O#*O#*O#*CP#*CP#*CP#*(4#*SI#^2+SI#-T#*T#)/24# 1200 NDA#=NU#*SP#*O#*O#*O#*O#*O#*O#*CP#*CP#*CP#*CP#*CP#/720# 1220 NBBA#=8#*SI#^4*(11#-24#*T#*T#)-28#*SI#^3*(1#-6#*T#*T#) 1240 NDBB#=SI#*SI#*(1#-32#*T#*T#)-SI#*(2#*T#*T#)+T#*T#*T#*T# 1260 NDC#=NDA#*(NDBA#+NDBB#) 1270 rem PRINT SIN(90.0) 1280 NA#=0.9996#*(NB#+NC#+NDC#) 1285 PRINT 1300 NORTH#=NA#+10000000# 1320 REM PRINT EAST#,NORTH# 1340 SS#=SIN(3.1415926536#/180#/3600#) 1360 P#=(GAMMA#-CM%)*0.36# 1380 G12#=SP#*10000# 1400 G13#=(EDE#*EDE#*2#*CP#*CP#*CP#*CP#+EDE#*CP#*CP#*3#+1#) 1420 G13#=G13#*(CP#*CP#*SP#*SS#*SS#*1000000000000#/3#) 1440 C5#=(2#-T#*T#)*P#*P#*P#*P#*P#*SP#*CP#*CP#*CP#*CP#*SS#^4*1D+20/15# 1460 GC#(I%)=G12#*P#/3600#+G13#*P#*P#*P#/3600#+C5#/3600# 1480 GC#(I%)=-GC#(I%) 1500 STRINGIT%=1 : CDEC#=GC#(I%) : GOSUB 8000 1520 GCD$(I%)=HPD$ : GCS$(I%)=HPS$ : GCM$(I%)=HPM$ 1525 IF BOTH$="3" GOTO 1540 1530 EAS#(I%)=EAST# : NOR#(I%)=NORTH# : ZON%(I%)=ZONE% : CEN(I%)=CM% 1540 IF BOTH$<>"3" GOTO 1700 1560 EAS#(I%)=EAST# : NOR#(I%)=NORTH# : I%=I%+1 1580 IF I%=3 THEN I%=1 : IF I%=1 GOTO 1700 1600 CEN%(2)=CEN%(1)+6 : ZON%(2)=ZON%(1)+1 : CM%=CEN%(2) : GOTO 860 1700 IF I%=1 THEN GOSUB 16000 1723 REM 1725 REM 1726 REM 1728 REM 1740 REM PRINT 1760 REM PRINT 1762 L%=LEN(LATD$) : LATSTR$=BL$(4-L%)+LATD$+BL$(1)+LATM$+BL$(1)+LATS$ 1763 PRINT USING "\ \";LATSTR$; : rem LPRINT USING "\ \";LATSTR$; 1764 L%=LEN(LONGD$) : LONGSTR$=BL$(5-L%)+LONGD$+BL$(1)+LONGM$+BL$(1)+LONGS$ 1765 rem LPRINT USING "\ \";LONGSTR$; 1766 rem LPRINT USING "#########.###";EAS#(I%);NOR#(I%); 1767 PRINT USING "\ \";LONGSTR$; 1768 PRINT USING "#########.###";EAS#(I%);NOR#(I%); 1769 PRINT USING "####";ZON%(I%); : rem LPRINT USING "####";ZON%(I%); 1770 L%=LEN(GCD$(I%)) 1772 GCSTR$=BL$(4-L%)+GCD$(I%)+BL$(1)+GCM$(I%)+BL$(1)+GCS$(I%) 1774 rem LPRINT USING "\ \";GCSTR$ 1775 PRINT USING "\ \";GCSTR$ 1780 IF BOTH$<>"3" GOTO 1900 1800 IF I%<=2 THEN I%=I%+1 : IF I%=3 GOTO 1900 1820 GOTO 1700 1900 PRINT : PRINT "Another ? 1 = yes 2 = no " 1910 A$=INKEY$ : IF LEN(A$)=0 GOTO 1910 1920 IF A$="1" GOTO 240 1930 IF A$<>"2" GOTO 1910 1940 END 8000 PS%=1 8005 IF CDEC#<0# THEN PS%=0 8008 CDEC#=ABS(CDEC#) 8010 CSEC#=(CDEC#-FIX(CDEC#))*3600# 8020 CMIN#=FIX(CSEC#/60#) 8040 CSEC#=CSEC#-CMIN#*60# 8060 CHP#=CSEC#/10000#+CMIN#/100#+FIX(CDEC#) 8070 IF PS%=1 GOTO 8080 8075 CHP#=-CHP# : CDEC#=-CDEC# 8080 IF STRINGIT%=1 THEN GOSUB 9000 8100 RETURN 9000 HPSTR$=STR$(CHP#) 9005 IDOT%=INSTR(HPSTR$,".") 9010 LOCD%=INSTR(HPSTR$,"D") 9012 IF LOCD%=0 GOTO 9025 9013 IF CHP#<0# THEN HPSTR$=RIGHT(HPSTR$,(LEN(HPSTR$)-1)) 9014 K%=VAL(RIGHT$(HPSTR$,2)) 9015 LEFTY$=LEFT$(HPSTR$,1) 9016 RIGHTY$=MID$(HPSTR$,3,(LEN(HPSTR$)-6)) 9018 HPSTR$="."+STRING$((K%-1),48)+LEFTY$+RIGHTY$ 9020 IDOT%=1 9022 IF CHP#<0# THEN HPSTR$="-"+HPSTR$ 9023 IF CHP#<0# THEN IDOT%=IDOT%+1 9025 IF IDOT%=0 THEN IDOTDUM%=LEN(HPSTR$) 9030 IF IDOT%=0 THEN HPSTR$=HPSTR$+".000000" 9035 IF IDOT%=0 THEN IDOT%=IDOTDUM%+1 9036 HPSTR$=HPSTR$+"000000" 9038 L%=LEN(HPSTR$) 9040 HPD$=LEFT$(HPSTR$,(IDOT%-1)) 9060 HPM$=LEFT$(RIGHT$(HPSTR$,(L%-IDOT%)),2) 9080 HPS$=LEFT$(RIGHT$(HPSTR$,(L%-IDOT%-2)),2)+"." 9100 HPS$=HPS$+LEFT$(RIGHT$(HPSTR$,(L%-IDOT%-4)),3) 9110 IF HPD$="" THEN HPD$="0" 9115 IF HPD$=" " THEN HPD$="0" 9116 HPSTRING$=HPD$+" "+HPM$+" "+HPS$ 9117 FOR K%=10 TO 14 9118 IF LEN(HPSTRING$)=K% THEN HPSTRING$=" "+HPSTRING$ 9119 NEXT K% 9120 RETURN 9500 PS%=1 9505 IF CHP#<0# THEN PS%=0 9508 CHP#=ABS(CHP#) 9510 ROUND0#=10000#*FIX(CHP#) 9520 ROUND1#=100#*FIX(CHP#*100#) 9540 ROUND2#=CHP#*10000# 9560 CDEC#=ROUND0#/10000#+(ROUND1#-ROUND0#)/6000# 9580 CDEC#=CDEC#+(ROUND2#-ROUND1#)/3600# 9590 IF PS%=1 GOTO 9600 9595 CHP#=-CHP# : CDEC#=-CDEC# 9600 RETURN 14000 WIDTH LPRINT 72 14010 LPRINT CHR$(27) "n" CHR$(6) ; : LPRINT CHR$(27) "R" CHR$(6) ; 14015 LPRINT CHR$(12) : LPRINT CHR$(27) 'W' CHR$(1) ; LPRINT CHR$(27) "E" 14020 REM 14030 LPRINT " GEOGRAPHICAL -> A.M.G. CONVERSION" 14040 LPRINT " ---------------------------------" 14050 LPRINT CHR$(27) "W" CHR$(0) : LPRINT : LPRINT CHR$(27) "G"; 15000 REM 15010 LPRINT 15030 LPRINT STRING$(72,45) 15035 LPRINT TAB(1);"| LATITUDE";TAB(15);"| LONGITUDE";TAB(31); 15040 LPRINT "| A.M.G.";TAB(43);"| A.M.G.";TAB(56);"|ZONE|"; 15050 LPRINT TAB(65);"GRID |" 15055 REN 15060 REM 15070 LPRINT TAB(1);"|";TAB(15);"|";TAB(31);"| EAST";TAB(43);"| NORTH"; 15080 REM 15085 REM 15090 LPRINT TAB(56);"| CONVERGENCE|" 15120 REM 15130 REM 15140 REM 15165 LPRINT TAB(1);"| DD MM SS.SSS";TAB(15);"| DDD MM SS.SSS";TAB(31); 15170 LPRINT "| metres";TAB(43);"| metres";TAB(56);"| |";TAB(62); 15172 LPRINT "D MM SS.SS" 15175 LPRINT STRING$(72,45) : LPRINT : RETURN 16000 REM 16010 PRINT CHR$(27) "N" CHR$(6) ; : PRINT CHR$(27) "R" CHR$(6) ; 16015 PRINT CHR$(12) : PRINT CHR$(27) "W" CHR$(1) : PRINT CHR$(27) "G" 16020 REM 16030 PRINT " GEOGRAPHICAL -> A.M.G. CONVERSION" 16040 PRINT " ---------------------------------" 16050 PRINT CHR$(27) "W" CHR$(0) : PRINT : PRINT CHR$(27) "G"; 17000 REM 17010 PRINT 17030 PRINT STRING$(72,45) 17035 PRINT TAB(1);"| LATITUDE";TAB(15);"| LONGITUDE";TAB(31); 17040 PRINT "| A.M.G.";TAB(43);"| A.M.G.";TAB(56);"|ZONE|"; 17050 PRINT TAB(65);"GRID |" 17055 REM 17060 REM 17070 PRINT TAB(1);"|";TAB(15);"|";TAB(31);"| EAST";TAB(43);"| NORTH"; 17080 REM 17085 REM 17090 PRINT TAB(56);"| CONVERGENCE|" 17120 REM 17130 REM 17140 REM 17165 PRINT TAB(1);"| DD MM SS.SSS";TAB(15);"| DDD MM SS.SSS";TAB(31); 17170 PRINT "| metres";TAB(43);"| metres";TAB(56);"| |";TAB(62); 17172 PRINT "D MM SS.SS" 17175 PRINT STRING$(72,45) : PRINT : RETURN