home *** CD-ROM | disk | FTP | other *** search
- REM MAPFIX.bas PROGRAM. SEE EXPLAINATION BELOW
- REM
- Ver$ = "3.08"
- MaxNumMAPS = 99' Current maximum number of maps loaded by APRS
- MaxNumPoints = 1000
- MaxNumLABELS = 99
- GOTO Begin
-
- Info: COLOR 15, 1: CLS
- PRINT " MAPFIX.bas VERSION "; Ver$; " PROGRAM FOR FIXING APRS MAPS": PRINT
- PRINT " 2.10 allowed you to add, move and delete points. 3.01 added new Features"
- PRINT " 3.05 allowed you to KILL features and TRIM all points outside a boundary."
- PRINT " 3.07 added ALT-G to overlay GPS track history files for map drawing."
- PRINT " 3.07P adds W7KKE's CALCOMP digitizer code for drawing directly from charts."
- PRINT " 3.08 fixed bug in assigning filenames on Saving (new map saved to TK.HST file!)"
- PRINT
- PRINT " CAUTION, THIS PROGRAM IS NOT PERFECT... KEEP BACKUPS! Do a little at a time!"
- PRINT
- PRINT " The original purpose of this program was to simply display new maps so you"
- PRINT " could alternatively EDIT the map file and use MAPFIX to look at it and measure"
- PRINT " locations and points. Operating in the full QBasic environment, you could "
- PRINT " keep both the MAPFIX program and the MAP file online simultanously and switch"
- PRINT " back and forth. Without QB, you must alternatively use EDIT and QBasic."
- PRINT
- PRINT " MAPFIX uses two cursors. The normal yellow APRS cursor, and a White MapPoint"
- PRINT " which will be the next point to be processed. ALT Keys allow you to MOVE the"
- PRINT " MapPoint to the cursor, ADD a new point at the cursor, or DELETE the MapPoint."
- PRINT " MAPFIX.bas shows you Deg/Min, Decimal, and APRS values of the cursor position."
- PRINT
- PRINT " ALSO NOTE THAT THE LIMITS IN APRS ARE 1000 POINTS, 99 FEATURES, and 99 LABELS!"
- PRINT " If you need more points, features or labels, begin another map.";
- LOCATE 25, 1: PRINT " HIT ANY KEY to continue...";
- GOSUB GetChar: BEEP
-
- Info2: COLOR 15, 8: CLS
- PRINT " PAGE 2 INSTRUCTIONS: More about new features in version "; Ver$
- PRINT
- PRINT " With this new MAPFIX.bas, you can not only modify features by moving, adding"
- PRINT " or deleting POINTS, but you can now add and kill FEATURES too, ie: roads,"
- PRINT " rivers, borders, etc, from within the program. In addition to the new KILL"
- PRINT " and TRIM commands, the G key will move the cursor (GOTO) to the MapPoint,"
- PRINT " and the F key will FIND the MapPoint nearest the cursor location. If the"
- PRINT " MapPointer and FeatureName get out of sequence, the RESET command may fix"
- PRINT " them, but you should save the file immediately and check it with an editor."
- PRINT
- PRINT " I find the capability to delete points very useful when making larger area"
- PRINT " maps from several smaller detail maps. First, I run MAPCNVRT.bas to convert"
- PRINT " all of the smaller maps to new temporary files with the new origin of the new"
- PRINT " larger map. Then I use the KILL command in MAPFIX to eliminate all minor "
- PRINT " roads, features and labels and then the DELETE POINT command to remove all"
- PRINT " inconsequential minor points from the roads that will not be needed"
- PRINT " at the larger scale. Then I use the editor to combine all of the points and"
- PRINT " labels into the new file."
- PRINT
- PRINT " A new MAPLIST command shows your MAPLIST.map file; and the OTHER MAPS command"
- PRINT " shows all MAP borders so you can see how your new map fits in. You may use F3"
- PRINT " and F4 keys to select smaller or larger map borders to draw."
- PRINT
- LOCATE 25, 1: PRINT " HIT ANY KEY to continue...";
- GOSUB GetChar: BEEP
-
- Info3: COLOR 15, 3: CLS
- PRINT " PAGE 3 INSTRUCTIONS: Using GPS Track History Files to draw maps!"
- PRINT
- PRINT " To aid in creating accurate maps, W7KKE in California added routines to MAPFIX"
- PRINT " so that you can overlay a Track History file onto the map you are constructing."
- PRINT " This is an excellent tool for correcting your maps to real GPS data."
- PRINT ""
- PRINT " After you have loaded your map, type alt-G (GPS Track History') and enter the"
- PRINT " history filename. This will overlay the track history file. You may then"
- PRINT " use the normal MAPFIX.bas routines to move map segments and add so that the"
- PRINT " map will agree with the GPS data contained in the track history file. This"
- PRINT " is especially useful with the history files saved by a laptop during mobile"
- PRINT " GPS operations."
- PRINT
- PRINT " CAUTION: Since GPS data is only accurate to 100 yards due to the effects of"
- PRINT " Selective Availability, I would avoid using GPS data explicitely below about"
- PRINT " the 2 mile range. For this reason, I make the size of the GPS positions "
- PRINT " expand below the 2 mile range to roughly approximate the size of the 100 yard"
- PRINT " error circle."
- PRINT
- Display$ = "UNKnown"
- RETURN
-
- GetChar: a$ = "": DO UNTIL a$ <> "": a$ = INKEY$: LOOP: RETURN
-
- Begin: GOSUB Info:
- PRINT " HIT ANY KEY to proceed onto the HELP screen...";
- GOSUB GetChar
-
- DIM x%(2 * MaxNumPoints), y%(2 * MaxNumPoints)
- REM MAP coordinates **** THESE ARE BIGGER THAN APRS ***
- DIM LN$(150) ' (no limit in APRS) **** SO YOU CAN MANIPULATE BIG MAPS
- nn = 2 * MaxNumLABELS
- DIM ML$(nn), MLa(nn), MLo(nn), MLr(nn) 'Map Labels, lengths and coordinates
- nn = 2 * MaxNumMAPS
- DIM MapName$(nn), LATcen(nn), LONcen(nn), MapMax(nn), Comment$(nn)
- RdsOn = -1: Labls = -1: Tags = -1: KP = 1: Changed = 0: MapSize = 256
-
- DIM HLAT(3000), HLONG(3000)'For lat/longs from big GPS history files
-
- INIT: ON ERROR GOTO ErrorTrap
- ScrnType$ = "EGA": Ycen = 200: Yfactr = 1: YfacTXT = 350 / 350: SCREEN 9
- IF ScrnType$ = "EGA" THEN COLOR 15, 0
- REM ScrnType$ = "CGA": Yfactr=200/400:Ycen = 200*Yfactr: SCREEN 2
-
- Display$ = "HELP": GOSUB HELP: GOSUB LoadMap
- REM ON ERROR GOTO 0
-
- Main: GOSUB DrwMPaCur
- DO
- GoAgain:
- IF Digitizer THEN
- IF LOC(1) > 9 THEN
- GOSUB GetXY: GOSUB Cursor
- IF Btn <> 3 THEN GOSUB AddPoint
- END IF
- END IF
- a$ = INKEY$
- IF a$ <> "" THEN
- a$ = UCASE$(a$): Key$ = a$
- IF a$ = "S" THEN GOSUB labels
- IF a$ = "L" THEN Labls = NOT Labls
- IF a$ = "T" THEN Tags = NOT Tags
- IF a$ = "F" THEN GOSUB FindPoint
- IF a$ = "G" THEN GOSUB CurToPoint: GOSUB CurDrwMap
- IF a$ = "H" THEN
- IF Display$ <> "HELP" THEN
- GOSUB HELP
- ELSE GOSUB Info
- LOCATE 25, 1: PRINT " H for HELP or SPACE BAR for map..."; : a$ = ""
- END IF
- END IF
- IF a$ = "D" THEN GOSUB MapDIR
- IF a$ = "M" THEN GOSUB ListMAPlist
- IF a$ = "O" THEN GOSUB DrwAndShow
- IF a$ = "N" THEN GOSUB NextLine: GOSUB Cursor
- IF a$ = "P" THEN GOSUB Previous: GOSUB Cursor
- IF a$ = "Q" THEN GOSUB QUIT
- IF a$ = "R" THEN Z = 2: LNptr = 1
- IF a$ = " " THEN Display$ = "MAP": GOSUB DrwMPaCur
- IF a$ = "+" THEN Z = Z + 1: GOSUB MapPoint ' moves to next map point
- IF a$ = "-" THEN Z = Z - 1: GOSUB MapPoint ' moves backwards
-
- B$ = "": IF LEN(a$) = 2 THEN B$ = RIGHT$(a$, 1): REM process arrow & special keys
- IF B$ = "I" THEN RS = RS * 2: GOSUB CurDrwMap: REM change scale
- IF B$ = "Q" THEN RS = RS / 2: GOSUB CurDrwMap
- IF B$ = CHR$(132) THEN RS = RS * 8: GOSUB CurDrwMap: REM change scale by factor of 4
- IF B$ = "V" THEN RS = RS / 8: GOSUB CurDrwMap
- IF B$ = "G" THEN GOSUB CurDrwMap 'Home key
- IF a$ = "7" THEN CDX = LONo: CDY = LATo: GOSUB DrwMPaCur 'ShiftHOME
- IF B$ = "O" THEN CDX = LONcen: CDY = LATcen: GOSUB DrwMPaCur 'End Key
- IF B$ = "M" THEN CPX = CPX - 4 / (Sfac): GOSUB Cursor
- IF B$ = "K" THEN CPX = CPX + 4 / (Sfac): GOSUB Cursor
- IF B$ = "H" THEN CPY = CPY + 4 / (Sfac): GOSUB Cursor
- IF B$ = "P" THEN CPY = CPY - 4 / (Sfac): GOSUB Cursor
- REM Here are the special MapFIx routines
- IF B$ = CHR$(30) THEN GOSUB AddPoint 'alt-ADD point
- IF B$ = CHR$(48) AND Digitizer THEN GOSUB NewFeature'alt-BEGIN
- IF B$ = CHR$(34) THEN GOSUB LoadHst 'alt-GPS hstry file
- IF B$ = CHR$(50) THEN GOSUB MakePT: GOSUB DrawMap 'alt-MOVE point to cursor
- IF B$ = CHR$(32) THEN GOSUB DelPT: GOSUB DrawMap 'alt-DELete point
- IF B$ = CHR$(38) THEN GOSUB AddLabel 'alt-ADD LABEL
- IF B$ = CHR$(46) THEN GOSUB NewCenter 'alt-CENTER
- IF B$ = CHR$(37) THEN GOSUB KillF 'alt-KILL Feature
- IF B$ = CHR$(19) THEN GOSUB MapRange 'alt-RANGE
- IF B$ = CHR$(20) THEN GOSUB TRIM 'alt-TRIM
- IF B$ = CHR$(49) THEN GOSUB NewFeature 'alt-NEW Feature
- IF B$ = CHR$(24) THEN GOSUB DigiInit: GOSUB DrawMap'alt-OPEN dgtzr COM
- IF B$ = CHR$(61) THEN 'F3 for smaller Maps
- MapSize = MapSize / 2: IF MapSize < 1 THEN MapSize = 1
- GOSUB ShowMaps
- END IF
- IF B$ = CHR$(62) THEN 'F4 for larger Maps
- MapSize = MapSize * 2: IF MapSize > 1000 THEN MapSize = 1000
- GOSUB DrwAndShow
- END IF
- IF a$ = CHR$(19) THEN GOSUB SaveMap
-
- IF a$ = "6" THEN CPX = CPX - 20 / (Sfac): GOSUB Cursor'SHIFT Cursor by 4
- IF a$ = "4" THEN CPX = CPX + 20 / (Sfac): GOSUB Cursor
- IF a$ = "8" THEN CPY = CPY + 20 / (Sfac): GOSUB Cursor
- IF a$ = "2" THEN CPY = CPY - 20 / (Sfac): GOSUB Cursor
-
- END IF
- LOOP
- SYSTEM 'you should never get here
-
- QUIT: a$ = "Y"
- IF Changed THEN
- GOSUB BoxLine23
- PRINT "**** MAP HAS BEEN MODIFIED"; Changed; "TIMES BUT NOT SAVED!!! SAVE NOW? (Y)";
- INPUT a$
- IF UCASE$(a$) <> "N" THEN GOSUB SaveMap
- END IF
- SYSTEM
-
- TRIM: GOSUB BoxLine23
- CLS : PRINT "TRIM ALL POINTS AND LABELS OUTSIDE OF MAPRANGE"
- PRINT
- PRINT "This command will remove all points and labels that are outside of the white"
- PRINT "map border. You can change the location of this map border by using"
- PRINT "the CENTER command (alt-C) and by changing the RANGE using alt-R."
- PRINT : PRINT
- PRINT "No map feature will be completely eliminated..."
- PRINT
- PRINT "The first and last point of any FEATURE will be retained, so the"
- PRINT "result will be long single lines for all FEATURES outside the map border."
- PRINT "Use the KILL FEATURE (alt-K) to eliminate those lines and use the MOVE"
- PRINT "command (alt-M) to move any far away points closer to the border."
- PRINT : PRINT
- PRINT "You might consider stopping now and doing a SAVE (ctrl-S) before proceeding."
- PRINT
- PRINT "ALSO, THIS DOES NOT WORK FOR POINTS WITH NEGATIVE VALUES! Be sure your"
- PRINT "selected area is below and to right of ORIGIN. If not, run MAPCNVRT.bas."
- PRINT : PRINT
- INPUT "Are you ready to proceed? (Y/N) (N)"; a$
- IF UCASE$(a$) <> "Y" THEN GOTO DrawMap
- C = 0: PRINT : PRINT "Processing...";
- REM dx and dy are num pix of center of map
- REM bx and by are borders of map based on MapRng
- by = ppdV * MapRng / 60
- bx = by / Lfac
- FOR Z = 1 TO nmp - 4
- IF x%(Z) = 0 THEN Z = Z + 2
- IF x%(Z) > dx + bx OR y%(Z) > dy + by THEN bad = 1 ELSE bad = 0
- IF x%(Z) < dx - bx OR y%(Z) < dy - by THEN bad = 1
- IF bad AND x%(Z - 1) <> 0 AND x%(Z + 1) <> 0 THEN
- GOSUB DelPT: Z = Z - 1
- C = C + 1: IF INT(C / 10) = C / 10 THEN PRINT ".";
- END IF
- NEXT Z
- PRINT : PRINT "Now removing labels...";
- FOR i = 1 TO nml: REM now eliminate all labels outside
- bad = 0: Xm = MapRng / (60 * Lfac): Ym = MapRng / 60
- IF MLo(i) > LONcen + Xm OR MLa(i) > LATcen + Ym THEN bad = 1
- IF MLo(i) < LONcen - Xm OR MLa(i) < LATcen - Ym THEN bad = 1
- IF bad = 1 THEN
- FOR J = i TO nml
- ML$(J) = ML$(J + 1): MLa(J) = MLa(J + 1)
- MLo(J) = MLo(J + 1): MLr(J) = MLr(J + 1)
- NEXT J: nml = nml - 1: PRINT ".";
- END IF
- NEXT i
- GOTO DrawMap
-
-
- FindPoint: CurX = INT(.5 + dx + (CUX - 320) / KP)
- CurY = INT(.5 + dy + (CUY - Ycen) / KP)
- GOSUB BoxLine23: PRINT "SEARCHING THROUGH ALL POINTS IN FILE...";
- FOR J = 0 TO 30 ' Go through abt 20 times lookin pt.
- IF J > 10 THEN J = J + 1' first with 0 delta, then bigger
- LNctr = 0: PRINT ".";
- FOR i = 1 TO nmp
- IF x%(i) = 0 THEN LNctr = LNctr + 1
- IF x%(i) > CurX - J AND x%(i) < CurX + J THEN
- IF y%(i) > CurY - J AND y%(i) < CurY + J THEN
- Z = i: LNptr = LNctr: GOSUB CurToPoint
- J = 99: i = nmp
- END IF
- END IF
- NEXT i:
- NEXT J
- IF J < 99 THEN PRINT "None found!": RETURN
- GOSUB MapPoint: SavClr = 0: RETURN
-
- NewFeature: LOCATE 24, 1: PRINT SPACE$(27); : GOSUB BoxLine23
- INPUT "Enter reference name for new feature"; a$
- IF a$ = "" THEN RETURN
- LOCATE 25, 1
- FOR i = 0 TO 14
- PRINT RIGHT$(" " + MID$(STR$(i + 1), 2), 2); " ";
- LINE (16 + i * 40, 335 * YfacTXT)-(40 + i * 40, 349 * YfacTXT), i + 1, BF
- NEXT i
- GOSUB BoxLine23
- INPUT "Select color (4,7,10-Hwys 11-Water 12-Hwy 13-Spcl 14-City)"; B$
- SavClr = VAL(B$): IF SavClr > 15 OR SavClr < 1 THEN RETURN
- x%(nmp) = 0: y%(nmp) = SavClr 'Store feature color 0,c
- LN$(LNi + 1) = LN$(LNi): LNptr = LNi'Bump up present LN$ comment
- LN$(LNi) = a$: LNi = LNi + 1'Store feature name
- nmp = nmp + 1: Z = nmp
- nmp = nmp + 1: x%(nmp) = 0: y%(nmp) = 0'nmp points to ending 0,0
- GOSUB BoxLine23: LOCATE 25, 1: PRINT SPACE$(80); : LOCATE 25, 1
- IF RIGHT$(Key$, 1) = CHR$(48) THEN
- PRINT "NOW USE DIGITIZER TO ADD NEW POINTS TO THIS FEATURE...";
- GOSUB GetXY: GOSUB Cursor
- ELSE
- PRINT "NOW MOVE CURSOR AND USE ALT-A TO ADD POINTS TO THIS NEW FEATURE...";
- END IF
- GOSUB MakePT
- RETURN
-
-
- NewCenter: LATcen = CPY: LONcen = CPX: Changed = Changed + 1: GOTO CurDrwMap
-
- MapRange: GOSUB BoxLine23: INPUT "Enter map range"; a$
- IF VAL(a$) <> 0 THEN MapRng = VAL(a$)
- Changed = Changed + 1: GOTO DrwMPaCur
-
- AddPoint: nmp = nmp + 1: Z = Z + 1
- FOR i = nmp TO Z STEP -1
- x%(i) = x%(i - 1): y%(i) = y%(i - 1)
- NEXT
- GOSUB MakePT
- IF SavClr = 0 THEN GOTO DrawMap
- S = Z - 1: LineColor = SavClr: GOTO DP
-
- MakePT: x%(Z) = dx + (CUX - 320) / (KP * Hfac)
- y%(Z) = dy + (CUY - Ycen) / KP
- Changed = Changed + 1
- GOTO MapPoint
-
- CurToPoint:
- CPX = CDX - (x%(Z) - dx) / ppdV
- CPY = CDY - (y%(Z) - dy) / (ppdV * Yfactr)
- GOTO Cursor
-
- DelPT: GOSUB DelZ
- REM if 1st pt, it stays as 1st pt
-
- IF x%(Z) = 0 THEN Z = Z - 1: REM if end pt, it stays as end
- IF x%(Z + 1) = 0 AND x%(Z - 1) = 0 THEN 'It is LAST point
- GOSUB Kline: LNptr = LNptr - 1 'So Kill Line
- GOSUB DelZ 'And Kiil it
- Z = Z - 1: GOSUB DelZ: Z = Z - 1 'Kill 0,color
- END IF 'and -1 to end point
- RETURN
-
- DelZ: nmp = nmp - 1
- FOR i = Z TO nmp
- x%(i) = x%(i + 1): y%(i) = y%(i + 1)
- NEXT: Changed = Changed + 1: RETURN
-
- NextLine: IF Z >= nmp - 1 THEN Z = nmp - 1: BEEP: RETURN
- DO UNTIL x%(Z) = 0: Z = Z + 1: LOOP
- IF Z < nmp - 1 THEN Z = Z + 1: LNptr = LNptr + 1
- SavClr = 0: GOTO MapPoint
- Previous: DO UNTIL Z = 1 OR x%(Z) = 0: Z = Z - 1: LOOP
- IF Z > 3 THEN Z = Z - 1: LNptr = LNptr - 1
- SavClr = 0: GOTO MapPoint
-
- KillF: Bi = Z: Changed = Changed + 1
- DO UNTIL x%(Bi) = 0: Bi = Bi - 1: LOOP: Z = Bi + 1
- REM Stop at Beginning (0) point of the feature to kill
- Ni = Bi + 1' Now scan for next feature
- DO UNTIL x%(Ni) = 0: Ni = Ni + 1: LOOP
- REM now move down rest of array to fill
- DO UNTIL Ni = nmp + 1
- x%(Bi) = x%(Ni): y%(Bi) = y%(Ni)
- Bi = Bi + 1: Ni = Ni + 1
- LOOP
- nmp = nmp - (Ni - Bi): y%(nmp) = 0
- GOSUB Kline
- GOTO DrawMap
-
- Kline: FOR i = LNptr TO LNi
- LN$(i) = LN$(i + 1)
- NEXT i
- LNi = LNi - 1
- RETURN
-
- MapPoint:
- IF Z < 2 THEN Z = 2: LNptr = 1: BEEP: SavClr = 0
- IF Z > nmp - 1 THEN Z = Z - 1: BEEP: SavClr = 0
- IF x%(Z) = 0 THEN
- IF a$ = "-" THEN
- LNptr = LNptr - 1: Z = Z - 1
- ELSE LNptr = LNptr + 1: Z = Z + 1
- END IF: SavClr = 0
- END IF
- IF LNptr < 0 THEN LNptr = 0
- IF Display$ = "MAP" THEN
- LOCATE 22, 1
- PRINT "Fture#"; LNptr; TAB(12); LEFT$(LN$(LNptr) + " ", 12);
- END IF
- DrwMpPt: IF Display$ <> "MAP" THEN RETURN
- CIRCLE (Xtest, Ytest), 10, 0 'Erase old circle
- Xtest = 320 + KP * (x%(Z) - dx) * Hfac
- Ytest = Ycen + KP * (y%(Z) - dy) * Yfactr
- CIRCLE (Xtest, Ytest), 10, 15
-
- LOCATE 23, 1: PRINT "MapPt#"; Z;
- IF Z > 999 THEN PRINT TAB(13); "val:"; ELSE PRINT TAB(12); "vals:";
- PRINT TAB(17); x%(Z); TAB(23); y%(Z)
- RETURN
-
- AddLabel: nml = nml + 1
- MLa(nml) = CPY: MLo(nml) = CPX
- GOSUB BoxLine23: INPUT "Enter Label Name"; a$: ML$(nml) = a$
- GOSUB BoxLine23: INPUT "Begin displaying label at what range?"; a$
- a = VAL(a$): IF a <> 0 THEN MLr(nml) = a: ELSE MLr(nml) = 2048
- Changed = Changed + 1: GOTO labels
-
- BoxLine23: LOCATE 23, 1: PRINT SPACE$(80); : LOCATE 23, 1: RETURN
-
- ErrorTrap: fault = ERR: 'Error handling routine
- IF ERR = 57 THEN PRINT " I/O-error-User-logoff"; : RESUME
- IF ERR = 69 THEN PRINT " Comm-buffer-overflow"; : RESUME
- IF ERR = 53 THEN PRINT " file-"; F$; "-not-found": CLOSE : RESUME NEXT
- IF ERR = 62 THEN RESUME NEXT
- IF ERR = 55 THEN RESUME NEXT
- IF ERR = 2 THEN PRINT "SYNTAX-error"
- IF ERR = 70 THEN PRINT " WRITE PROTECTED!...": RESUME NEXT
- RESET
- PRINT : PRINT "Error beyond repair. Number = "; ERR;
- INPUT "Hit RETURN to return to DOS"; a$
- SYSTEM
-
- MapDIR: CLS : PRINT "MAP FILES DIRECTORY": PRINT
- PRINT "To display MAP files, please enter the path to your xxxxxxx.MAP files."
- PRINT "For example, the default '\APRS\*.MAP' will show all maps in the APRS"
- PRINT "directory. Similarly '*.map' will search your present QB directory."
- PRINT "For any other path, enter the full file specification.": PRINT
- F$ = "\aprs\*.map"
- PRINT "Enter Filespec for searching the DIRECTORY ("; F$; ")";
- INPUT a$: IF a$ <> "" THEN F$ = a$
- PRINT : PRINT : FILES F$
- RETURN
-
-
- LoadMap: 'Maps are drawn to the default EGA resolution of 640 x 400 (350)
- Again: GOSUB BoxLine23
- INPUT " Enter map FILENAME, or NEW, or ? for a list, or Q to quit)"; a$
- IF UCASE$(a$) = "Q" THEN SYSTEM
- IF a$ = "?" THEN GOSUB MapDIR: GOTO Again
- IF UCASE$(a$) = "NEW" THEN GOSUB NewMap: RETURN
- a = INSTR(3, a$, "."): IF a = 0 THEN a$ = a$ + ".map"
- MapFile$ = UCASE$(a$): F$ = MapFile$: OPEN F$ FOR INPUT AS #3
- IF fault = 53 THEN fault = 0: PRINT : CLOSE #3: GOTO Again
- GOSUB BoxLine23: PRINT " Loading "; F$; "..."
- INPUT #3, LATo: LINE INPUT #3, LATtext$
- INPUT #3, LONo: LINE INPUT #3, LONtext$
- INPUT #3, ppdV: LINE INPUT #3, VS$'Pixels per degree horiz
- INPUT #3, LATcen: LINE INPUT #3, LATcen$
- INPUT #3, LONcen: LINE INPUT #3, LONcen$
- INPUT #3, MapRng: LINE INPUT #3, MapRng$
- INPUT #3, MinRng: LINE INPUT #3, MR$
- LINE INPUT #3, TextLine$ ' Line of comments or instrutcitons
- RS = 2 ^ INT(LOG(MapRng) / LOG(2))'Rng is intgr of VERTrng
- i = 0: LNi = 0:
-
- DO WHILE NOT EOF(3)
- i = i + 1: INPUT #3, x%(i), y: y%(i) = y * Yfactr
- IF x%(i) = 0 AND NOT EOF(3) THEN ' Get line color & store with x=0
- INPUT #3, y%(i): LNi = LNi + 1: LINE INPUT #3, LN$(LNi)' Save line name
- IF y = -1 THEN GOSUB LoadLabels ' All labels listed at end of file
- END IF
- LOOP: nmp = i 'nmp points to 0,-1 that ends all data (but the value
- 'of X% and y% are 0,0 until file is saved.
- LET CDY = LATcen: CDX = LONcen'Center display on ORIGIN
- LET CPX = CDX: CPY = CDY 'Cursor Posn to Center of Display
- LET Z = 2: LNptr = 1: REM start at first point and first line segment
- CLOSE #3: RETURN: REM first X% value is map color. 2nd val is 1st pt
-
-
-
- LoadLabels: K = 0
- DO WHILE NOT EOF(3)
- K = K + 1: INPUT #3, ML$(K), MLa(K), MLo(K), MLr(K)
- LOOP
- IF MLa(K) = 0 OR MLo(K) = 0 THEN nml = K - 1 ELSE nml = K
- RETURN
-
- SaveMap: GOSUB BoxLine23
- PRINT "Enter file name to save if other than "; MapFile$;
- INPUT a$: IF a$ <> "" THEN MapFile$ = a$
- F$ = MapFile$
- GOSUB BoxLine23: PRINT "Saving map to file named "; F$; " ..."
- OPEN F$ FOR OUTPUT AS #4
- IF fault = 70 THEN CLOSE #4: GOTO SaveMap
- PRINT #4, LATo; ","; LATtext$
- PRINT #4, LONo; ","; LONtext$
- PRINT #4, ppdV; ","; VS$
- PRINT #4, LATcen; ","; LATcen$
- PRINT #4, LONcen; ","; LONcen$
- PRINT #4, MapRng; ","; MapRng$
- PRINT #4, MinRng; ","; MR$
- PRINT #4, TextLine$
- J = 1
- FOR i = 1 TO nmp
- IF x%(i) <> 0 THEN WRITE #4, x%(i), INT((y%(i) / Yfactr) + .5)
- IF x%(i) = 0 AND i = nmp THEN PRINT #4, " 0,-1"
- IF x%(i) = 0 AND i <> nmp THEN
- PRINT #4, "0,0"
- PRINT #4, y%(i); ","; LN$(J): J = J + 1
- END IF
- NEXT i
- PRINT #4, "0,"; LN$(LNi)
- FOR K = 1 TO nml
- PRINT #4, ML$(K); ","; : WRITE #4, MLa(K), MLo(K), MLr(K)
- NEXT K: CLOSE #4: LOCATE 24, 1:
- Changed = 0
- IF nmp > MaxNumPoints OR nml > MaxNumLABELS THEN
- CLS : LOCATE 9, 29: PRINT "CAUTION!": PRINT : PRINT
- IF nmp > MaxNumPoints THEN
- PRINT " The number of points is greater than"; MaxNumPoints
- END IF
- IF nml > MaxNumLABELS THEN
- PRINT " The number of LABELS is greater than"; MaxNumLABELS
- END IF
- LOCATE 18, 12
- PRINT " Therefore this map will not work with APRS (yet) "
- LOCATE 23, 1: INPUT "HIT Enter to continue..."; a$
- END IF: GOTO DrwMPaCur
-
- CurDrwMap: CDX = CPX: CDY = CPY: GOTO DrawMap: REM Re-center at CURSOR location
-
- DrwMPaCur: CPX = CDX: CPY = CDY: GOSUB DrawMap
- REM After drawing map, Put cursor at center
- RETURN
-
- DrawMap: Display$ = "MAP": COLOR 15, 0
- 'Draw to range scale RS and center display CDX and CDY
- 'Original Map was 40 pix-per-deg Horiz and 20 vert for 200 display
- 'Now ppdH and ppdV are variables. The scaling factor KP is 1 for
- 'the original map scale.
- IF RS < MinRng THEN LET RS = MinRng
- IF RS > 8192 THEN RS = 8192
- KP = 100 * 100 / (RS * ppdV)'This is to scale it down from the 120 maps
- Sfac = 50 * 200 / RS 'Till 307 had been 100*120
-
- Lfac = COS(CDY / 57.296)
- Hfac = (640 / 350) * (3 / 4) * Lfac
- dx = ppdV * (LONo - CDX)
- dy = ppdV * (LATo - CDY)
-
- CLS : LOCATE 1, 2: PRINT "Redrawing Map"
- REM first put ORIGIN and map CENTER on the map
- LINE (320 - KP * dx, Ycen - KP * dy)-(960 - KP * dx, Ycen - KP * dy), 14
- LINE (320 - KP * dx, Ycen - KP * dy)-(320 - KP * dx, 3 * Ycen - KP * dy), 14
- CMX = 320 + Sfac * (CDX - LONcen) * Hfac'new
- CMY = Ycen + Sfac * (CDY - LATcen) * Yfactr
- LINE (CMX - 27, CMY)-(CMX + 27, CMY), 14
- LINE (CMX, CMY - 20)-(CMX, CMY + 20), 14
- CIRCLE (CMX, CMY), 10, 14
- CIRCLE (320 - KP * dx, Ycen - KP * dy), 12, 14
- S = 0: GOSUB MapPoint: REM Redraw MapPoint
- DP: FOR i = S TO nmp - 1
- x = 320 + KP * (x%(i) - dx) * Hfac
- y = Ycen + KP * (y%(i) - dy) * Yfactr
- X1 = 320 + KP * (x%(i + 1) - dx) * Hfac
- Y1 = Ycen + KP * (y%(i + 1) - dy) * Yfactr
- IF x%(i + 1) <> 0 THEN
- IF RdsOn OR LineColor <> 12 THEN LINE (x, y)-(X1, Y1), LineColor
- IF i = Z THEN SavClr = LineColor
- ELSE
- LineColor = y%(i + 1): i = i + 1
- IF Display$ = "SHOW" AND LineColor > 8 THEN LineColor = LineColor - 8
- END IF
- NEXT i
- GOSUB Cursor
- REM MapPoint went here
- GOSUB DrawHist: REM draw GPS history track
- IF Display$ = "SHOW" THEN
- GOSUB ShowMaps
- ELSE
- LOCATE 25, 1: PRINT "Use +/- to move MAPpoint. N/P for Next/Previous Feature. H for HELP!.";
- LOCATE 1, 61
- PRINT "POINTS"; nmp; "= "; INT((nmp / MaxNumPoints) * 100); "%";
- LOCATE 2, 61
- PRINT "LABELS "; nml; "= "; INT((nml / MaxNumLABELS) * 100); "%";
- LOCATE 3, 61: PRINT "CENTER "; MID$(STR$(LATcen), 2, 5);
- LOCATE 3, 75: PRINT MID$(STR$(LONcen), 2, 5)
- LOCATE 4, 61: PRINT "SCALE (ppd)"; ppdV
- LOCATE 5, 69: PRINT "Range"; LEFT$(STR$(MapRng), 5)
- END IF
-
- labels:
- IF Labls THEN
- FOR i = 1 TO nml ' Now plot labels on map
- IF RS <= MLr(i) OR Key$ = "S" THEN
- LET x = 320 + Sfac * (CDX - MLo(i)) * Hfac'new
- LET y = Ycen + Sfac * (CDY - MLa(i)) * Yfactr
- IF Tags AND y > 14 * Yfactr AND y < 350 * Yfactr AND x > 8 * (LEN(ML$(i)) + 1) AND x < 632 THEN
- LOCATE y / (14 * Yfactr), (x / 8) - LEN(ML$(i)): PRINT ML$(i);
- END IF
- END IF
- NEXT i
- END IF
- GOSUB ShowMap: RETURN
-
- ShowMap: REM this shows the map boarder of the loaded map
- x = 320 + KP * (CDX - LONcen) * ppdV * Hfac'new
- y = Ycen + KP * (CDY - LATcen) * ppdV * Yfactr
- by = MapRng * Sfac * Yfactr / 60
- bx = by * 640 / (400 * Yfactr) * Lfac'old
- C = 15
- LINE (x - bx, y - by)-(x + bx, y + by), C, B
- RETURN
-
- Cursor: CIRCLE (CUX, CUY), 4, 0
- CUX = 320 + Sfac * (CDX - CPX) * Hfac'new
- CUY = Ycen + Sfac * (CDY - CPY) * Yfactr
- CIRCLE (CUX, CUY), 4, 14
- x = INT(CPX): y = INT(CPY): Xm = (CPX - x) * 60: Ym = (CPY - y) * 60
- x$ = RIGHT$(STR$(x), 3) + " "
- LOCATE 1, 2: PRINT "RNG"; RIGHT$(" " + STR$(RS), 4) + " "
- LOCATE 2, 2: PRINT "LAT "; y; MID$(STR$(Ym) + " ", 2, 5)
- LOCATE 3, 2: PRINT "LON "; x$; MID$(STR$(Xm) + " ", 2, 5)
-
- LOCATE 24, 1: PRINT "Cursor coordnts:"; TAB(17);
- PRINT INT(.5 + dx + (CUX - 320) / KP); TAB(23); INT(.5 + dy + (CUY - Ycen) / KP);
- REM LOCATE 24, 55: PRINT "Degrees: ";
- REM PRINT LEFT$(STR$(CPY) + " ", 7); LEFT$(STR$(CPX) + " ", 7);
- LOCATE 1, 16: PRINT "Decimal";
- LOCATE 2, 15: PRINT LEFT$(STR$(CPY) + " ", 8);
- LOCATE 3, 15: PRINT LEFT$(STR$(CPX) + " ", 8);
- LINE (0, 0)-(178, 42 * Yfactr), 12, B'Box around it
- LINE (0, 0)-(116, 42 * Yfactr), 12, B'Box around it
- LET a$ = "": LET B$ = "": RETURN
-
- HELP: CLS : COLOR 15, 1: LINE (0, 0)-(639, 18 * Yfactr), 14, BF
- LOCATE 1, 20: PRINT " MAPFIX.bas HELP SCREEN Ver "; Ver$
- LOCATE 3, 1
-
- PRINT " The cursor is shown in LAT/LON, map offset and decimal degrees. The ORIGIN,"
- PRINT " CENTER and BORDER are shown (but only the CENTER and RANGE in MAPLIST.map are"
- PRINT " actually used by APRS. Labels are right justified to the point just after the"
- PRINT " last letter. CALLS & OBJECT names will be left justified."
- PRINT ""
- PRINT " H - HELP screen D - DIRECTRY of maps alt-A Add point alt-L LABEL placemnt"
- PRINT " G - GOTO map-pnt F - FIND PT @ Cursor alt-B BEGIN dgtzr alt-M MOVE point"
- PRINT " L - LABELS off S - SHOW all labels alt-C CENTER point alt-N NEW feature"
- PRINT " M - MAPLIST.map O - OTHER map borders alt-D DELETE point alt-O OPEN Dgtzr COM"
- PRINT " N - NEXT Feature R - RESET pointers alt-G GPS overlay alt-R RANGE"
- PRINT " P - PREV Feature Q - QUIT ^S - SAVE! alt-K KILL feature alt-T TRIM Border pts"
- PRINT
- PRINT " On the MAP screen, use the white arrow keys with NumLock off for best movement"
- PRINT " Space bar - Draw map"
- PRINT " Arrow Keys - Move cursor. (use Shift with NumLock off to move faster)"
- PRINT " Home (Shift) - Home the map to cursor (Shift-Home the map to ORIGIN)"
- PRINT " PgUp, PgDn - Change map scale up/dn by 2 (use CTRL for factor of 8)"
- PRINT " End - Redraw map centered on CENTER"
- PRINT " Gray +/- keys - Move MapPoint to next point within Feature"
- PRINT
- IF Display$ <> "HELP" THEN
- LOCATE 25, 1
- PRINT " HIT H AGAIN FOR MORE HELP SCREENS, OR SPACE BAR FOR MAP...";
- END IF
- Display$ = "HELP"
- LINE (0, 0)-(634, 348 * Yfactr), 15, B
- RETURN
-
-
-
- REM ************* HERE IS THE CODE BROUGHT IN FROM APRS ***************
-
- LdMapLst: MapListLoaded = -1
- F$ = "Maplist.map": OPEN F$ FOR INPUT AS #3
- i = 1: IF fault = 53 THEN STOP
- INPUT #3, DfltY: LINE INPUT #3, a$
- INPUT #3, DfltX: LINE INPUT #3, a$
- INPUT #3, BestRng: LINE INPUT #3, a$: DfltR = BestRng
- INPUT #3, GMToffset: LINE INPUT #3, a$
- WHILE a$ <> "* BEGIN *": LINE INPUT #3, a$: WEND ' Skip comment block
- REM RS = BestRng: REM center display
- REM RS = 2 ^ INT(LOG(RS) / LOG(2))'Rng is intgr power of 2
- REM CPX = CDX: CPY = CDY 'Cursor Posn to Center of Display
- WHILE NOT EOF(3) AND i <= UBOUND(MapName$)
- INPUT #3, MapName$(i), LATcen(i), LONcen(i), MapMax(i)
- LINE INPUT #3, Comment$(i)' IGNORE ALL comment fields
- REM now ignore maps that start with a *
- IF LEFT$(MapName$(i), 1) <> "*" THEN NumGood = NumGood + 1
- NumMaps = i: i = i + 1
- WEND: CLOSE #3
- IF NumGood >= MaxNumMAPS - 1 THEN
- CLS : LOCATE 2, 5
- PRINT "WARNING: Too many ACTIVE MAPS (more than"; MaxNumMAPS; ") in MAPLIST.map file for APRS"
- LOCATE 4, 10: PRINT "Use EDITOR to suppress mapnames with an (*) that you don't need."
- PRINT : PRINT : PRINT
- INPUT "HIT RETURN to continue"; a$
- END IF
- RETURN
-
- ListMAPlist: IF NOT MapListLoaded THEN GOSUB LdMapLst
- GOSUB ListHeader
- FOR i = 1 TO NumMaps
- IF i / 19 = INT(i / 19) THEN
- LOCATE 25, 1: PRINT "HIT RETURN to continue"; : INPUT a$
- GOSUB ListHeader
- END IF
- PRINT MapName$(i); TAB(14);
- PRINT INT(LATcen(i) * 100) / 100; TAB(21); INT(LONcen(i) * 100) / 100;
- PRINT TAB(29); MapMax(i); TAB(36); LEFT$(Comment$(i), 43)
- NEXT i
-
- LOCATE 25, 1: PRINT "LIST COMPLETE. CONTINUE WITH NEXT MAPFIX COMMAND...";
- RETURN
-
- ListHeader: CLS
- PRINT "MAPS in MAPLIST.map (*MAPS are suppressed) [For now, use EDITOR to modify]"
- PRINT :
- PRINT "MAP NAME LATcen LONcen RANGE COmments"
- PRINT "------------ ------ ------- ----- -------------------------------------------"
- RETURN
-
- DrwAndShow: IF NOT MapListLoaded THEN GOSUB LdMapLst
- Display$ = "SHOW": GOSUB DrwMPaCur
-
- ShowMaps: IF MapSize > RS / 2 THEN MapSize = RS / 2
- LOCATE 25, 1: PRINT " Drawing all maps >"; MapSize;
- PRINT "mi. F3 to see smaller, F4 for bigger, SPACE to cancel.";
- LINE (0, 336 * Yfactr)-(639, 349 * Yfactr), 14, B
- FOR i = 1 TO NumMaps
-
- x = 320 + Sfac * (CDX - LONcen(i)) * Hfac
- y = Ycen + Sfac * (CDY - LATcen(i)) * Yfactr
- dy = MapMax(i) * Sfac * Yfactr / 60
- dx = dy * 640 / (400 * Yfactr) * Lfac
- C = 15
- IF MapMax(i) > 32 THEN C = 14
- IF MapMax(i) > 64 THEN C = 12
- IF MapMax(i) > 128 THEN C = 11
- IF MapMax(i) > 256 THEN C = 13
-
- IF MapMax(i) > MapSize THEN
- LINE (x - dx, y - dy)-(x + dx, y + dy), C, B
- IF y + dy > 14 * Yfactr AND y + dy < 350 * Yfactr THEN
- IF x + dx > 8 * (LEN(MapName$(i)) + 1) AND x + dx < 632 THEN
- LOCATE (y + dy) / (14 * Yfactr), (x + dx) / 8 - LEN(MapName$(i))
- IF MapMax(i) > RS / 4 THEN PRINT MapName$(i);
- END IF
- END IF
- END IF
- NEXT i: RETURN
-
- REM ******* here is the code added by W7KKE for overlyaying track histoiries
- 'This module retrieves GPS history files so you can check the accuracy of
- 'the map
-
- Hstdir: CLS : PRINT "HISTORY FILES DIRECTORY": PRINT
- PRINT "To display HST files, please enter the path to your xxxxxxx.HST files."
- PRINT "For example, the default '\APRS\*.HST' will show all maps in the APRS"
- PRINT "directory. Similarly '*.hst' will search your present QBasic directory."
- PRINT "For any other path, enter the full file specification.": PRINT
-
- PRINT "Enter Filespec for searching the DIRECTORY (\aprs\*.hst)";
- INPUT F$: IF F$ = "" THEN F$ = "\aprs\*.hst"
- IF INSTR(F$, ".") = 0 THEN F$ = F$ + ".HST"
- PRINT : PRINT : FILES F$
- RETURN
-
- LoadHst: GOSUB BoxLine23
- INPUT "Which history file to load (ENTER for list, Q to quit)"; F$
- IF UCASE$(F$) = "Q" THEN RETURN
- IF F$ = "" THEN GOSUB Hstdir: GOTO LoadHst
- a = INSTR(3, F$, "."): IF a = 0 THEN F$ = F$ + ".hst"
- fault = 0: F$ = UCASE$(F$): OPEN F$ FOR INPUT AS #3
-
- IF fault = 53 OR fault = 62 THEN fault = 0: RETURN
- GOSUB BoxLine23: PRINT "Loading track history from "; F$
-
- DO WHILE NOT EOF(3)
- i = i + 1
- INPUT #3, a$
- HLAT(i) = VAL(MID$(a$, 26, 2)) + (VAL(MID$(a$, 28, 5)) / 60)
- HLONG(i) = VAL(MID$(a$, 35, 3)) + (VAL(MID$(a$, 38, 5)) / 60)
- maxhist = i
- LOOP
- CLOSE #3: Histloaded = -1
- GOSUB BoxLine23: PRINT "File loading is complete. GPS data is plotted."
- REM fall through...
-
- DrawHist: 'put history track on map
- IF Histloaded THEN
- size = 3: IF RS < 2 THEN size = size * 2 / RS
- FOR i = 1 TO maxhist
- HMX = 320 + KP * (CDX - HLONG(i)) * ppdV * Hfac'new
- HMY = Ycen + KP * (CDY - HLAT(i)) * ppdV * Yfactr
- CIRCLE (HMX, HMY), size, 13
- NEXT i
- END IF
- RETURN
-
- NewMap: CLS : PRINT "BEGINNING A NEW MAP FROM SCRATCH...": PRINT
- PRINT "All points in an APRS map are measured as an"
- PRINT "offset to the right and down from an origin."
- PRINT
- INPUT "Enter the LATITUDE of the ORIGIN in decimal degrees"; LATo
- INPUT "Enter the LONGITUDE of the ORIGIN in decimal degrees"; LONo
- PRINT
- PRINT "Choose the number of pixels per degree to set the map scale:"
- PRINT
- PRINT "Approximate size Range from center Pixels/Deg"
- PRINT "---------------- ----------------- ----------"
- PRINT "Big state or region 500 120"
- PRINT "Typical state 200 300"
- PRINT "Several Counties 100 600"
- PRINT "Typical VHF range 50 1200"
- PRINT "City streets (7.5 min maps) 25 2400"
- PRINT
- INPUT "Enter desired Pixels/Deg"; ppdV
- IF ppdV = 0 THEN GOTO NewMap
- REM In following lines, 500 is half of 999 (maximum nominal value for pts)
- LATcen = LATo - (500 * Yfactr / ppdV): LATcen$ = "LAT of ORIGIN"
- LONcen = LONo - (500 / ppdV): LONcen$ = "LON of Origin"
- MapRng = 60 * 500 * Yfactr / ppdV: REM 500 is half of full map size
- MapRng$ = "Map range from center"
- VS$ = "Pixels per degree"
- MinRng = 1: MR$ = "No longer used"
- TextLine$ = "NEW Map generated by MAPFIX.bas routine..."
- RS = 2 ^ INT(LOG(MapRng) / LOG(2))'Rng is intgr of VERTrng
- CDX = LONcen: CDY = LATcen: CPX = CDX: CPY = CDY
- nmp = 1
- LNi = 1: LN$(1) = "Labels begin here"
- CLS : PRINT "YOU ARE NOW READY TO DRAW A NEW MAP...": PRINT : PRINT
- PRINT "A white border has been drawn around the maximum size permitted for this map"
- PRINT
- PRINT "USING CURSOR WITHOUT DIGITIZER: Move coursor to starting point for a NEW"
- PRINT "feature and hit ALT-N. Then enter new feature name (for reference purposes)"
- PRINT "and continue moving cursor to the next point and hit ALT-A to add more points."
- PRINT "Continue in this fashion, using ALT-N whenever you want to begin a NEW feature."
- PRINT
- PRINT "USING A DIGITIZER: First, use ALT-O once to OPEN the digitizer COM port. Then"
- PRINT "use ALT-B to BEGIN each new map feature. Enter the name and color of the new"
- PRINT "feature. Then use the digitizer mouse to add more points."
- PRINT : PRINT : PRINT
- PRINT "Add LABELS on the map at the current cursor location by using the ALT-L key. "
- PRINT
- PRINT "When you are finished, be sure to SAVE the map using the CTRL-S command..."
- PRINT : PRINT : PRINT
- PRINT "FOR HELP, REMEMBER THE H KEY!"
- PRINT : PRINT : PRINT "Hit ENTER to proceed..."; : INPUT a$
- RETURN
-
- DigiInit: CLS : PRINT : Digitizer = -1
- PRINT "This routine will replace many CURSOR functions with the Digitizer's MOUSE."
- PRINT "Assuming your digitizer can output an X,Y,C format."
- PRINT
- PRINT "Only Mercator projection charts will give absolutely accurate results. Other"
- PRINT "types, Lambert Conformal, Conical, etc will induce distortions."
- PRINT
- PRINT "It has not been tested with East Longitude or South Latitude."
- PRINT : PRINT
- PRINT "The digitizr should operate at 9600,N,8,1 in POINT mode with 200 LPI resolution."
- PRINT "The FORMAT outputs X,Y,C values separated by commas (C is for button pressed."
- PRINT
- PRINT "Set up the digitizer according to your model's instructions. For the model"
- PRINT "23360, use the drawing board menu by pressing the mouse button 0 on the SETUP"
- PRINT "label so that the LED is ON. Then move the mouse to each other label and"
- PRINT "use the 0 button to toggle the value ON or off as follows:"
- PRINT
- PRINT "POINT is ON PARITY 7/8 and 1 are ON "
- PRINT "BAUDRATE 3 is ON FORMAT is ON ON off ON"
- PRINT "DATA RATE doesn't matter RESOLUTION off off ON"
- PRINT : PRINT
- INPUT "Is DIGITIZER connected to COM1 or COM2 (1)"; a$
- IF a$ <> "2" THEN a$ = "COM1" ELSE a$ = "COM2"
-
- Port$ = a$ + ":9600,N,8,1,cs0,ds0,cd0"
- OPEN Port$ FOR RANDOM AS #1
-
-
- CLS : PRINT "FIRST LETS TEST THE DIGITIZER, AND GET THE MAP ON STRAIGHT.": PRINT
- PRINT "Move your mouse (or pen) and hit the 0 button (or touch tablet) to see if the"
- PRINT "digitizer is outputting in the desired format. While doing this, it is a good"
- PRINT "idea to verify that your map is on straight. The Y values from the mouse"
- PRINT "should give the same values for the same LATITUDE line on both the right and"
- PRINT "left edges of the map. If not, move your map to get it horizontal."
- PRINT
- PRINT "OUTPUT FORMAT:"
- PRINT
- PRINT "XXXXX,YYYYY,APn (Only the X and Y values are used (4 or 5 digits is ok)"
- PRINT
- LOCATE 25, 1: PRINT "Hit ENTER and press 0 button on mouse to continue...";
- LOCATE 13, 1
- DO UNTIL INKEY$ <> "": LINE INPUT #1, a$: PRINT a$: LOOP
-
- CLS : PRINT
- PRINT "NEXT YOU MUST ESTABLISH THE SCALE OF YOUR DIGITIZER."
- PRINT
- PRINT "The scale is established by two points, the first near the"
- PRINT "upper left corner, the second near the lower right corner."
- PRINT
- PRINT "To get the best accuracy on maps not exactly MERCATOR, use points within the "
- PRINT "area where you are working, not on the extreme corners. IE: choose points"
- PRINT "that are in the center of the upper left quadrant and the lower right quadrant."
- PRINT
- PRINT "To establish the upper left reference point:"
- INPUT " Enter lat (deg,min)"; LATref1, M: LATref1 = LATref1 + M / 60
- INPUT " Enter long (deg,min)"; LONref1, M: LONref1 = LONref1 + M / 60
- PRINT
-
- PRINT "Place the mouse on the upper left point and press the 0 button."
- LINE INPUT #1, a$: SOUND 150, 3
- digix1 = 5000 - VAL(LEFT$(a$, 5))
- digiy1 = VAL(MID$(a$, 7, 5))
- PRINT "Digitizer reads "; digix1, digiy1; " for this point.": PRINT
-
- PRINT "NOW Establish the lower right reference point:"
- INPUT " Enter lat (deg,min)"; LATref2, M: LATref2 = LATref2 + M / 60
- INPUT " Enter long (deg,min)"; LONref2, M: LONref2 = LONref2 + M / 60
- PRINT
- PRINT "Place digitizer pen on lower right point."
- LINE INPUT #1, a$: SOUND 150, 3
- digix2 = 5000 - VAL(LEFT$(a$, 5))
- digiy2 = VAL(MID$(a$, 7, 5))
- PRINT "Digitizer reads "; digix2, digiy2; " for this point.": PRINT
-
- REM Find delta lat/long between reference points
- REM Calculate degrees per x/y unit
- degx# = (LONref1 - LONref2) / (digix1 - digix2)
- degy# = (LATref1 - LATref2) / (digiy1 - digiy2)
-
- CLS : PRINT "YOU ARE NOW READY TO USE THE DIGITIZER TO ENTER POINTS INTO MAPFIX..."
- PRINT
- PRINT "The digitizer works just about like the cursor and arrow keys in MAPFIX. Any"
- PRINT "point identified by the digitizer will be ADDED just as if you had hit ALT-A."
- PRINT "All points are added to a feature after the current MapPoint identified by the"
- PRINT "white circle. "
- PRINT
- PRINT "With the digitizer, do NOT use the ALT-N NEW command which always begins at the"
- PRINT "current cursor location. For the digitizer, use ALT-B to BEGIN a new feature."
- PRINT "You will be asked to identify the name and color of the new feature. From then"
- PRINT "on, just move the digitizer mouse (or pen) to ADD new points. "
- PRINT
- PRINT "If your digitizer mouse has 4 buttons, use the first (left) button for ADDing "
- PRINT "points, use the 4th (right) button to just move the cursor with no action."
- PRINT : PRINT
- INPUT "Hit ENTER to continue with MAPFIX..."; a$
- RETURN
-
- GetXY: LINE INPUT #1, a$: SOUND 150, 3
- a = INSTR(a$, ","): IF a = 0 THEN RETURN
- x = 5000 - VAL(LEFT$(a$, a - 1))
- B = INSTR(a + 1, a$, ","): IF B = 0 THEN B = LEN(a$)
- y = VAL(MID$(a$, a + 1, B - (a)))
- Btn = VAL(RIGHT$(a$, 1))
- CPY = ((y - digiy2) * degy#) + LATref2
- CPX = ((x - digix2) * degx#) + LONref2
- IF LOC(1) <> 0 THEN a$ = INPUT$(LOC(1), #1)'Clear input buffer
- RETURN
-
- END
-
-