os_map_ref 0.1.1 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3e2b921bf19f2d0da1e4137e3d99405406c3b0bd
4
- data.tar.gz: 3ab34f8c15a09653a0fe9832c6d2582f12fba8ac
3
+ metadata.gz: 63ae3fcaaf973eec7b4724150197b0ab202538be
4
+ data.tar.gz: 08a5ebe1a235a599ea73648a2b0a8718134f3b7b
5
5
  SHA512:
6
- metadata.gz: 5aa6dadbd16152dc75dbadf0bb18fba8861c884687e1562912316279355fd06bb9f789ce3c1ce5b3a4d2efa2d77c57177b90803a0c41dd8d7a67b239c9338e3f
7
- data.tar.gz: c87a6547421f334dc30ca1f71b271043773139fcff45a38924426b57424d476261f8c7f1eb027965b1d7c07d7c9553ff0106f55690b6c59b9d501c0cbb930515
6
+ metadata.gz: de6195a4927e318ebc2c00cf8c61677ee3a9d144cbbf1cd3a76ce80920e5768ff4a2810272d979917e90a39841f2866d4e55dbcc360c65513231be3b93b4b322
7
+ data.tar.gz: e21af0b63498777aa48e6ec7b2e6ab6dc1ac5dc6ece9f94b9eb9c3e7fc397f2fb8e409adf3a219fdbb52be4441a7a7fa6a25e29c83c7280a267accf733d826f2
data/README.md CHANGED
@@ -41,15 +41,59 @@ location.northing == 171043
41
41
  location.map_reference == 'ST 58801 71043'
42
42
  ```
43
43
 
44
+ ### From OS Map Reference to Longitude and Latitude
45
+
46
+ If your end result needs to be longitude and latitude, you can combine the
47
+ OsMapRef output with that of another gem:
48
+ [global_convert](https://github.com/reggieb/global_convert)
49
+
50
+ For example
51
+
52
+ ```ruby
53
+ require 'global_convert'
54
+ require 'os_map_ref'
55
+
56
+ os_location = OsMapRef::Location.for 'ST 58801 71043'
57
+
58
+ location = GlobalConvert::Location.new(
59
+ input: {
60
+ projection: :osgb36,
61
+ lon: os_location.easting,
62
+ lat: os_location.northing
63
+ },
64
+ output: {
65
+ projection: :wgs84
66
+ }
67
+ )
68
+
69
+ puts "Latitude = #{location.lat} in radians."
70
+ puts "Longitude = #{location.lon} in radians."
71
+ ```
72
+
44
73
  ## Development
45
74
 
46
- After checking out the repo, run `bin/setup` to install dependencies.
47
- Then, run `rake test` to run the tests. You can also run `bin/console`
75
+ After checking out the repo, run `bin/setup` to install dependencies.
76
+ Then, run `rake test` to run the tests. You can also run `bin/console`
48
77
  for an interactive prompt that will allow you to experiment.
49
78
 
50
- To install this gem onto your local machine, run `bundle exec rake install`.
79
+ To install this gem onto your local machine, run `bundle exec rake install`.
51
80
 
52
81
  ## Contributing
53
82
 
54
83
  Bug reports and pull requests are welcome on GitHub at https://github.com/reggieb/os_map_ref.
55
84
 
85
+ ## License
86
+
87
+ THIS INFORMATION IS LICENSED UNDER THE CONDITIONS OF THE OPEN GOVERNMENT LICENCE found at:
88
+
89
+ http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3
90
+
91
+ The following attribution statement MUST be cited in your products and applications when using this information.
92
+
93
+ > Contains public sector information licensed under the Open Government license v3
94
+
95
+ ### About the license
96
+
97
+ The Open Government Licence (OGL) was developed by the Controller of Her Majesty's Stationery Office (HMSO) to enable information providers in the public sector to license the use and re-use of their information under a common open licence.
98
+
99
+ It is designed to encourage use and re-use of information freely and flexibly, with only a few conditions.
data/Rakefile CHANGED
@@ -7,4 +7,6 @@ Rake::TestTask.new(:test) do |t|
7
7
  t.test_files = FileList['test/**/*_test.rb']
8
8
  end
9
9
 
10
- task :default => :spec
10
+ task :spec => :test
11
+
12
+ task :default => :test
@@ -1,92 +1,92 @@
1
1
  require 'matrix'
2
2
  module OsMapRef
3
3
  class Location
4
-
4
+
5
5
  def self.for(text)
6
6
  input_processor = InputProcessor.new(text)
7
7
  new input_processor.params
8
8
  end
9
-
9
+
10
10
  def initialize(args={})
11
11
  @map_reference = args[:map_reference].freeze if args[:map_reference]
12
12
  @easting = args[:easting].to_i if args[:easting]
13
13
  @northing = args[:northing].to_i if args[:northing]
14
14
  end
15
-
15
+
16
16
  def map_reference
17
17
  @map_reference ||= build_map_reference.freeze
18
18
  end
19
-
19
+
20
20
  def build_map_reference
21
21
  [grid_reference_prefix, short_easting, short_northing].join(' ')
22
22
  end
23
-
23
+
24
24
  def grid_easting
25
25
  easting.to_s[0].to_i
26
26
  end
27
-
27
+
28
28
  def short_easting
29
29
  easting.to_s[1..-1].to_i
30
30
  end
31
-
31
+
32
32
  def long_northing?
33
33
  northing.to_s.length >= 7
34
34
  end
35
-
35
+
36
36
  def grid_northing
37
37
  northing.to_s[0..(chars_in_northing_start - 1)].to_i
38
38
  end
39
-
39
+
40
40
  def short_northing
41
41
  northing.to_s[chars_in_northing_start..-1].to_i
42
42
  end
43
-
43
+
44
44
  def chars_in_northing_start
45
45
  long_northing? ? 2 : 1
46
46
  end
47
-
47
+
48
48
  def grid_reference_prefix
49
49
  grid[grid_northing][grid_easting]
50
50
  end
51
-
51
+
52
52
  def easting
53
53
  @easting ||= easting_from_map_reference.to_i
54
54
  end
55
-
55
+
56
56
  def northing
57
57
  @northing ||= northing_from_map_reference.to_i
58
- end
59
-
58
+ end
59
+
60
60
  def northing_from_map_reference
61
61
  northing_easting_from_map_reference[0].to_s + map_reference_parts[2]
62
62
  end
63
-
63
+
64
64
  def easting_from_map_reference
65
65
  northing_easting_from_map_reference[1].to_s + map_reference_parts[1]
66
66
  end
67
-
67
+
68
68
  # The parts should be a pair of letters then two sets of numbers
69
- # 'ST 58901 71053' becomes ['ST', '58901', '71053']
69
+ # 'ST 58901 71053' becomes ['ST', '58901', '71053']
70
70
  def map_reference_parts
71
71
  @map_reference_parts ||= map_reference.split
72
72
  end
73
-
73
+
74
74
  # Returns array of [grid_northing, grid_easting] for the gird element
75
75
  # matching the map reference start. So 'ST 58901 71053' will return [1, 3]
76
76
  def northing_easting_from_map_reference
77
77
  @northing_easting_from_map_reference ||= matrix.index map_reference_parts[0]
78
78
  end
79
-
79
+
80
80
  def matrix
81
81
  @matrix ||= Matrix[*grid]
82
82
  end
83
-
83
+
84
84
  # Grid of 100km squares as they are arranged over the UK.
85
- # The grid is reversed so that the origin (0,0) is the
85
+ # The grid is reversed so that the origin (0,0) is the
86
86
  # bottom left corner ('SV').
87
87
  def grid
88
88
  @grid ||= [
89
- %w[HL HM HN HO HP JL JM JH JO JP],
89
+ %w[HL HM HN HO HP JL JM JN JO JP],
90
90
  %w[HQ HR HS HT HU JQ JR JS JT JU],
91
91
  %w[HV HW HX HY HZ JV JW JX JY JZ],
92
92
  %w[NA NB NC ND NE OA OB OC OD OE],
@@ -1,3 +1,3 @@
1
1
  module OsMapRef
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: os_map_ref
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Nichols
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-24 00:00:00.000000000 Z
11
+ date: 2016-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler