Old Hampshire Mapped


Superimposing the National Grid
software OLDMAPS.exe has developed through 7 versions, and has never been seen as anything but a behind-the-scenes tool. At various times the map measurements have been made:- from the map usually in cm from a bottom left corner; or from one or other of the map images, working in 100s of pixels, and most recently in pixels, from the top left corner of the image. Sorry: this is not as tidy as it should be; but the results are OK!

file: OLDMAPS.rul                                MN: 7.6.1996
                                         last edit  9.10.2001

OLDMAPS.exe NOTES        version 7.1
                         cm or pixels
These notes explain the background to OLDMAPS.exe software which carries out a number of calculations to do with coordinate systems on old maps. The source code is OLDMAPS.pas written in Turbo Pascal 7. This software is home-built, pretty untested, and available from the author for your use at your own risk.

NOTE: comma delimited data output from this procedure, described below, is available in files [Map]PTS.cdf and [Map]GEN.cdf which are in the map makers directory within the map project directory.
Why An old map will not usually have any grid on it to facilitate listing placenames in an index. It is not helpful just to say 'Odgath is shown on the Norden map of Hampshire', it would be more useful to indicate where to find this name amongst all the others. You need an index, ie you need a grid. You could just impose a grid, an arbitrary grid of squares labelled along bottom and left edges of the map sheet, by which to refer to areas on the map. A more interesting approach, fraught with problems but potentially more rewarding, is to impose the national grid onto the map sheet. The problems? the old map's projection will not conform to the ngr, the old projection may be full of errors anyway, and the plotted position of features may not be very accurately positioned. So what; if you need a grid you may as well use a familiar one, and admit and warn of the limitations of its use in the circumstances.

In the first version of OLDMAPS.exe measurements on the old map were made in centimetres; and 6 figure grid references complete with prefix letters were expected for ngr positions.

As all measurements and calculations are relative, not absolute, it makes little difference what units are used. The latest uses of this software have had measurements made on a scanned image of the map, in pixels. To prevent size overuns in the software the meaurements were expressed in 100s of pixels, AND the 'y' measurement made in pixels being from the top of the image, it is subtracted from the map height (pixels) to give a northing value. For example:-
if map height 3065 pixels then
position reading in pixels 2481,1126
becomes position entered 2481,1939
If this appears to be a 'cobble' it is because I cannot be fussed to rewrite and debug the software which works nicely, thank you.

OLDMAPS runs without user interference, reading data from a file which must be declared as command line parameter. For example:-
reads from NRD1PTS.txt, and outputs to NRD1NGR.txt, NRD1PTS.cdf, NRD1GEN.cdf and NRD1.mcr.

The format of the data file is a simple ascii text of tagged data. There are four sorts of line:-
@t map identifier
@pl placename @ngr NGR @xy (x,y)
@w width @h height
@sc scaleline length @m miles
For example see NRD1PTS.txt. Multiple placename lines are expected, up to 50(?); the program will fail with too few points! Several scalelines may be entered, up to 5.

A scaling factor may be given as parameter 2 on the command line, eg:-
The scale factor will only be used to repeat the grid lines output, see below.

CALCULATIONS There is usually no reference position on an old map; the map is located by the measuring its positions of individual features, the towns and other settlements, for example. The plotting of these is not too certain. The declared scale, if there is one, will not be very reliable, if for no other reason because standards of measurement were not so very fine. The following strategy was tried as a way of locating an old map in 'ngr space':-

Locate Using the bottom left corner of the old map sheet as origin, measure (x,y) coordinates for a couple of dozen towns or settlements that are recognizable today. It is better to use towns that are not too large, small market towns are ideal. These are more easily located on old and new maps.

From a modern map using the national grid, read the ngr of each of the places, using the position of the parish church as the reference point for the town, rather than a centre ngr; this is more likely to be the focus of the old map's plotted position. Convert to a purely numerical (E,N) coordinate pair.

Find the centroid of the (x,y) pairs, and the centroid of the (E,N) pairs, and declare these to be at the same place, but on different scales; ie:-

      xbar = sum of x(n)/no of towns
      ybar = sum of y(n)/no of towns

      Ebar = sum of E(n)/no of towns
      Nbar = sum of N(n)/no of towns
The map is now centred with its centroid over the equivalent centroid of the reference towns in ngr space.

Scale For each town calculate its distance from the centroid in map space, the (x,y) coordinates, and in ngr space, the (E,N) coordinates, and compare these to get the scale to convert one to the other:-

     scale(n) = sqrt(sqr(E(n)-Ebar)+sqr(N(n)-Nbar))/
and average the scales:-

     scale = sum of scale(n)/no of towns
NB during this procedure you may wish to discount a town where the distance from the centroid is so small that errors become too significant, and gives unreliable or divide-by-zero results. (In Hampshire it means you do not use Winchester.)

Rotate Calculate a heading for each town from the centroid, in both map space and ngr space:-

     xyheading(n) := arctan((y(n)-ybar)/(x(n)-xbar));
     protect against division by zero and
     correct the answer by +pi if x(n)
Compare the average of both the sets of headings, weighted by the distance of the place from the centroid.

     mapheading := sum(distance(n) * (ngrheading(n) 
     - xyheading(n)) / sum(distance(n))
A positive value means the map north is W of NGR north; and vice versa.

The map is now facing the right way.

xy to EN, EN to xy Conversions Conversions between the two coordinate systems are now possible.


  if (x-xbar)=0.0 then angle := pi/2
  else angle := arctan((y-ybar)/(x-xbar));
  angle := angle+heading;
  if (x

  if (E-Ebar)=0.0 then angle := pi/2
  else angle := arctan((N-Nbar)/(E-Ebar));
  if (E
Its all a bit sixth form trigonometry, confusing!

Corners The bottom left sheet corner is at (0,0) in (x,y) space. Its position, and the positions of the other sheet corners, can be calculated in ngr space.

Grid lines The position in (x,y) space of ngr grid lines for particular eastings and northings can be calculated. This is a little more involved. If you want to know more consult the program source code, the arithmetic is fun. The intersection of NGR grid lines on the old map sheet edges are reported by the program so that you can mark the grid on the old map. Do this on a copy please! if you use a copy to do the measuring it is safer for the old map, and the grid can be drawn on the copy without worrying about it being the right size ...

If a scaling factor is given on the command line as parameter 2 this is used to repeat the grid lines exercise scaled for a copy of the map at a different scale. This might be more convenient - working on a copy fitted to A3 sheet for photocopying for instance.

Scale line The crudest estimate of the scale of the old map is to believe what its cartographer said, use the scale line printed on the map. The scale line, there might be more than one, is usually marked in miles; measure a number of miles in cm, and:-

     scale = [no of miles]*63360*2.54/[length cm]
This may be calculated for several scale lines.

BUT: this calculation is faulty; it assumes that the map maker used the modern statute mile which may not have been formalised at the time. The old english mile was not the same as todays; for example various researchers have shown that Saxton's mile was about 1 1/4 statute miles.
OUTPUT The program reports to screen as it goes.

Output of data is made to an ascii text file:-
Output of some of the data is made to a pair of .cdf files suitable to load into tables for a relational database.
[Map]PTS.cdf [Map]GEN.cdf
The Points table has columns:-
MapCode / Map / Town / trueNGR / mapNGR
MapCode 4 character map code used in the HantsMap project, eg:- NRD1
Map the map's name; in HantsMap this is the maker name and date pair, eg:- Norden 1607
Town town name
trueNGR town coordinates in OS ngr system
mapNGR town position in ngr space applied to the map
The General table has columns:-
MapCode / Scale 1 to / Rotation / scale line(s) 1 / / / /
MapCode as above; this is the link data for the two tables
Scale map's scale derived from the sample of towns
Rotation how much the map ws rotated to fit the applied ngr grid
scale(s) map scale as declared by its scale line, or up to 5 scale lines
Output is also made to an .mcr file which is a DOS AutoSketch macro file. Loading and running this in AutoSketch will produce a sketch map which can be used as a visual check on the calculations, just to look at and be convinced nothing stupid has happened. The sketch map has little other use.

using cm

file: NRD1PTS.txt

reference points for map NORDEN1
to work in OLDHANTS.exe

@t Norden 1607

@pl Alton @ngr SU717396 @xy (24.15,21.11)
@pl Basingstoke @ngr SU634527 @xy (21.38,24.20)
@pl Winchester @ngr SU478293 @xy (16.06,15.49)
@pl Andover @ngr SU365458 @xy (12.55,20.40)
@pl Lymington @ngr SZ322954 @xy (12.28,4.00)
@pl Romsey @ngr SU351212 @xy (13.30,12.60)
@pl Fareham @ngr SU575061 @xy (20.88,8.89)
@pl Stockbridge @ngr SU355351 @xy (12.57,16.84)
@pl Petersfield @ngr SU744235 @xy (24.90,13.58)
@pl Havant @ngr SU717062 @xy (24.90,8.97)
@pl Odiham @ngr SU740509 @xy (23.66,24.41)
@pl Christchurch @ngr SZ159925 @xy (7.11,1.37)
@pl Kingsclere @ngr SU525586 @xy (17.56,25.60)
@pl Overton @ngr SU514500 @xy (16.96,22.95)
@pl Fordingbridge @ngr SU150145 @xy (7.19,8.87)
@pl Titchfield @ngr SU541058 @xy (19.30,8.13)
@pl Hambledon @ngr SU646151 @xy (21.94,12.36)
@pl Grately @ngr SU275420 @xy (8.62,18.29)
@pl Nether Wallop @ngr SU304364 @xy (9.59,16.86)
@pl Buriton @ngr SU740200 @xy (24.80,14.21)
@pl Hawkley @ngr SU746291 @xy (25.19,17.74)
@pl Burghclere @ngr SU469610 @xy (15.30,25.46)

@w 32.10 @h 29.28

@sc 6.61 @m 10


Map norden1

  Data file: NRD1PTS.txt
Output file: NRD1NGR.txt


Plotting a NGR grid on an old map
version 7.2
MN: 30.8.1999

Given points

 no  place                    ngr         (x,y)

  1  Alton                    SU717396    (   24.15,   21.11)
  2  Basingstoke              SU634527    (   21.38,   24.20)
  3  Winchester               SU478293    (   16.06,   15.49)
  4  Andover                  SU365458    (   12.55,   20.40)
  5  Lymington                SZ322954    (   12.28,    4.00)
  6  Romsey                   SU351212    (   13.30,   12.60)
  7  Fareham                  SU575061    (   20.88,    8.89)
  8  Stockbridge              SU355351    (   12.57,   16.84)
  9  Petersfield              SU744235    (   24.90,   13.58)
 10  Havant                   SU717062    (   24.90,    8.97)
 11  Odiham                   SU740509    (   23.66,   24.41)
 12  Christchurch             SZ159925    (    7.11,    1.37)
 13  Kingsclere               SU525586    (   17.56,   25.60)
 14  Overton                  SU514500    (   16.96,   22.95)
 15  Fordingbridge            SU150145    (    7.19,    8.87)
 16  Titchfield               SU541058    (   19.30,    8.13)
 17  Hambledon                SU646151    (   21.94,   12.36)
 18  Grately                  SU275420    (    8.62,   18.29)
 19  Nether Wallop            SU304364    (    9.59,   16.86)
 20  Buriton                  SU740200    (   24.80,   14.21)
 21  Hawkley                  SU746291    (   25.19,   17.74)
 22  Burghclere               SU469610    (   15.30,   25.46)
number of points = 22

Centroids of points

(x,y) centroid is  (   17.28,   15.56)
  NGR centroid is  SU503286
    numerical ngr  450.30 128.67

Map scale

scale =     2.72
scale =     2.86
scale =     3.25
scale =     3.01
scale =     3.41
scale =     3.13
scale =     3.31
scale =     3.13
scale =     3.08
scale =     2.98
scale =     2.86
scale =     3.14
scale =     3.01
scale =     3.49
scale =     2.91
scale =     2.74
scale =     3.30
scale =     2.96
scale =     3.22

map scale  1 to   307928
or         1 to   307000

Map heading

Map heading
NGR north on map is -8.2 degrees W of map north

Check points

 no  place                    ngr         map

  1  Alton                    SU717396    SU736425
  2  Basingstoke              SU634527    SU666531
  3  Winchester               SU478293    SU465289
  4  Andover                  SU365458    SU380455
  5  Lymington                SZ322954    SZ299956
  6  Romsey                   SU351212    SU368214
  7  Fareham                  SU575061    SU583067
  8  Stockbridge              SU355351    SU365346
  9  Petersfield              SU744235    SU726192
 10  Havant                   SU717062    SU706052
 11  Odiham                   SU740509    SU736528
 12  Christchurch             SZ159925    SZ130899
 13  Kingsclere               SU525586    SU555591
 14  Overton                  SU514500    SU525513
 15  Fordingbridge            SU150145    SU166127
 16  Titchfield               SU541058    SU531051
 17  Hambledon                SU646151    SU630168
 18  Grately                  SU275420    SU251408
 19  Nether Wallop            SU304364    SU274360
 20  Buriton                  SU740200    SU726212
 21  Hawkley                  SU746291    SU753318
 22  Burghclere               SU469610    SU486597

Map sheet corners

 bottom left SY907888
    top left SU036781
   top right TQ015639
bottom right SZ886747

Grid lines

x positions on bottom and top edges,
y positions on left and right edges,
by which to draw lines on map

easting grid lines

Eing      bottom edge    top edge

 400          3.03          -1.21
 410          6.31           2.07
 420          9.59           5.35
 430         12.87           8.63
 440         16.15          11.92
 450         19.43          15.20
 460         22.71          18.48
 470         26.00          21.76
 480         29.28          25.04
 490         32.56          28.32
 500         35.84          31.60
 510         39.12          34.88

northing grid lines

Ning      left edge      right edge
  80         -2.91           1.73
  90          0.37           5.01
 100          3.65           8.30
 110          6.93          11.58
 120         10.21          14.86
 130         13.50          18.14
 140         16.78          21.42
 150         20.06          24.70
 160         23.34          27.98
 170         26.62          31.27
 180         29.90          34.55

Scale line

scale line length     6.61 cm
representing   10 miles
scale 1 to   243471

General index

Old Hampshire Mapped