geoprojection 0.1.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 +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +6 -0
- data/.ruby-version +1 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +77 -0
- data/Makefile +5 -0
- data/README.md +32 -0
- data/Rakefile +8 -0
- data/lib/geoprojection/ellipse.rb +51 -0
- data/lib/geoprojection/version.rb +5 -0
- data/lib/geoprojection.rb +8 -0
- data/sig/geoprojection.rbs +4 -0
- metadata +58 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b21a5ce188fe4283f22a8ffeae14392942981c101d010f5ae9e9d0f0a67d410e
|
4
|
+
data.tar.gz: 76ac0d07a358785a9505cbcfe4830181b6fe4d7a3b3d923ccf512b13ea906dae
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9979de234b5ac3661a96561a5e9b836b11351e82d60dd1aece15726a06a1235537324f9baaca026412d7c03712bae235b0ff50951bb0565897e45b717d55f6e1
|
7
|
+
data.tar.gz: 3f572c2025e219ceddb69f6b41e5a87ea84b71ed1ea8a23b3f7c4ab5848a812338af1ee2a34bf3e4b89402bbc3541a6db4461da28002d570bb1b6a44a4e3aea4
|
data/.rspec
ADDED
data/.rubocop.yml
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.6.9
|
data/Gemfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
# Specify your gem's dependencies in geoprojection.gemspec
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
gem 'rake', '~> 13.0'
|
9
|
+
|
10
|
+
gem 'devpack', '~> 0.4.0'
|
11
|
+
gem 'gnuplot', '~> 2.6'
|
12
|
+
gem 'rspec', '~> 3.0'
|
13
|
+
gem 'rspec-its', '~> 1.3'
|
14
|
+
gem 'rubocop', '~> 1.28'
|
15
|
+
gem 'rubocop-rake', '~> 0.6.0'
|
16
|
+
gem 'rubocop-rspec', '~> 2.10'
|
17
|
+
gem 'strong_versions', '~> 0.4.5'
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
geoprojection (0.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
ast (2.4.2)
|
10
|
+
concurrent-ruby (1.1.10)
|
11
|
+
devpack (0.4.0)
|
12
|
+
diff-lcs (1.5.0)
|
13
|
+
gnuplot (2.6.2)
|
14
|
+
i18n (1.10.0)
|
15
|
+
concurrent-ruby (~> 1.0)
|
16
|
+
paint (2.2.1)
|
17
|
+
parallel (1.22.1)
|
18
|
+
parser (3.1.2.0)
|
19
|
+
ast (~> 2.4.1)
|
20
|
+
rainbow (3.1.1)
|
21
|
+
rake (13.0.6)
|
22
|
+
regexp_parser (2.3.1)
|
23
|
+
rexml (3.2.5)
|
24
|
+
rspec (3.11.0)
|
25
|
+
rspec-core (~> 3.11.0)
|
26
|
+
rspec-expectations (~> 3.11.0)
|
27
|
+
rspec-mocks (~> 3.11.0)
|
28
|
+
rspec-core (3.11.0)
|
29
|
+
rspec-support (~> 3.11.0)
|
30
|
+
rspec-expectations (3.11.0)
|
31
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
32
|
+
rspec-support (~> 3.11.0)
|
33
|
+
rspec-its (1.3.0)
|
34
|
+
rspec-core (>= 3.0.0)
|
35
|
+
rspec-expectations (>= 3.0.0)
|
36
|
+
rspec-mocks (3.11.1)
|
37
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
38
|
+
rspec-support (~> 3.11.0)
|
39
|
+
rspec-support (3.11.0)
|
40
|
+
rubocop (1.28.2)
|
41
|
+
parallel (~> 1.10)
|
42
|
+
parser (>= 3.1.0.0)
|
43
|
+
rainbow (>= 2.2.2, < 4.0)
|
44
|
+
regexp_parser (>= 1.8, < 3.0)
|
45
|
+
rexml
|
46
|
+
rubocop-ast (>= 1.17.0, < 2.0)
|
47
|
+
ruby-progressbar (~> 1.7)
|
48
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
49
|
+
rubocop-ast (1.17.0)
|
50
|
+
parser (>= 3.1.1.0)
|
51
|
+
rubocop-rake (0.6.0)
|
52
|
+
rubocop (~> 1.0)
|
53
|
+
rubocop-rspec (2.10.0)
|
54
|
+
rubocop (~> 1.19)
|
55
|
+
ruby-progressbar (1.11.0)
|
56
|
+
strong_versions (0.4.5)
|
57
|
+
i18n (>= 0.5)
|
58
|
+
paint (~> 2.0)
|
59
|
+
unicode-display_width (2.1.0)
|
60
|
+
|
61
|
+
PLATFORMS
|
62
|
+
x86_64-linux
|
63
|
+
|
64
|
+
DEPENDENCIES
|
65
|
+
devpack (~> 0.4.0)
|
66
|
+
geoprojection!
|
67
|
+
gnuplot (~> 2.6)
|
68
|
+
rake (~> 13.0)
|
69
|
+
rspec (~> 3.0)
|
70
|
+
rspec-its (~> 1.3)
|
71
|
+
rubocop (~> 1.28)
|
72
|
+
rubocop-rake (~> 0.6.0)
|
73
|
+
rubocop-rspec (~> 2.10)
|
74
|
+
strong_versions (~> 0.4.5)
|
75
|
+
|
76
|
+
BUNDLED WITH
|
77
|
+
2.3.11
|
data/Makefile
ADDED
data/README.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# Geoprojection
|
2
|
+
|
3
|
+
Toolkit for translating distances (kilometers) from co-ordinates (latitude, longitude) onto geographically-precise (within reason) projections.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Install the gem and add to the application's Gemfile by executing:
|
8
|
+
|
9
|
+
$ bundle add geoprojection
|
10
|
+
|
11
|
+
If bundler is not being used to manage dependencies, install the gem by executing:
|
12
|
+
|
13
|
+
$ gem install geoprojection
|
14
|
+
|
15
|
+
## Usage
|
16
|
+
|
17
|
+
### Ellipse
|
18
|
+
|
19
|
+
Provide a center point (latitude, longitude) and a distance (kilometers) to calculate a projected ellipse at the given coordinates. An array of `[latitude, longitude]` polygon points is provided.
|
20
|
+
|
21
|
+
The default number of points is `36`. This can be overridden with the `points` parameter to `Geoprojection::Ellipse.new`.
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
ellipse = Geoprojection::Ellipse.new(latitude: 50.8169, longitude: 0.1367, distance: 10, points: 36)
|
25
|
+
ellipse.points
|
26
|
+
```
|
27
|
+
|
28
|
+
The actual returned points will be N+1, as the start and end point are identical to provide a complete polygon.
|
29
|
+
|
30
|
+
## Contributing
|
31
|
+
|
32
|
+
Make changes, run `make test`, create a pull request.
|
data/Rakefile
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Geoprojection
|
4
|
+
# Elliptical projection of a center point (lat, long) with a provided distance from the center.
|
5
|
+
class Ellipse
|
6
|
+
EQUATOR_KM_PER_LATITUDE_DEGREE = 110.567
|
7
|
+
EQUATOR_KM_PER_LONGITUDE_DEGREE = 111.321
|
8
|
+
DEGREES_PER_RADIAN = Math::PI / 180
|
9
|
+
|
10
|
+
def initialize(latitude:, longitude:, distance:, points: 36)
|
11
|
+
@latitude = latitude
|
12
|
+
@longitude = longitude
|
13
|
+
@distance = distance
|
14
|
+
@points = points
|
15
|
+
end
|
16
|
+
|
17
|
+
def points
|
18
|
+
# Create a complete polygon by joining the last and first points.
|
19
|
+
projected_points + [projected_points.first]
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def projected_points
|
25
|
+
@projected_points ||= @points.times.map do |index|
|
26
|
+
theta = step * index
|
27
|
+
[derived_x(theta), derived_y(theta)]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def derived_x(theta)
|
32
|
+
@longitude + (DEGREES_PER_RADIAN * @distance * longitude_distortion * Math.cos(DEGREES_PER_RADIAN * theta))
|
33
|
+
end
|
34
|
+
|
35
|
+
def derived_y(theta)
|
36
|
+
@latitude + (DEGREES_PER_RADIAN * @distance * latitude_distortion * Math.sin(DEGREES_PER_RADIAN * theta))
|
37
|
+
end
|
38
|
+
|
39
|
+
def step
|
40
|
+
@step ||= 360.0 / @points
|
41
|
+
end
|
42
|
+
|
43
|
+
def longitude_distortion
|
44
|
+
@longitude_distortion ||= 1 / (EQUATOR_KM_PER_LONGITUDE_DEGREE * Math.cos(DEGREES_PER_RADIAN * @latitude))
|
45
|
+
end
|
46
|
+
|
47
|
+
def latitude_distortion
|
48
|
+
@latitude_distortion ||= 1 / (EQUATOR_KM_PER_LATITUDE_DEGREE / @latitude)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
metadata
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: geoprojection
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Bob Farrell
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-05-11 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Write a longer description or delete this line.
|
14
|
+
email:
|
15
|
+
- git@bob.frl
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- ".rspec"
|
21
|
+
- ".rubocop.yml"
|
22
|
+
- ".ruby-version"
|
23
|
+
- Gemfile
|
24
|
+
- Gemfile.lock
|
25
|
+
- Makefile
|
26
|
+
- README.md
|
27
|
+
- Rakefile
|
28
|
+
- lib/geoprojection.rb
|
29
|
+
- lib/geoprojection/ellipse.rb
|
30
|
+
- lib/geoprojection/version.rb
|
31
|
+
- sig/geoprojection.rbs
|
32
|
+
homepage: https://github.com/bobf/geoprojection
|
33
|
+
licenses: []
|
34
|
+
metadata:
|
35
|
+
homepage_uri: https://github.com/bobf/geoprojection
|
36
|
+
source_code_uri: https://github.com/bobf/geoprojection
|
37
|
+
changelog_uri: https://github.com/bobf/geoprojection
|
38
|
+
rubygems_mfa_required: 'true'
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.6.0
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubygems_version: 3.0.3.1
|
55
|
+
signing_key:
|
56
|
+
specification_version: 4
|
57
|
+
summary: Write a short summary, because RubyGems requires one.
|
58
|
+
test_files: []
|