lambert93_ruby 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []