geozone 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 77cabebaaf4ad3227df18bdabe0240173eaa2463ba0c30d6f6560c166659f93f
4
+ data.tar.gz: 3427fecfd5f939ddfad2d0a03defc9b9af144247b479e521b45f0ee4865aa390
5
+ SHA512:
6
+ metadata.gz: 881da62959db1129ef01213b538372806c6be83af19bdfcc842c71dbba1b83e08ec14c9d7f6a953869fdb0bdd2f8c5b149d7de8a85a1b26c143a4768028bff97
7
+ data.tar.gz: 67a8655eb1e8a897c45499ba18a414e82e73fd0038307dc2985bb2d78b9f249b72e3af398432bd4b526dd184863d6466e8979fe8a046fedba8a24f49dfa99f80
Binary file
Binary file
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: geozone.rb
4
+
5
+
6
+ require 'dynarex'
7
+
8
+
9
+ class GeoZone
10
+
11
+ def initialize(locations: nil, journey: nil)
12
+
13
+ @dx = Dynarex.new locations if locations
14
+ @journey = journey
15
+
16
+ end
17
+
18
+ def zone(location)
19
+
20
+ a = @dx.all.map do |x|
21
+ [x.label, distance(location, x.coords.split(/, */).map(&:to_f)).round]
22
+ end
23
+
24
+ label, distance = a.min_by(&:last)
25
+ {zone: label.to_sym, distance: distance}
26
+
27
+ end
28
+
29
+ private
30
+
31
+ def distance(loc1, loc2)
32
+
33
+ rad = Math::PI/180
34
+ rkm = 6371 # Earth radius in kilometers
35
+ rm = rkm * 1000 # Radius in meters
36
+
37
+ dlat_rad = (loc2[0]-loc1[0]) * rad # Delta, converted to rad
38
+ dlon_rad = (loc2[1]-loc1[1]) * rad
39
+
40
+ lat1_rad, lon1_rad = loc1.map {|i| i * rad }
41
+ lat2_rad, lon2_rad = loc2.map {|i| i * rad }
42
+
43
+ a = Math.sin(dlat_rad/2)**2 + Math.cos(lat1_rad) * Math.cos(lat2_rad) \
44
+ * Math.sin(dlon_rad/2)**2
45
+ c = 2 * Math::atan2(Math::sqrt(a), Math::sqrt(1-a))
46
+
47
+ rm * c # Distance in meters
48
+ end
49
+
50
+ end
51
+
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: geozone
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTkwMzE4MTQyODM4WhcN
15
+ MjAwMzE3MTQyODM4WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC85EJG
17
+ lDZIb1v438XSR5Be11+c4vWVsubBSpW+dNGWep/TVNibNQNAgn/f8RjKC6IAPzSh
18
+ LaE3QOyQ5l5b5y81ByQmgVdHB5FSjR94IN6wvmby/D9V7WJmygPAKz2eDnbEVDOW
19
+ CKy93kL7F4ljnZP555gr6tqJVI5nwWTjbtDgf98XjbhFYBPxjMUpVRP7cWNo7Xe3
20
+ GAgNskF3eDpQ1SjjPkN3r7pr5IjlZKNj9GaMvtNBALYyqu8C1aq32yNkA3aB7SqC
21
+ nCt2rG6Egh0Jb0luxJxtkMFzFoYpAAe5pzAE6Tmj2RsjFoi4lV+0l4VcD4N/OrAm
22
+ CIHiG5kBOa6bMaG3YzM+XUvA7zRsaaqeOWhYYmrEgex1G2ECMD8qp3jrlps63Q7C
23
+ Jrk7Fz0a0esZeqWBFympq5ORPu4DPbqvz+nszAvdeAEvHcxNegEgBafQDCjTSDE7
24
+ uKpwYG+0Sm4M131eUp+rWJYhb7WO6NfybOqtULF+fc0cADjhImhSIdsKPssCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUXKyk/b3D
26
+ OjMn1zUeYYI+NOpCLHkwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEAWRSADiR4ecawd8AmP8+EJzWfWGiOIgf4kLJ/DnD6
29
+ ufDvdu35BvnhVJ1LdwfRZJkbksQLpmpWn8cDES78p9Fska0SYq/vqC7qLjiWlPYt
30
+ V9qRdIvZRbjnBuVEyDttjOCOwuGI9+kg6d8RaurX5CnaEdSmxMYEUwKyIBu4QHf6
31
+ oBcDf7+T9s0reQ6VIguTuLn5rUjlUZCoQ4Vib7bcJ6+mTmm4TXUSjCOZCnKRrqMh
32
+ DuaL+i1hFi4kKJUTbfHKPCetqjmPZZDiW9jUvKSL7ksB3OY0ez/QNz2GZDN2FaXL
33
+ eCBKqgWgVpaqLA7POhC9eVOIL8sYRVYVOpYbGST/drRMxqe7lMRwLgkX/dAaHf0g
34
+ PWXSMooTJkiYd7cXryhAPh5vWfhuNkOeb4EIo+2wJy4Taogy3W5yD98j/Fcw7pgx
35
+ THUUi9/zPMGqrS2mHVePlefqaVbzFXtrHEp0V27bVQ9v8CtxIXg6Rv0OT19Dk4ta
36
+ tI62YhMUIlkRN9jPKJg4n2pG
37
+ -----END CERTIFICATE-----
38
+ date: 2019-03-18 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: dynarex
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.8'
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 1.8.18
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '1.8'
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 1.8.18
60
+ description:
61
+ email: james@jamesrobertson.eu
62
+ executables: []
63
+ extensions: []
64
+ extra_rdoc_files: []
65
+ files:
66
+ - lib/geozone.rb
67
+ homepage: https://github.com/jrobertson/geozone
68
+ licenses:
69
+ - MIT
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubygems_version: 3.0.1
87
+ signing_key:
88
+ specification_version: 4
89
+ summary: Finds the nearest zone location by comparing GPS distances with known locations.
90
+ test_files: []
Binary file