lambert93_ruby 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +24 -0
- data/lambert93_ruby.gemspec +11 -0
- data/lib/lambert93_ruby.rb +78 -0
- data/test/lib/lambert93_ruby_test.rb +33 -0
- data/test/run_test.rb +9 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -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
|
data/README.md
ADDED
@@ -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
|
data/test/run_test.rb
ADDED
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: []
|