osgb_convert 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -0
- data/Gemfile +4 -0
- data/README +44 -0
- data/Rakefile +2 -0
- data/lib/osgb_convert.rb +108 -0
- data/lib/osgb_convert/os_grid.rb +200 -0
- data/lib/osgb_convert/version.rb +3 -0
- data/osgb_convert.gemspec +19 -0
- metadata +70 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
Some UK Ordnance Survey coordinate conversions in pure Ruby.
|
2
|
+
|
3
|
+
WGS84 lat/lons -> OSGB36 lat/lons-> OS Eastings & Northings
|
4
|
+
|
5
|
+
A tidied-into-a-module-and-gem tweak of Harry Wood's port of Chris Veness'
|
6
|
+
http://www.movable-type.co.uk/scripts/latlong-convert-coords.html
|
7
|
+
|
8
|
+
|
9
|
+
Originally ported to Ruby by Harry Wood:
|
10
|
+
http://www.harrywood.co.uk/blog/2010/06/29/ruby-code-for-converting-to-uk-ordnance-survey-coordinate-systems-from-wgs84/
|
11
|
+
|
12
|
+
(c) Chris Veness 2005-2010, (c) Harry Wood 2010-2011
|
13
|
+
Teeny portions (c) Matt Patterson 2011
|
14
|
+
|
15
|
+
Released under an LGPL license
|
16
|
+
http://www.fsf.org/licensing/licenses/lgpl.html
|
17
|
+
|
18
|
+
|
19
|
+
Examples:
|
20
|
+
|
21
|
+
WGS84 lat/lon:
|
22
|
+
|
23
|
+
lon = -0.10322
|
24
|
+
lat = 51.52237
|
25
|
+
height = 0
|
26
|
+
|
27
|
+
wgs84_point = OsgbConvert::WGS84.new(lat, lon, height)
|
28
|
+
|
29
|
+
|
30
|
+
osgb36_point = wgs84_point.osgb36
|
31
|
+
|
32
|
+
osUKgridPoint = OsgbConvert::OSGrid.from_osgb36(osgb36_point)
|
33
|
+
# alternatively
|
34
|
+
osUKgridPoint = OsgbConvert::OSGrid.from_wgs84(wgs84_point)
|
35
|
+
easting = osUKgridPoint.easting
|
36
|
+
northing = osUKgridPoint.northing
|
37
|
+
|
38
|
+
gridrefLetters = osUKgridPoint.grid_ref(8) # 8 is also the default so osUKgridPoint.grid_ref would work just as well
|
39
|
+
|
40
|
+
puts "wgs84 lat: #{wgs84_point.lat}, wgs84 lon: #{wgs84_point.long}"
|
41
|
+
puts "http://www.openstreetmap.org/?mlat=#{wgs84_point.lat}&mlon=#{wgs84_point.long}&zoom=16"
|
42
|
+
puts "osgb36 lat: #{osgb36_point.lat}, osgb36 lon: #{osgb36_point.long}"
|
43
|
+
puts "easting: #{osUKgridPoint.easting}, northing: #{osUKgridPoint.northing}. As a grid ref: #{osUKgridPoint.grid_ref}"
|
44
|
+
puts "http://streetmap.co.uk/grid/#{osUKgridPoint.easting}_#{osUKgridPoint.northing}_106"
|
data/Rakefile
ADDED
data/lib/osgb_convert.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
module OsgbConvert
|
2
|
+
def self.degrees_to_rads(degrees)
|
3
|
+
degrees * Math::PI / 180
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.rads_to_degrees(rads)
|
7
|
+
rads * 180 / Math::PI
|
8
|
+
end
|
9
|
+
|
10
|
+
module Converter
|
11
|
+
#ellipse parameters
|
12
|
+
ELLIPSE = {
|
13
|
+
:wgs84 => { :a=> 6378137, :b=> 6356752.3142, :f=> 1 / 298.257223563 },
|
14
|
+
:airy1830 => { :a=> 6377563.396, :b=> 6356256.910, :f=> 1 / 299.3249646 }
|
15
|
+
}
|
16
|
+
|
17
|
+
#helmert transform parameters
|
18
|
+
HELMERT = {
|
19
|
+
:wgs84toOSGB36 => {
|
20
|
+
:tx=> -446.448, :ty=> 125.157, :tz=> -542.060, # m
|
21
|
+
:rx=> -0.1502, :ry=> -0.2470, :rz=> -0.8421, # sec
|
22
|
+
:s=> 20.4894 # ppm
|
23
|
+
},
|
24
|
+
:osgb36toWGS84 => {
|
25
|
+
:tx=> 446.448, :ty=> -125.157, :tz=> 542.060,
|
26
|
+
:rx=> 0.1502, :ry=> 0.2470, :rz=> 0.8421,
|
27
|
+
:s=> -20.4894
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
def convert(p1lat, p1lon, p1height, e1, t, e2)
|
32
|
+
# -- convert polar to cartesian coordinates (using ellipse 1)
|
33
|
+
|
34
|
+
p1lat = OsgbConvert.degrees_to_rads(p1lat); p1lon = OsgbConvert.degrees_to_rads(p1lon);
|
35
|
+
|
36
|
+
a = e1[:a]; b = e1[:b];
|
37
|
+
|
38
|
+
sinPhi = Math.sin(p1lat); cosPhi = Math.cos(p1lat);
|
39
|
+
sinLambda = Math.sin(p1lon); cosLambda = Math.cos(p1lon);
|
40
|
+
h = p1height;
|
41
|
+
|
42
|
+
eSq = (a*a - b*b) / (a*a);
|
43
|
+
nu = a / Math.sqrt(1 - eSq*sinPhi*sinPhi);
|
44
|
+
|
45
|
+
x1 = (nu+h) * cosPhi * cosLambda;
|
46
|
+
y1 = (nu+h) * cosPhi * sinLambda;
|
47
|
+
z1 = ((1-eSq)*nu + h) * sinPhi;
|
48
|
+
|
49
|
+
# -- apply helmert transform using appropriate params
|
50
|
+
|
51
|
+
tx = t[:tx]; ty = t[:ty]; tz = t[:tz];
|
52
|
+
rx = t[:rx] / 3600 * Math::PI/180; #normalise seconds to radians
|
53
|
+
ry = t[:ry] / 3600 * Math::PI/180;
|
54
|
+
rz = t[:rz] / 3600 * Math::PI/180;
|
55
|
+
s1 = t[:s] / 1e6 + 1; #normalise ppm to (s+1)
|
56
|
+
|
57
|
+
#apply transform
|
58
|
+
x2 = tx + x1*s1 - y1*rz + z1*ry;
|
59
|
+
y2 = ty + x1*rz + y1*s1 - z1*rx;
|
60
|
+
z2 = tz - x1*ry + y1*rx + z1*s1;
|
61
|
+
|
62
|
+
# -- convert cartesian to polar coordinates (using ellipse 2)
|
63
|
+
|
64
|
+
a = e2[:a]; b = e2[:b];
|
65
|
+
precision = 4 / a; # results accurate to around 4 metres
|
66
|
+
|
67
|
+
eSq = (a*a - b*b) / (a*a);
|
68
|
+
p = Math.sqrt(x2*x2 + y2*y2);
|
69
|
+
phi = Math.atan2(z2, p*(1-eSq)); phiP = 2 * Math::PI;
|
70
|
+
while ( (phi-phiP).abs > precision) do
|
71
|
+
nu = a / Math.sqrt(1 - eSq*Math.sin(phi)*Math.sin(phi));
|
72
|
+
phiP = phi;
|
73
|
+
phi = Math.atan2(z2 + eSq*nu*Math.sin(phi), p);
|
74
|
+
end
|
75
|
+
lambda = Math.atan2(y2, x2);
|
76
|
+
h = p/Math.cos(phi) - nu;
|
77
|
+
|
78
|
+
#return array [lat,lon,height]
|
79
|
+
return [ OsgbConvert.rads_to_degrees(phi), OsgbConvert.rads_to_degrees(lambda), h ];
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
class Coordinate
|
84
|
+
include Converter
|
85
|
+
|
86
|
+
attr_reader :lat, :long, :height
|
87
|
+
|
88
|
+
def initialize(lat, long, height)
|
89
|
+
@lat = lat
|
90
|
+
@long = long
|
91
|
+
@height = height
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
class WGS84 < Coordinate
|
96
|
+
def osgb36
|
97
|
+
OSGB36.new(*convert(lat, long, height, ELLIPSE[:wgs84], HELMERT[:wgs84toOSGB36], ELLIPSE[:airy1830]))
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class OSGB36 < Coordinate
|
102
|
+
def wgs84
|
103
|
+
WGS84.new(*convert(lat, long, height, ELLIPSE[:airy1830], HELMERT[:osgb36toWGS84], ELLIPSE[:wgs84]))
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
require 'osgb_convert/os_grid'
|
@@ -0,0 +1,200 @@
|
|
1
|
+
module OsgbConvert
|
2
|
+
class OSGrid
|
3
|
+
GRID_LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K',
|
4
|
+
'L', 'M', 'N', 'O', 'P', 'Q', 'S', 'T', 'U', 'V',
|
5
|
+
'W', 'X', 'Y', 'Z']
|
6
|
+
|
7
|
+
attr_reader :easting, :northing
|
8
|
+
|
9
|
+
def self.from_wgs84(wgs84)
|
10
|
+
from_osgb36(wgs84.osgb36)
|
11
|
+
end
|
12
|
+
|
13
|
+
# http://www.movable-type.co.uk/scripts/latlong-gridref.html
|
14
|
+
# (c) Chris Veness 2005-2010 Released under an LGPL license
|
15
|
+
# http://www.fsf.org/licensing/licenses/lgpl.html
|
16
|
+
# Ported to ruby by Harry Wood
|
17
|
+
|
18
|
+
# OSGB36 coordinates to OS UK grid eastings & northings
|
19
|
+
def self.from_osgb36(osgb36)
|
20
|
+
lat = OsgbConvert.degrees_to_rads(osgb36.lat);
|
21
|
+
lon = OsgbConvert.degrees_to_rads(osgb36.long);
|
22
|
+
|
23
|
+
a = 6377563.396; b = 6356256.910 # Airy 1830 major & minor semi-axes
|
24
|
+
f0 = 0.9996012717 # NatGrid scale factor on central meridian
|
25
|
+
lat0 = OsgbConvert.degrees_to_rads(49); lon0 = OsgbConvert.degrees_to_rads(-2) # NatGrid true origin
|
26
|
+
n0 = -100000; e0 = 400000; # northing & easting of true origin, metres
|
27
|
+
e2 = 1 - (b*b) / (a*a); # eccentricity squared
|
28
|
+
n = (a-b) / (a+b); n2 = n*n; n3 = n*n*n;
|
29
|
+
|
30
|
+
cos_lat = Math.cos(lat); sinLat = Math.sin(lat);
|
31
|
+
nu = a*f0/Math.sqrt(1-e2*sinLat*sinLat); # transverse radius of curvature
|
32
|
+
rho = a*f0*(1-e2) / ( (1-e2*sinLat*sinLat) ** 1.5); # meridional radius of curvature
|
33
|
+
eta2 = nu/rho-1;
|
34
|
+
|
35
|
+
ma = (1 + n + (5/4)*n2 + (5/4)*n3) * (lat-lat0);
|
36
|
+
mb = (3*n + 3*n*n + (21/8)*n3) * Math.sin(lat-lat0) * Math.cos(lat+lat0);
|
37
|
+
mc = ((15/8)*n2 + (15/8)*n3) * Math.sin(2*(lat-lat0)) * Math.cos(2*(lat+lat0));
|
38
|
+
md = (35/24)*n3 * Math.sin(3*(lat-lat0)) * Math.cos(3*(lat+lat0));
|
39
|
+
m = b * f0 * (ma - mb + mc - md) # meridional arc
|
40
|
+
|
41
|
+
cos3lat = cos_lat*cos_lat*cos_lat
|
42
|
+
cos5lat = cos3lat*cos_lat*cos_lat
|
43
|
+
tan2lat = Math.tan(lat)*Math.tan(lat);
|
44
|
+
tan4lat = tan2lat*tan2lat;
|
45
|
+
|
46
|
+
i = m + n0
|
47
|
+
ii = (nu/2)*sinLat*cos_lat;
|
48
|
+
iii = (nu/24)*sinLat*cos3lat*(5-tan2lat+9*eta2);
|
49
|
+
iiiA = (nu/720)*sinLat*cos5lat*(61-58*tan2lat+tan4lat);
|
50
|
+
iv = nu*cos_lat;
|
51
|
+
v = (nu/6)*cos3lat*(nu/rho-tan2lat);
|
52
|
+
vi = (nu/120) * cos5lat * (5 - 18*tan2lat + tan4lat + 14*eta2 - 58*tan2lat*eta2);
|
53
|
+
|
54
|
+
dLon = lon-lon0;
|
55
|
+
dLon2 = dLon*dLon
|
56
|
+
dLon3 = dLon2*dLon
|
57
|
+
dLon4 = dLon3*dLon
|
58
|
+
dLon5 = dLon4*dLon
|
59
|
+
dLon6 = dLon5*dLon
|
60
|
+
|
61
|
+
n = i + ii*dLon2 + iii*dLon4 + iiiA*dLon6;
|
62
|
+
e = e0 + iv*dLon + v*dLon3 + vi*dLon5;
|
63
|
+
|
64
|
+
new(e, n) # return new OSGrid instance using the raw easting and northings
|
65
|
+
end
|
66
|
+
|
67
|
+
# convert standard grid reference ('SU387148') to fully numeric ref ([438700,114800])
|
68
|
+
# returned co-ordinates are in metres, centred on grid square for conversion to lat/long
|
69
|
+
#
|
70
|
+
# note that northern-most grid squares will give 7-digit northings
|
71
|
+
# no error-checking is done on gridref (bad input will give bad results or NaN)
|
72
|
+
def self.from_standard_ref(grid_ref)
|
73
|
+
# get numeric values of letter references, mapping A->0, B->1, C->2, etc:
|
74
|
+
first_letter = GRID_LETTERS.index(grid_ref[0..0].upcase)
|
75
|
+
second_letter = GRID_LETTERS.index(grid_ref[1..1].upcase)
|
76
|
+
|
77
|
+
# convert grid letters into 100km-square indexes from false origin (grid square SV):
|
78
|
+
easting = ((first_letter - 2) % 5) * 5 + (second_letter % 5)
|
79
|
+
northing = (19 - (first_letter / 5).floor * 5) - (second_letter / 5).floor
|
80
|
+
|
81
|
+
# skip grid letters to get numeric part of ref, stripping any spaces:
|
82
|
+
numeric_ref = grid_ref[2..-1].gsub(/\s/, '')
|
83
|
+
|
84
|
+
# append numeric part of references to grid index:
|
85
|
+
easting += numeric_ref[0..(numeric_ref.length / 2)]
|
86
|
+
northing += numeric_ref[(numeric_ref.length / 2)..-1]
|
87
|
+
|
88
|
+
# normalise to 1m grid, rounding up to centre of grid square:
|
89
|
+
case numeric_ref.length
|
90
|
+
when 6
|
91
|
+
easting += '50'
|
92
|
+
northing += '50'
|
93
|
+
when 8
|
94
|
+
easting += '5'
|
95
|
+
northing += '5'
|
96
|
+
end
|
97
|
+
# 10-digit refs are already 1m
|
98
|
+
|
99
|
+
new(e, n)
|
100
|
+
end
|
101
|
+
|
102
|
+
def initialize(easting, northing)
|
103
|
+
@easting = easting
|
104
|
+
@northing = northing
|
105
|
+
end
|
106
|
+
|
107
|
+
#
|
108
|
+
# convert OS grid reference to geodesic co-ordinates
|
109
|
+
#
|
110
|
+
def osgb36
|
111
|
+
# Airy 1830 major & minor semi-axes
|
112
|
+
a = Converter::ELLIPSE[:airy1830][:a]
|
113
|
+
b = Converter::ELLIPSE[:airy1830][:b]
|
114
|
+
f0 = 0.9996012717; # NatGrid scale factor on central meridian
|
115
|
+
lat0 = 49 * Math::PI / 180 # NatGrid true origin
|
116
|
+
lon0 = -2 * Math::PI / 180
|
117
|
+
n0 = -100000 # northing of true origin, metres
|
118
|
+
e0 = 400000 # easting of true origin, metres
|
119
|
+
e2 = 1 - (b * b) / (a * a) # eccentricity squared
|
120
|
+
n = (a - b) / (a + b)
|
121
|
+
n2 = n * n
|
122
|
+
n3 = n * n * n
|
123
|
+
|
124
|
+
lat = lat0
|
125
|
+
m = 0
|
126
|
+
|
127
|
+
while (northing - n0 - m) >= 0.00001 # ie until < 0.01mm
|
128
|
+
lat = (northing - n0 - m) / (a * f0) + lat
|
129
|
+
|
130
|
+
ma = (1 + n + ((5 / 4) * n2) + ((5 / 4) * n3)) * (lat - lat0)
|
131
|
+
mb = (3 * n + 3 * n * n + (21 / 8) * n3) * Math.sin(lat - lat0) * Math.cos(lat + lat0)
|
132
|
+
mc = ((15 / 8) * n2 + (15 / 8) * n3) * Math.sin(2 * (lat - lat0)) * Math.cos(2 * (lat + lat0))
|
133
|
+
md = (35 / 24) * n3 * Math.sin(3 * (lat - lat0)) * Math.cos(3 * (lat + lat0))
|
134
|
+
m = b * f0 * (ma - mb + mc - md) # meridional arc
|
135
|
+
end
|
136
|
+
|
137
|
+
cos_lat = Math.cos(lat)
|
138
|
+
sin_lat = Math.sin(lat)
|
139
|
+
nu = a * f0 / Math.sqrt(1 - e2 * sin_lat * sin_lat) # transverse radius of curvature
|
140
|
+
rho = a * f0 * (1 - e2) / (1 - e2 * sin_lat * sin_lat) ** 1.5 # meridional radius of curvature
|
141
|
+
eta2 = nu / rho - 1
|
142
|
+
|
143
|
+
tan_lat = Math.tan(lat)
|
144
|
+
tan2lat = tan_lat*tan_lat
|
145
|
+
tan4lat = tan2lat*tan2lat
|
146
|
+
tan6lat = tan4lat*tan2lat
|
147
|
+
sec_lat = 1/cos_lat
|
148
|
+
nu3 = nu*nu*nu
|
149
|
+
nu5 = nu3*nu*nu
|
150
|
+
nu7 = nu5*nu*nu
|
151
|
+
vii = tan_lat/(2*rho*nu)
|
152
|
+
viii = tan_lat/(24*rho*nu3)*(5+3*tan2lat+eta2-9*tan2lat*eta2)
|
153
|
+
ix = tan_lat/(720*rho*nu5)*(61+90*tan2lat+45*tan4lat)
|
154
|
+
x = sec_lat/nu
|
155
|
+
xi = sec_lat/(6*nu3)*(nu/rho+2*tan2lat)
|
156
|
+
xii = sec_lat/(120*nu5)*(5+28*tan2lat+24*tan4lat)
|
157
|
+
xiia = sec_lat/(5040*nu7)*(61+662*tan2lat+1320*tan4lat+720*tan6lat)
|
158
|
+
|
159
|
+
dE = (easting - e0)
|
160
|
+
dE2 = dE*dE
|
161
|
+
dE3 = dE2*dE
|
162
|
+
dE4 = dE2*dE2
|
163
|
+
dE5 = dE3*dE2
|
164
|
+
dE6 = dE4*dE2
|
165
|
+
dE7 = dE5*dE2
|
166
|
+
lat = OsgbConvert.rads_to_degrees(lat - vii*dE2 + viii*dE4 - ix*dE6)
|
167
|
+
lon = OsgbConvert.rads_to_degrees(lon0 + x*dE - xi*dE3 + xii*dE5 - xiia*dE7)
|
168
|
+
|
169
|
+
OSGB36.new(lat, lon, 0)
|
170
|
+
end
|
171
|
+
|
172
|
+
def wgs84
|
173
|
+
osgb36.wgs84
|
174
|
+
end
|
175
|
+
|
176
|
+
# convert numeric grid reference (in metres) to standard-form grid ref
|
177
|
+
# [defaults to 8 digits (because this was in the example, not because I know better)]
|
178
|
+
def grid_ref(digits = 8)
|
179
|
+
return @grid_ref if @grid_ref
|
180
|
+
#get the 100km-grid indices
|
181
|
+
e100k = (easting / 100000).floor
|
182
|
+
n100k = (northing / 100000).floor
|
183
|
+
|
184
|
+
return '' if (e100k < 0 or e100k > 6 or n100k < 0 or n100k > 12)
|
185
|
+
|
186
|
+
#translate those into numeric equivalents of the grid letters
|
187
|
+
first_letter = (19 - n100k) - (19 - n100k) % 5 + ((e100k + 10) / 5).floor;
|
188
|
+
second_letter = (19 - n100k) * 5 % 25 + e100k % 5;
|
189
|
+
|
190
|
+
# letter - 1 to ensure we have 0-indexed the array and aren't off-by-one
|
191
|
+
grid_name = GRID_LETTERS[first_letter - 1] + GRID_LETTERS[second_letter - 1]
|
192
|
+
|
193
|
+
# strip 100km-grid indices from easting & northing, and reduce precision
|
194
|
+
reduced_precision_easting = ( (easting % 100000) / (10 ** (5 - digits / 2)) ).floor
|
195
|
+
reduced_precision_northing = ( (northing % 100000) / (10 ** (5 - digits / 2)) ).floor
|
196
|
+
|
197
|
+
@grid_ref = grid_name + reduced_precision_easting.to_s.rjust(digits / 2) + reduced_precision_northing.to_s.rjust(digits / 2)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "osgb_convert/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "osgb_convert"
|
7
|
+
s.version = OsgbConvert::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Matt Patterson"]
|
10
|
+
s.email = ["matt@reprocessed.org"]
|
11
|
+
s.homepage = "http://github.com/fidothe/osgb_convert"
|
12
|
+
s.summary = %q{Geo coordinate transformation between WGS84 (GPS) and OSGB36 (UK Ordnance Survey mapping)}
|
13
|
+
s.description = %q{Provides a simple interface to transform Geographic coordinates between WGS84 (GPS) and OSGB36 (UK Ordnance Survey mapping)}
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: osgb_convert
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Matt Patterson
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-02-03 00:00:00 +00:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Provides a simple interface to transform Geographic coordinates between WGS84 (GPS) and OSGB36 (UK Ordnance Survey mapping)
|
22
|
+
email:
|
23
|
+
- matt@reprocessed.org
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- .gitignore
|
32
|
+
- Gemfile
|
33
|
+
- README
|
34
|
+
- Rakefile
|
35
|
+
- lib/osgb_convert.rb
|
36
|
+
- lib/osgb_convert/os_grid.rb
|
37
|
+
- lib/osgb_convert/version.rb
|
38
|
+
- osgb_convert.gemspec
|
39
|
+
has_rdoc: true
|
40
|
+
homepage: http://github.com/fidothe/osgb_convert
|
41
|
+
licenses: []
|
42
|
+
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
segments:
|
53
|
+
- 0
|
54
|
+
version: "0"
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
requirements: []
|
63
|
+
|
64
|
+
rubyforge_project:
|
65
|
+
rubygems_version: 1.3.6
|
66
|
+
signing_key:
|
67
|
+
specification_version: 3
|
68
|
+
summary: Geo coordinate transformation between WGS84 (GPS) and OSGB36 (UK Ordnance Survey mapping)
|
69
|
+
test_files: []
|
70
|
+
|