| Old Hampshire Mapped
|
|
| OLDMAPS.exe
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!
HANTSMAP
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.
|
Source Data
|
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:-
OLDMAPS NRD1
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.
|
Scaling Factor
|
A scaling factor may be given as parameter 2 on the
command line, eg:-
OLDMAPS HAR1 0.855
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))/
sqrt(sqr(x(n)-xbar)+sqr(y(n)-ybar))
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.
xytoEN
if (x-xbar)=0.0 then angle := pi/2
else angle := arctan((y-ybar)/(x-xbar));
angle := angle+heading;
if (x
ENtoxy
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:-
[Map]NGR.txt
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.
|
Examples 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
NRD1NGR.txt
Map norden1
Data file: NRD1PTS.txt
Output file: NRD1NGR.txt
OLDMAPS
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
|