lambert93_ruby 0.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5411da2feee96931bfd61c2067a1162dec075bca
4
+ data.tar.gz: 72447d8f4a917f95eef569b65c5e4d7e7aff10cd
5
+ SHA512:
6
+ metadata.gz: 1f3528beaa81795dbe82637f5c3cc04ea7ba309462f70127354e503dd4e97d29b17ad323b8786b588618f167a3a73ca55e9afb79520acec95ac81d3453832e6f
7
+ data.tar.gz: f5e9a31a6096a130fa1914841e1cea2a3540f4f741fc6d5965c14291a6f9dfd847557df5dafbe5fb696d0eb18669b44ec494b93ee0bffe517fd7ed22532c151c
@@ -0,0 +1,24 @@
1
+ # lambert93_ruby
2
+ Converts GPS coordinates into Lambert 93 coordinates
3
+
4
+ # Install
5
+ ```
6
+ # In your gemfile
7
+ gem "lambert93_ruby"
8
+ ```
9
+ And run
10
+ ```
11
+ bundle install
12
+ ```
13
+
14
+ # Usage
15
+ ```
16
+ require "lambert93_ruby"
17
+
18
+ lat = 44.884566 # gps_latitude
19
+ long = -0.2846110000000408 # gps_longitude
20
+
21
+ Lambert93Ruby::lambert_proj(lat, long)
22
+ ```
23
+
24
+ It will give you an array with lambert93 coordinates [x, y].
@@ -0,0 +1,11 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = %q{lambert93_ruby}
3
+ s.version = "0.0.0"
4
+ s.date = %q{2016-03-25}
5
+ s.platform = Gem::Platform::RUBY
6
+ s.summary = %q{Lambert93_ruby calculates lambert 93 coordinates from GPS coordinates.}
7
+ s.authors = ["Kulgar, Arpsara, CT2C"]
8
+ s.email = 'contact@ct2c.fr'
9
+ s.files = `git ls-files`.split("\n")
10
+ s.require_paths = ["lib"]
11
+ end
@@ -0,0 +1,78 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module Lambert93Ruby
3
+
4
+ def self.lambert_proj(lat, long)
5
+ if lat.nil? || long.nil?
6
+ return ['', '']
7
+ else
8
+ lat = deg_to_rad(lat.to_f)
9
+ long = deg_to_rad(long.to_f)
10
+ teta = n_lambert * (long - lambert_parameters[:lng_0])
11
+ rho_lat = rho(lat)
12
+ rho_lat_0 = rho(lambert_parameters[:lat_0])
13
+ x = lambert_parameters[:x_0] + rho_lat * Math.sin(teta)
14
+ y = lambert_parameters[:y_0] + rho_lat_0 - rho_lat * Math.cos(teta)
15
+ return [x, y]
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def self.lambert_parameters
22
+ return @lambert_parameters if @lambert_parameters
23
+ a = 6378137
24
+ f = 1.0 / 298.257222101
25
+ b = a * (1.0 - f)
26
+ e = Math.sqrt(a**2 - b**2) / a
27
+ @lambert_parameters = {
28
+ # Lambert 93 consMath.tants:
29
+ a: a,
30
+ f: f,
31
+ b: b,
32
+ e: e,
33
+ e_2: (e / 2),
34
+ lng_0: deg_to_rad(3),
35
+ lat_0: deg_to_rad(46.5), #deg_to_rad(52)
36
+ x_0: 700000,
37
+ y_0: 6600000,
38
+
39
+ phi_1: deg_to_rad(44), #deg_to_rad(45.89888888888889)
40
+ phi_2: deg_to_rad(49) #deg_to_rad(47.69583333333333)
41
+ }
42
+ end
43
+
44
+ def self.deg_to_rad(deg)
45
+ deg * Math::PI / 180.0
46
+ end
47
+
48
+ def self.rho(phi)
49
+ first_part = 1.0 / Math.tan( phi / 2.0 + Math::PI / 4.0 )
50
+ second_part = ( ( 1 + lambert_parameters[:e] * Math.sin(phi) ) / ( 1 - lambert_parameters[:e] * Math.sin(phi) ) )**lambert_parameters[:e_2]
51
+ rho_phi = rho_0 * ( first_part * second_part )**n_lambert
52
+ return rho_phi
53
+ end
54
+
55
+ def self.n_lambert
56
+ return @n_lambert if @n_lambert
57
+ n_numerator = Math.log(Math.cos(lambert_parameters[:phi_2]) / Math.cos(lambert_parameters[:phi_1])) + 0.5 * Math.log( (1.0 - (lambert_parameters[:e] * Math.sin(lambert_parameters[:phi_1]))**2.0 ) / (1.0 - (lambert_parameters[:e] * Math.sin(lambert_parameters[:phi_2]))**2.0 ) )
58
+
59
+ n_denominator_numerator = Math.tan(lambert_parameters[:phi_1] / 2.0 + Math::PI / 4.0) * (1.0 - lambert_parameters[:e] * Math.sin(lambert_parameters[:phi_1]))**lambert_parameters[:e_2] * (1.0 + lambert_parameters[:e] * Math.sin(lambert_parameters[:phi_2]))**lambert_parameters[:e_2]
60
+ n_denominator_denominator = Math.tan(lambert_parameters[:phi_2] / 2.0 + Math::PI / 4.0) * (1.0 + lambert_parameters[:e] * Math.sin(lambert_parameters[:phi_1]))**lambert_parameters[:e_2] * (1.0 - lambert_parameters[:e] * Math.sin(lambert_parameters[:phi_2]))**lambert_parameters[:e_2]
61
+
62
+ n_denominator = Math.log(n_denominator_numerator / n_denominator_denominator)
63
+
64
+ @n_lambert = n_numerator / n_denominator
65
+
66
+ return @n_lambert
67
+ end
68
+
69
+ def self.rho_0
70
+ return @rho_0 if @rho_0
71
+ rho_0_part_1 = (lambert_parameters[:a] * Math.cos(lambert_parameters[:phi_1])) / (n_lambert * Math.sqrt(1.0 - (lambert_parameters[:e] * Math.sin(lambert_parameters[:phi_1]))**2.0 ))
72
+ rho_0_part_2 = (Math.tan(lambert_parameters[:phi_1] / 2.0 + Math::PI / 4.0) * ((1.0 - lambert_parameters[:e] * Math.sin(lambert_parameters[:phi_1])) / (1.0 + lambert_parameters[:e] * Math.sin(lambert_parameters[:phi_1])) )**lambert_parameters[:e_2] )**n_lambert
73
+
74
+ @rho_0 = rho_0_part_1 * rho_0_part_2
75
+
76
+ return @rho_0
77
+ end
78
+ end
@@ -0,0 +1,33 @@
1
+ class Lambert93RubyTest < Test::Unit::TestCase
2
+ require "lambert93_ruby"
3
+
4
+ def test_lambert_proj
5
+ arveyres = Lambert93Ruby::lambert_proj(45.7156058, 4.85958679999999)
6
+ assert_equal [844649.3015913883, 6514595.073166063], arveyres
7
+
8
+ pusignan = Lambert93Ruby::lambert_proj(45.757652, 5.0701733)
9
+ assert_equal [860903.96, 6519670.35], pusignan.map{|i| i.round(2)}
10
+
11
+ ## Ile de France
12
+ beaumont_sur_oise = Lambert93Ruby::lambert_proj(49.1415510, 2.2846010 )
13
+ assert_equal [647796.31706025, 6893766.105254374], beaumont_sur_oise
14
+
15
+ chateau_landon = Lambert93Ruby::lambert_proj(48.150232, 2.7044260)
16
+ assert_equal [678018.7566706568, 6783359.741741321], chateau_landon
17
+
18
+ provins = Lambert93Ruby::lambert_proj( 48.5601490, 3.2992030)
19
+ assert_equal [722078.4810329215, 6828922.492311118], provins
20
+
21
+ rambouillet = Lambert93Ruby::lambert_proj(48.6438680, 1.8290789)
22
+ assert_equal [613737.5587523837, 6838827.35755566], rambouillet
23
+
24
+ calais = Lambert93Ruby::lambert_proj(50.95129000000001, 1.8586860000000343)
25
+ assert_equal [619630.8725958228, 7095614.832194619], calais
26
+
27
+ nice = Lambert93Ruby::lambert_proj(43.7101728, 7.261953199999994)
28
+ assert_equal [1043406.5555545087, 6299396.821049856], nice
29
+
30
+ andorre = Lambert93Ruby::lambert_proj( 42.506285, 1.5218009999999822)
31
+ assert_equal [578337.7238319971, 6157413.046731045], andorre
32
+ end
33
+ end
@@ -0,0 +1,9 @@
1
+ base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
2
+ lib_dir = File.join(base_dir, "lib")
3
+ test_dir = File.join(base_dir, "test")
4
+
5
+ $LOAD_PATH.unshift(lib_dir)
6
+
7
+ require 'test/unit'
8
+
9
+ exit Test::Unit::AutoRunner.run(true, test_dir)
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lambert93_ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Kulgar, Arpsara, CT2C
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email: contact@ct2c.fr
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - README.md
20
+ - lambert93_ruby.gemspec
21
+ - lib/lambert93_ruby.rb
22
+ - test/lib/lambert93_ruby_test.rb
23
+ - test/run_test.rb
24
+ homepage:
25
+ licenses: []
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.4.8
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Lambert93_ruby calculates lambert 93 coordinates from GPS coordinates.
47
+ test_files: []