You are here
dmsareaplot.bas
Fri, 11/09/2007 - 21:03 - chrisws
Title: dmsareaplot
Description: Package of GP/UTM programs
Category: Utilities/GP/UTM
Copyright: Bob Riess
Email: riessb@usa.net
Created: Nov 2002
Version: 1.0
Sbver: 0.8
'#sec:Main
CONST pausing = 1
CONST plotsize = 135 + 5 * (NOT pausing)
REPEAT
INPUT "Dataset";ds$
IF LEN(ds$) = 0 THEN
EXIT LOOP
ENDIF
IF EXIST(ds$) THEN
fh = FREEFILE
OPEN ds$ FOR INPUT AS #fh
INPUT #fh;t,type
ERASE n,e,b$,l
DIM n(0 TO t)
DIM e(0 TO t)
DIM b$(0 TO t)
DIM l(0 TO t)
n(t) = 0
e(t) = 0
INPUT "" + type + " - confirm";type
closed = LCASE(LEFT(type,1))="c"
err = 0
FOR i = 0 TO t - 1
INPUT #fh;cn,b1$,dg, mn, sc,b2$, h
IF cn <1 OR cn > t THEN
PRINT "Erroneous course nbr - ";cn
err = 1
EXIT FOR
ENDIF
IF UCASE(b1$) = "N" THEN
ns = 1
ELSEIF UCASE(b1$) = "S" THEN
ns = -1
ELSE
PRINT "Course ";cn;" dir err - ";b1$
err = 1
EXIT FOR
ENDIF
IF UCASE(b2$) = "E" THEN
es = 1
ELSEIF UCASE(b2$) = "W" THEN
es = -1
ELSE
PRINT "Course ";cn;" dir err - ";b2$
err = 1
EXIT FOR
ENDIF
th = RAD(dg + mn / 60 + sc / 3600)
b$(cn - 1) = brng$(ns,DEG(th),es)
l(cn - 1) = h
n(cn - 1) = ns * COS(th) * h
n(t) = n(t) - n(cn - 1)
e(cn - 1) = es * SIN(th) * h
e(t) = e(t) - e(cn - 1)
NEXT
CLOSE #fh
IF NOT err THEN
IF ROUND(n(t),2) = 0 AND ROUND(e(t),2) = 0 THEN
ec = -1
closed = 1
ELSE
IF closed THEN
PRINT "Error of Closure/Missing Course"
b$(t) = brng$(SGN(n(t)), DEG(ATAN2(ABS(e(t)),ABS(n(t)))), SGN(e(t)))
l(t) = SQR(n(t) ^ 2 + e(t) ^ 2)
PRINT b$(t);" ";ROUND(l(t),5)
PRINT "Dep (x) ";ROUND(e(t),5);", Lat (y) ";ROUND(n(t),5)
PAUSE
ENDIF
ec = t
t = t + 1
ENDIF
CLS
min1 = n(0)
max1 = n(0)
min2 = e(0)
max2 = e(0)
FOR i = 1 TO t - 1
n(i) = n(i) + n(i - 1)
e(i) = e(i) + e(i - 1)
min1 = MIN(min1, n(i))
max1 = MAX(max1, n(i))
min2 = MIN(min2, e(i))
max2 = MAX(max2, e(i))
NEXT
rng = plotsize / MAX(max1 - min1, max2 - min2)
nd = min1 + (max1 - min1) / 2
ed = min2 + (max2 - min2) / 2
NORTHPT 79,72
IF pausing
LOCATE 1,1
PRINT "Course"
ENDIF
a = 0
FOR i = 0 TO t - 2 + closed
j = (i - 1 + t) MOD t
IF pausing
LOCATE 1,7
PRINT CHR(27)+MID("[0m[4m",3 * (i = ec) + 1,3);i + 1;CHR(27)+"[0m";" ";b$(i);" ";ROUND(l(i),2);CHR(27)+"[K";
ENDIF
a = a + (e(i) * n(j) - e(j) * n(i))
p = p + l(i)
LINE 79 + (e(i) - ed) * rng, 79 - (n(i) - nd) * rng, 79 + (e(j) - ed) * rng, 79 - (n(j) - nd) * rng COLOR 7 * (i = ec)
IF pausing
PAUSE 1
ENDIF
NEXT
AT 0,160 - TXTH("A")
IF closed then
PRINT "P = ";ROUND(p,2);" A = "; ROUND(ABS(a / 2),2);
ELSE
PRINT "D = ";ROUND(p,2);
ENDIF
PAUSE
CLS
ENDIF
ELSE
PRINT "No such file"
ENDIF
UNTIL 0
END
FUNC brng$(qn,dmsv,qe)
LOCAL dms
DIM dms(0 TO 4)
dms(0) = MID("SNN",qn + 2,1)
dms(2) = ROUND(dmsv * 3600)
dms(1) = dms(2) \\ 3600
dms(3) = dms(2) MOD 60
dms(2) = (dms(2) \\ 60) MOD 60
dms(4) = MID("WEE",qe + 2,1)
brng$ = dms(0) + " " + STR(dms(1)) + "°" + STR(dms(2)) + "''" + STR(dms(3)) + CHR(34) + " " + dms(4)
END
#inc:"LIB$North.bas"
'