home *** CD-ROM | disk | FTP | other *** search
/ Kids Cube / 4_History.iso / fastmap / fastmap.doc < prev    next >
Text File  |  1992-09-23  |  21KB  |  453 lines

  1. Copyright (c) 1992, Glen Okita.
  2. ------------------------------------------------------------------------
  3. FILES
  4.  
  5. This distribution should contain the following files:
  6.     FASTMAP.EXE    Fastmap program
  7.     FASTMAP.DOC    Fastmap documentation (this file)
  8.     FASTMAP.INI    Sample initialization file
  9.     MWDBII.DOC     MWDBII format documentation
  10.     MWDBII         Level 3 MWDBII map database
  11.     CITY.DAT       City names and locations (694 cities)
  12.     CITYSUB.DAT    City subset (223 cities)
  13.     EXAMPLE.DAT    Example of user defined data
  14.  
  15. ------------------------------------------------------------------------
  16. HARDWARE AND SOFTWARE REQUIREMENTS
  17.  
  18. Fastmap requires 200K free memory, so a minimum of 384K installed
  19. memory should be enough.  A mouse is required for a few features, but
  20. you don't need one.  Should work with EGA/VGA, DOS 3.3 and up.  Developed
  21. and tested with VGA and DOS 4.01.
  22.  
  23. Most helpful is a fast CPU and a fast disk.  A reasonable minimum is a
  24. standard AT class machine (8 Mhz).
  25.  
  26. ------------------------------------------------------------------------
  27. LICENSE
  28.  
  29. The Fastmap program and accompanying documentation ("SOFTWARE") are
  30. protected by United States and International copyright law.  With this
  31. agreement, Glen Okita ("AUTHOR") grants you non-exclusive rights to use,
  32. copy, and distribute SOFTWARE subject to the following restrictions:
  33.    a)  SOFTWARE shall be for personal, non-commercial use.
  34.    b)  SOFTWARE shall retain all copyright notices and this agreement.
  35.    c)  SOFTWARE shall not be modified or incorporated in any derivative work.
  36.    d)  SOFTWARE shall not be disassembled, decompiled, or reverse-engineered.
  37.    e)  All copies of SOFTWARE shall be bound by the terms of this agreement.
  38.  
  39. The data files accompanying SOFTWARE are not subject to the above
  40. agreement, but are covered by separate provisions.  See MWDBII.DOC.
  41.  
  42. NO WARRANTY:
  43. SOFTWARE is provided "as is" with no warranties of any kind, express or
  44. implied.  In no event shall AUTHOR, or any distributor of SOFTWARE, be
  45. liable for any damages arising out of use or non-use of SOFTWARE, including
  46. loss of monies, loss of data, or any incidental or consequential damages.
  47.  
  48. ------------------------------------------------------------------------
  49. SUMMARY
  50.  
  51. fastmap [option ...] [userFile [cityFile [mapFile]]]");
  52.  
  53. option is one of:
  54.     -h   displays this help
  55.     -m   calculates metric distances
  56.     -s   swaps left and right mouse drag functions
  57.     -F   forces floating point calculation for spherical projections
  58.     -I   ignores input interrupt while drawing
  59.  
  60. mapFile must exist, userFile and cityFile are optional.  userFile
  61. defaults to USER.DAT, cityFile defaults to CITY.DAT, and mapFile
  62. defaults to MWDBII.
  63.  
  64. An optional file, FASTMAP.INI, can be used to customize display
  65. colors.
  66.  
  67. Fastmap first looks for files in the current directory, otherwise
  68. it looks in the program directory.
  69.  
  70. Note that because the user file and city file are optional, you can
  71. use any file name as a placeholder even if the file does not exist.
  72. For example, if you want to use a different city file MYCITY.DAT,
  73. and you don't have a user file, you can type:
  74.     fastmap d mycity.dat
  75. Fastmap will look for a dummy file D, and won't find it (presumably),
  76. and simply continue on.
  77.  
  78. Similarly, if you want to run fastmap without a city file, you can type:
  79.     fastmap d d
  80. Here, neither user file nor city file will be found, and Fastmap will
  81. proceed with just the map database.
  82.  
  83. ------------------------------------------------------------------------
  84. INTRODUCTION
  85.  
  86. Fastmap draws a map of the world using a map database in MWDBII format.
  87. An MWDBII file is a binary database of coordinates, with up to five
  88. levels of detail.  A particular database may not actually contain all
  89. five levels of detail.
  90.  
  91. Fastmap also draws locations specified in city and user files.  These
  92. files are text files that you can create or add to.
  93.  
  94. You can select either a spherical projection or a cylindrical (flat)
  95. projection.  The spherical and cylindrical projections maintain separate
  96. sets of viewing parameters.  That is, you can pan, zoom, and change
  97. detail in the cylindrical view without affecting the spherical view,
  98. and vice-versa.
  99.  
  100. On startup, Fastmap does some simple checks to see if the files contain
  101. good data.  If an error is encountered, Fastmap stops.  Otherwise, Fastmap
  102. presents an initial display at minimum detail, and with a spherical
  103. projection.  You can then enter commands by keyboard or mouse.
  104.  
  105. ------------------------------------------------------------------------
  106. KEYBOARD COMMANDS
  107.  
  108. A keyboard command is one of the following keys:
  109.       <left arrow>  move the view west by current grid size
  110.      <right arrow>  move the view east by current grid size
  111.         <up arrow>  move the view north by current grid size
  112.       <down arrow>  move the view south by current grid size
  113.                  z  zoom in by 1.5x (lowercase)
  114.                  Z  zoom out by 1.5x (uppercase)
  115.                  d  more detail (lowercase)
  116.                  D  less detail (uppercase)
  117.                  s  switch between spherical and cylindrical projection
  118.                  r  reset to default display, keeps current projection
  119.                  i  show info dialog
  120.                  o  show display options dialog
  121.                  a  show about dialog
  122.   <return> <space>  redraw the current view
  123.       Alt-F4 <esc>  exit with a dialog
  124.              Alt-x  exit without asking
  125.  
  126. You can type a command key while Fastmap is drawing.  If you type a key
  127. that isn't a command, drawing stops.  You can type <space> or <enter>
  128. to redraw the display.
  129.  
  130. The following keys are used with dialog boxes:
  131.      <tab> <right arrow> <down arrow>  move to next dialog entry
  132.   Shift-<tab> <left arrow> <up arrow>  move to previous dialog entry
  133.                               <space>  execute or toggle current entry
  134.                              <return>  equivalent to OK button
  135.                                 <esc>  equivalent to Cancel button
  136.  
  137. The dialog boxes are:
  138.  
  139. Info dialog:  Displays the current projection type, latitude and
  140. longitude offsets.  If any marks are present, the latitude and longitude
  141. of each mark is displayed.  If there are 2 marks, their Great Circle
  142. distance is displayed.  Note that a mouse is required to set marks.
  143.  
  144. Options dialog:  Displays the current visibility for each object in
  145. the database.  You can change the visibility of an object by using arrow
  146. keys to highlight the object and hitting the space bar.
  147.  
  148. About dialog:  Displays the version of Fastmap and copyright notice.
  149. Also displays the state of each Fastmap option.  You can change any of
  150. the options by highlighting it and hitting the space bar.
  151.  
  152. ------------------------------------------------------------------------
  153. MOUSE COMMANDS
  154.  
  155. Each button on the mouse has a different function depending on whether
  156. it is dragged or clicked.  To click a button, simply press and release
  157. it quickly.  To drag with a button, press a button and hold it down
  158. while you move the mouse.
  159.  
  160. The mouse buttons are:
  161.  
  162.         | Left              | Middle (1)        | Right             |
  163.   ------+-------------------+-------------------+-------------------+
  164.   Click | Mark location     | Options dialog    | Info dialog       |
  165.         |                   |                   |                   |
  166.   ------+-------------------+-------------------+-------------------+
  167.   Drag  | Drag view (2)     | Options menu      | Command menu (2)  |
  168.         |                   |                   |                   |
  169.         +-------------------+-------------------+-------------------+
  170.  
  171. notes: (1) only applicable for 3-button mouse
  172.        (2) these functions are swapped with the -s option
  173.            Assigning a popup menu to the right mouse button may seem odd,
  174.            but some recent Windows programs seem to be using this convention
  175.            and it is fairly common under UNIX windowing environments.
  176.  
  177. The mouse functions are:
  178.  
  179. Marking locations:  You can have up to 2 marks.  If the location
  180. of the first mark corresponds to data in the city file or the user file,
  181. the label for that location is displayed.  Otherwise, a large cross is
  182. displayed.  A smaller cross is displayed for the second mark.  As you
  183. make successive marks, the old second mark is discarded and the old
  184. first mark becomes the second mark.  If you select the same location as
  185. the first mark, all marks are removed.
  186.  
  187. View dragging:  When you are dragging the view, the cursor changes to a
  188. hand and a large cross marks the location that you are dragging.  Use
  189. the cursor's finger to indicate where this location should be displayed.
  190. In spherical view, the "globe" is first rotated about the axis, then the
  191. axis itself is tilted.  You cannot drag to or from a location off the
  192. "globe".  Also, in spherical view, it may be impossible to display
  193. the location at its desired place.  For example, no combination of
  194. rotations and tilts can place the North Pole at 3 o'clock (or anywhere
  195. off the vertical centerline).  In this case, you will find the axis
  196. tilts in an unusual way.
  197.  
  198. You can reliably control the axis tilt by dragging up or down along the
  199. vertical centerline of the screen, and by never crossing a pole while
  200. you are dragging.  If you do cross a pole, the "globe" will rotate 180
  201. degrees around its axis because rotation is applied before tilt. 
  202. Similarly, you can reliably control rotation about the axis by dragging
  203. to a location at the same latitude.  This ensures that the axis tilt
  204. stays the same.
  205.  
  206. Info dialog:  Equivalent to pressing the 'i' key.  One small difference
  207. is that all mouse dialogs are displayed at the cursor, while keyboard
  208. dialogs are displayed at the center of the screen.
  209.  
  210. Command menu:  Pretty much duplicates the functions available from the
  211. keyboard.  The character at the right of the menu indicates the keyboard
  212. equivalent, if any, for each menu entry.
  213.  
  214. Options dialog:  Equivalent to pressing the 'o' key.
  215.  
  216. Options menu:  A quick way to change the visibility of a single object.
  217.  
  218. ------------------------------------------------------------------------
  219. MISCELLANEOUS CONSIDERATIONS
  220.  
  221. If you have problems with your mouse, or Fastmap detects a mouse when
  222. there isn't one, the -M option disables the mouse.
  223.  
  224. If you are running under Windows or other multi-tasker, you may get
  225. a modest speed increase by using -I to ignore drawing interrupts.
  226. This is because checking for a key event can be much slower under
  227. Windows than directly from DOS.  On my system, the improvement is
  228. marginal.
  229.  
  230. You can force floating point (-F) for spherical projections.  This
  231. option has no effect for cylindrical projections, which always uses
  232. scaled integers.  You can see an increase in accuracy when you are
  233. at maximum zoom, because the slightly crooked grid lines are much
  234. straighter with floating point on.  If you specify floating point,
  235. Fastmap is about ten times slower.  If you also specify ignore
  236. interrupts (-I), there is no way to stop Fastmap as it draws.  You
  237. may end up waiting awhile.
  238.  
  239. If you dislike the wrapped (upside down) cylindrical projection, you
  240. can be disable it by supplying the -W option.  It provides a marginal speed
  241. improvement.
  242.  
  243. ------------------------------------------------------------------------
  244. KNOWN BUGS AND LIMITATIONS
  245.  
  246. 1. The grid size changes as you zoom.  The maximum grid size is 20
  247.    degrees, the smallest is 0.5 degree.  However, near the poles
  248.    the grid becomes coarse to avoid drawing too many grid lines.
  249.    This may cause the grid to change unexpectedly as you pan around
  250.    the poles.
  251.  
  252. 2. Single locations in the city file and user file do not get drawn in the
  253.    wrapped (upside down) cylindrical view.  However, connected lines in
  254.    these files are drawn in both the normal view and the wrapped view.
  255.  
  256. 3. You cannot mark locations in the wrapped part of the cylindrical view.
  257.  
  258. 4. Scaled integer math is only accurate to about 1 in 8000.  Since VGA
  259.    resolution is 640x480, this is no problem when zoomed out.  However,
  260.    if you zoom in more than 5 times from default (about 10x
  261.    magnification), the points will not be drawn with full precision.
  262.  
  263. ------------------------------------------------------------------------
  264. ABOUT THIS STUFF
  265.  
  266. What makes Fastmap fast?  Partly because it uses scaled 32-bit integers
  267. instead of floating point.  For spherical projections, though, the
  268. details of the integer computation are a little convoluted.  First,
  269. instead of trying to calculate a location on the sphere directly, the
  270. latitude and longitude coordinates are converted to XYZ rectangular
  271. coordinates, which are then transformed with a 3D rotation matrix.  This
  272. saves a couple of trigonometric transcendental calls over the
  273. "straightforward" way.
  274.  
  275. Furthermore, the sin() and cos() functions required to convert from
  276. polar to rectangular are also integer functions.  This is done by
  277. quadratic interpolation.  Amazingly enough, a coefficient array of
  278. about 16 elements provides more than 4 digit precision.  A conventional
  279. linear interpolation would require a much bigger array for the same
  280. precision.
  281.  
  282. The integer computation could be even faster on 386s if it took
  283. advantage of fast 32-bit integer multiplication.  To do this, I need a
  284. reliable way of detecting 386/486 machines.
  285.  
  286. The other reason Fastmap is fast comes from a simple (at least
  287. conceptually) indexing scheme.  Fastmap starts by determining the
  288. bounding box for each object in the MWDBII database.  The file offset
  289. for that object is associated with each object.  This is done only once.
  290. Fastmap then determines the bounding box corresponding to the borders
  291. of the current screen.  This must be done after each zoom or pan.  When
  292. drawing, Fastmap skips each object that does not appear in the view
  293. bounding box.  When it encounters an object that is within the box, it
  294. does a direct access disk seek to the object and starts drawing from
  295. that location.  Each coordinate in the object is then tested against
  296. the view box.  Only the coordinates within the view box are transformed
  297. (using the integer calculations described above).
  298.  
  299. One optimization I've thought of, but not implemented, takes advantage
  300. of the multi-level detail of the MWDBII format.  Fastmap could test
  301. just the minimum detail points against the view box.  The intervening
  302. points of greater detail would only be tested and transformed if the
  303. minimum detail points on either side were visible.  In a zoomed out
  304. view, with the axis tilted so that a pole is visible, this would
  305. significantly improve performance.  However, when zoomed way in there
  306. would be little improvement since most points would be clipped by the
  307. entire object's bounding box.  In fact, it could even be a little slower
  308. due to maintaining and checking detail levels.
  309.  
  310. I then noticed that when I was zoomed in all the way, and there were
  311. no objects visible, Fastmap still seemed sluggish.  It turns out that
  312. interrupt checking (checking for a key hit) is relatively slow.  And it
  313. is even slower when running under Windows.  This was masked when there
  314. were many points to draw because the time spent checking for a key was
  315. only about 10% when drawing the entire globe.  When zoomed all the way
  316. in, however, it was about 50%.  To speed this up Fastmap checks for a
  317. key only once for every 100 objects or coordinates.  On slower machines,
  318. though, it may now be sluggish in responding to a key press.
  319.  
  320. Finally, to those of you with 8086s and slower 286s, I'm sure you will
  321. find that Fastmap is far from really fast.  All I can say is that
  322. Fastmap is about 20 times faster than a straightforward implementation.
  323.  
  324. This project started as a way to learn about the idiosyncrasies of PC
  325. programming.  It's grown to about 10,000 lines of C++.  At this
  326. point I'm fairly sick of it, so I figure it's time to inflict it upon
  327. the rest of the world.  I'm not inclined to make any promises regarding
  328. support or enhancements, but if you have any bright ideas you may
  329. contact me at:
  330. Glen Okita, 1327 Maria Way, San Jose, CA 91157-3618
  331.  
  332. I did toy briefly with the idea of shareware, but I really think you'd
  333. be better off spending your hard earned money on a good globe or atlas.
  334.  
  335. ------------------------------------------------------------------------
  336. ACKNOWLEDGEMENTS
  337.  
  338. Although its internal design is entirely original, this program was
  339. inspired by another MWDBII map drawing program written by Steve Sampson
  340. and distributed by Public Software Library.
  341.  
  342. The MWDBII format and map data is code placed in the public domain
  343. by Fred Pospeschil and Antonio Riveria.  Original coordinate data
  344. was created by the Central Intelligence Agency.
  345.  
  346. Additional information about MWDBII format and map data may be obtained
  347. from Micro Doc, 3108 Jackson St., Bellevue, NE 68005.
  348.  
  349. The city locations were converted from files in GeoClock format.  I
  350. downloaded those files from a local BBS.
  351.  
  352. ------------------------------------------------------------------------
  353. APPENDIX: MWDBII
  354.  
  355. In MWDBII format, higher numbered detail levels imply a lower level
  356. of drawn detail.  This may be counter-intuitive, but a level 3 map
  357. database has more points in it than a level 5 map.
  358.  
  359. The level 3 database included in this distribution contains 26,160
  360. coordinates.  It is a subset of a map database distributed by Micro Doc.
  361. The complete level 1 database from Micro Doc contains 178,068 coordinates.
  362. Each database with a higher level number is a strict subset of the level 1
  363. database.
  364.  
  365. Micro Doc also distributes map data for US states and counties, as well
  366. as much more detailed world and US map data.  No claims are made regarding
  367. the suitability of Fastmap for high resolution maps -- it is likely to be
  368. too slow, and you may run out of memory.
  369.  
  370. For full MWDBII documentation, see the file MWDBII.DOC.
  371.  
  372. ------------------------------------------------------------------------
  373. APPENDIX: CITY AND USER FILE FORMAT
  374.  
  375. The user and city data files let you add data to be drawn on the map.
  376. If the file contains syntax errors, Fastmap displays an error message and
  377. stops.  The format of the file is comma delimited fields of:
  378.     "label", latitude, longitude, code, action  ; semicolon starts comments
  379.  
  380. Quotes cannot appear in a quoted label, but quotes are optional.  If the
  381. label is not quoted, the characters until the first comma are taken to
  382. be the label.
  383.  
  384. Latitude and longitude are integers specifying degrees in minutes
  385. (multiply degrees by 60 to get minutes).  Positive numbers are north
  386. and east, respectively.
  387.  
  388. The code specifies the kind of object at the latitude and longitude
  389. location.  The code values are:
  390.     1 for Coast lines             10 for Capital cities
  391.     2 for Country boundries       11 for State capitals
  392.     4 for State boundries         12 for Other cities
  393.     5 for Islands                 13 for User data 1
  394.     6 for Lakes                   14 for User data 2
  395.     7 for Rivers
  396.  
  397. The action specifies what to do at the location.  The possible actions
  398. are:
  399.     1 to draw a big marker
  400.     2 to draw a medium marker
  401.     3 to draw a small marker
  402.     4 to draw a tiny marker
  403.     5 to draw nothing
  404. Adding 64 to the action value draws a line from previous location to
  405. the current location.  That is, an action value of 66 draws a line with
  406. a big marker at each point, or an action of 69 just draws lines.
  407.  
  408. See CITY.DAT or EXAMPLE.DAT for examples.  You can see the contents
  409. of EXAMPLE.DAT by running:
  410.    fastmap example.dat
  411.  
  412. ------------------------------------------------------------------------
  413. APPENDIX: FASTMAP.INI FORMAT
  414.  
  415. This file allows you to customize the color for each object.  If there is
  416. any error in the initialization file, Fastmap displays an error message and
  417. stops.  The format is a sequence of lines:
  418.     object = color  ; semicolon starts comments
  419. The object and color may be in any combination of upper or lower case.
  420.  
  421. The objects and their default color settings are:
  422.     coastlines = white
  423.     borders = yellow
  424.     stateBorders = yellow
  425.     islands = white
  426.     lakes = lightBlue
  427.     rivers = cyan
  428.     capitals = red
  429.     stateCapitals = red
  430.     otherCities = red
  431.     userData1 = magenta
  432.     userData2 = green
  433.     grid = darkGray
  434.     uiBkgnd = lightGray    ; menu background
  435.     uiDark = darkGray      ; lower right of "raised" menu
  436.     uiLight = white        ; upper left of "raised" menu
  437.     uiText = black         ; menu text
  438.     uiGray = darkGray      ; menu "grayed" text
  439.     uiMark = red           ; marks
  440.  
  441. The allowed colors are:
  442.     black       blue       green     cyan
  443.     red         magenta    brown     yellow
  444.     white       lightGray  darkGray  lightBlue
  445.     lightGreen  lightCyan  lightRed  lightMagenta
  446.  
  447. See FASTMAP.INI for examples.
  448.  
  449. (end of fastmap.doc 5/92)
  450.  
  451.  
  452.  
  453.