1 'PROGRAM COMPUTES GREAT-CIRCLE DISTANCE (SHORTEST DISTANCE) BETWEEN TWO POINTS 2 'ON EARTH'S SURFACE, GIVEN LATITUDE AND LONGITUDE OF BOTH LOCATIONS. RESULTS 3 'ARE IN NAUTICAL MILES. TO CONVERT TO STATUTE MILES, MULTIPLY ANSWER BY 1.151. 4 'COURTESY R. GROSS, SANTA CRUZ, CA, 10-24-86 5 'This program has been modified to run on an H/Z-89,H/Z-90 CP/M-80 system. 6 PRINT CHR$(27);CHR$(69):PRINT TAB(30) "GRTCRCL PROGRAM":PRINT:GOSUB 52 7 FOR I=1 TO 2 8 PRINT:ET=0:PRINT "LATITUDE";I;"="; 9 INPUT LATITUDE$(I):IF VAL(RIGHT$(LATITUDE$(I),4))>599 THEN GOSUB 52 10 IF RIGHT$(LATITUDE$(I),1)="e" OR RIGHT$(LATITUDE$(I),1)="E" OR RIGHT$(LATITUDE$(I),1)="w" OR RIGHT$(LATITUDE$(I),1)="W" THEN GOSUB 52 11 IF ASC(LEFT$(LATITUDE$(I),1))>57 OR ASC(RIGHT$(LATITUDE$(I),1))<58 THEN GOSUB 52 12 IF ET=1 THEN 8 13 IF RIGHT$(LATITUDE$(I),1)<>"N" AND RIGHT$(LATITUDE$(I),1)<>"n" AND RIGHT$(LATITUDE$(I),1)<>"S" AND RIGHT$(LATITUDE$(I),1)<>"s" THEN GOSUB 52 14 IF LEN(LATITUDE$(I))=6 THEN LET LATITUDE(I)=VAL(LEFT$(LATITUDE$(I),2))+VAL(RIGHT$(LATITUDE$(I),4))/600 15 IF LEN(LATITUDE$(I))=5 THEN LET LATITUDE(I)=VAL(LEFT$(LATITUDE$(I),1))+VAL(RIGHT$(LATITUDE$(I),4))/600 16 IF LEN(LATITUDE$(I))=4 THEN LET LATITUDE(I)=VAL(RIGHT$(LATITUDE$(I),4))/600 17 IF RIGHT$(LATITUDE$(I),1)="S" OR RIGHT$(LATITUDE$(I),1)="s" THEN LET LATITUDE(I)=-LATITUDE(I) 18 IF LATITUDE(I)>90 OR LATITUDE(I)<-90 THEN GOTO 8 19 IF ET=1 THEN 8 20 PRINT:ET=0:PRINT"LONGITUDE";I;"="; 21 INPUT LONGITUDE$(I):IF VAL(RIGHT$(LONGITUDE$(I),4))>599 THEN GOSUB 52 22 IF RIGHT$(LONGITUDE$(I),1)="n" OR RIGHT$(LONGITUDE$(I),1)="N" OR RIGHT$(LONGITUDE$(I),1)="s" OR RIGHT$(LONGITUDE$(I),1)="S" THEN GOSUB 52 23 IF ASC(LEFT$(LONGITUDE$(I),1))>57 OR ASC(RIGHT$(LONGITUDE$(I),1))<58 THEN GOSUB 52 24 IF ET=1 THEN 20 25 IF RIGHT$(LONGITUDE$(I),1)<>"W" AND RIGHT$(LONGITUDE$(I),1)<>"w" AND RIGHT$(LONGITUDE$(I),1)<>"E" AND RIGHT$(LONGITUDE$(I),1)<>"e" THEN GOSUB 52 26 IF LEN(LONGITUDE$(I))=7 THEN LET LONGITUDE(I)=VAL(LEFT$(LONGITUDE$(I),3))+VAL(RIGHT$(LONGITUDE$(I),4))/600 27 IF LEN(LONGITUDE$(I))=6 THEN LET LONGITUDE(I)=VAL(LEFT$(LONGITUDE$(I),2))+VAL(RIGHT$(LONGITUDE$(I),4))/600 28 IF LEN(LONGITUDE$(I))=5 THEN LET LONGITUDE(I)=VAL(LEFT$(LONGITUDE$(I),1))+VAL(RIGHT$(LONGITUDE$(I),4))/600 29 IF LEN(LONGITUDE$(I))=4 THEN LET LONGITUDE(I)=VAL(RIGHT$(LONGITUDE$(I),4))/600 30 IF RIGHT$(LONGITUDE$(I),1)="E" OR RIGHT$(LONGITUDE$(I),1)="e" THEN LET LONGITUDE(I)=-LONGITUDE(I) 31 IF LONGITUDE(I)>180 OR LONGITUDE(I)<-180 THEN GOTO 20 32 IF ET=1 THEN 20 33 IF SP$="Y" OR SP$="y" THEN 35 34 NEXT 35 PI=3.14159 36 LATITUDE(1)=LATITUDE(1)*PI/180:LATITUDE(2)=LATITUDE(2)*PI/180 37 LONGITUDE(1)=LONGITUDE(1)*PI/180:LONGITUDE(2)=LONGITUDE(2)*PI/180 38 X=SIN(LATITUDE(1))*SIN(LATITUDE(2))+COS(LATITUDE(1))*COS(LATITUDE(2))*COS(LONGITUDE(2)-LONGITUDE(1)) 39 D=ABS(ATN(SQR(1-X*X)/X))*180/PI*60 40 PRINT CHR$(27);CHR$(69):PRINT:PRINT"Great Circle distance from origin located at ";LATITUDE$(1);", ";LONGITUDE$(1) 41 PRINT "to destination located at ";LATITUDE$(2);", ";LONGITUDE$(2) 42 PRINT:PRINT" is "; 43 PRINT USING"#####.#";D; 44 PRINT" nautical miles" 45 PRINT:PRINT:PRINT"DO YOU WANT TO COMPUTE DISTANCE BETWEEN TWO NEW POINTS (Y or N)?" 46 Q$=INKEY$:IF Q$=""THEN 46 47 IF Q$="y" OR Q$="Y" THEN LET SP$="":GOTO 6 48 IF Q$="N" OR Q$="n" THEN PRINT:PRINT:PRINT" DO YOU WANT TO COMPUTE DISTANCE TO A NEW DESTINATION (Y or N)?" 49 SP$=INKEY$:IF SP$="" THEN 49 50 IF SP$="Y" OR SP$="y" THEN LET I=2:PRINT CHR$(27);CHR$(69):GOTO 8 51 PRINT CHR$(27);CHR$(69):END 52 PRINT CHR$(27);CHR$(69):PRINT:PRINT"ENTER LATITUDE/LONGITUDE ON PROMPT IN THE FORMAT: 53 PRINT" dddmmth, WHERE ddd REPRESENTS WHOLE DEGREES, mm REPRESENTS WHOLE" 54 PRINT" MINUTES, t=TENTHS OF MINUTES, AND h REPRESENTS N,S,E, or W." 55 PRINT 56 PRINT"EXAMPLE: San Francisco Airport: Lat=37 degrees, 37.1 minutes North; enter as:" 57 PRINT"37371N. Long=122 degrees, 22.8 minutes West; enter as 122228W." 58 PRINT"New York Kennedy Airport: Lat=40384N, Long=73472W; distance between the two" 59 PRINT "is 2240.2 Nautical Miles." 60 PRINT:PRINT 61 PRINT" LEADING ZEROES MAY BE OMITTED, HOWEVER THE TENTHS OF MINUTES FIGURE MUST" 62 PRINT" BE INCLUDED, EVEN IF THE VALUE IS ZERO!" 63 PRINT:ET=1:RETURN