gps_pvt 0.4.1 → 0.5.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 +4 -4
- data/README.md +2 -1
- data/exe/gps_pvt +36 -4
- data/{sig/gps_pvt.rbs → gps_pvt.rbs} +0 -0
- data/lib/gps_pvt/receiver.rb +8 -5
- data/lib/gps_pvt/util.rb +32 -0
- data/lib/gps_pvt/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83dff6013480dd4df4faacde170a901d712a605093fa006d0d4542c58f43ac45
|
4
|
+
data.tar.gz: 33728f6f9c4969f04ed528831e14977f3f90846b0f740ce0644f06de18ac7322
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd13f81c590a85ffeed54fe62dfb45858373cf687b08e5dc37bf45805f54398c50ad71f03e512a28015d214239e189c0581317d703cb4af99f4f9d258d162d12
|
7
|
+
data.tar.gz: 64df6a70a7b02f94e6f94c878ada85bc293871e5478698a5fdc285f77418fd2d27ecf9aece5b42ca197d6a3dc79ab9294f81b06411b83ca008f3428011245b83
|
data/README.md
CHANGED
@@ -32,7 +32,7 @@ An attached executable is useful. After installation, type
|
|
32
32
|
|
33
33
|
$ gps_pvt RINEX_or_UBX_file(s)
|
34
34
|
|
35
|
-
The format of RINEX_or_UBX_file is automatically determined with its
|
35
|
+
The format of RINEX_or_UBX_file is automatically determined with its extension, such as .ubx will be treated as UBX format. A gz compressed file can be specified directly, and URI such as https://... is also acceptable since version 0.5.0. If you want to specify the file format, instead of RINEX_or_UBX_file(s), use the following arguments:
|
36
36
|
|
37
37
|
--rinex_nav=filename
|
38
38
|
--rinex_obs=filename
|
@@ -50,6 +50,7 @@ Additionally, the following command options *--key=value* are available.
|
|
50
50
|
| elevation_mask_deg | numeric | satellite elevation mask specified in degrees. *ex) --elevation_mask_deg=10* | v0.3.0 |
|
51
51
|
| start_time | time string | start time to perform solution. GPS, UTC and other formats are supported. *ex1) --start_time=1234:5678* represents 5678 seconds in 1234 GPS week, *ex2) --start_time="2000-01-01 00:00:00 UTC"* is in UTC format. | v0.3.3 |
|
52
52
|
| end_time | time string | end time to perform solution. Its format is the same as start_time. | v0.3.3 |
|
53
|
+
| online_ephemeris | | automatically load ephemeris published online based on observation | v0.5.0 |
|
53
54
|
|
54
55
|
### For developer
|
55
56
|
|
data/exe/gps_pvt
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'gps_pvt'
|
4
|
+
require 'uri'
|
4
5
|
|
5
6
|
# runnable quick example to solve PVT by using RINEX NAV/OBS or u-blox ubx
|
6
7
|
|
7
8
|
$stderr.puts <<__STRING__
|
8
9
|
Usage: #{__FILE__} GPS_file1 GPS_file2 ...
|
9
10
|
As GPS_file, rinex_nav(*.YYn, *.YYh, *.YYq, *.YYg), rinex_obs(*.YYo), and ubx(*.ubx) format are currently supported.
|
11
|
+
(YY = last two digit of year)
|
10
12
|
File format is automatically determined based on its extention described in above parentheses.
|
11
13
|
If you want to specify its format manually, --rinex_(nav|obs)=file_name or --ubx=file_name are available.
|
12
14
|
Supported RINEX versions are 2 and 3.
|
13
|
-
|
15
|
+
A file having additional ".gz" extension is recognized as a file compressed by zlib.
|
16
|
+
Major URL such as http(s)://... is acceptable as an input file name.
|
14
17
|
__STRING__
|
15
18
|
|
16
19
|
options = []
|
@@ -54,6 +57,9 @@ options.reject!{|opt|
|
|
54
57
|
end
|
55
58
|
misc_options[opt[0]] = t
|
56
59
|
true
|
60
|
+
when :online_ephemeris
|
61
|
+
misc_options[opt[0]] = opt[1]
|
62
|
+
true
|
57
63
|
else
|
58
64
|
false
|
59
65
|
end
|
@@ -61,19 +67,45 @@ options.reject!{|opt|
|
|
61
67
|
|
62
68
|
# Check file existence and extension
|
63
69
|
files.collect!{|fname, ftype|
|
64
|
-
raise "File not found: #{fname}" unless File::exist?(fname)
|
65
70
|
ftype ||= case fname
|
66
|
-
when /\.\d{2}[nhqg]
|
67
|
-
when /\.\d{2}o
|
71
|
+
when /\.\d{2}[nhqg](?:\.gz)?$/; :rinex_nav
|
72
|
+
when /\.\d{2}o(?:\.gz)?$/; :rinex_obs
|
68
73
|
when /\.ubx$/; :ubx
|
69
74
|
else
|
70
75
|
raise "Format cannot be guessed, use --(format, ex. rinex_nav)=#{fname}"
|
71
76
|
end
|
77
|
+
fname = proc{
|
78
|
+
next fname if File::exist?(fname)
|
79
|
+
if uri = URI::parse(fname) and !uri.instance_of?(URI::Generic) then
|
80
|
+
next uri
|
81
|
+
end
|
82
|
+
raise "File not found: #{fname}"
|
83
|
+
}.call
|
72
84
|
[fname, ftype]
|
73
85
|
}
|
74
86
|
|
75
87
|
rcv = GPS_PVT::Receiver::new(options)
|
76
88
|
|
89
|
+
proc{|src|
|
90
|
+
next unless src
|
91
|
+
loader = proc{|t_meas|
|
92
|
+
utc = Time::utc(*t_meas.c_tm)
|
93
|
+
y, yday = [:year, :yday].collect{|f| utc.send(f)}
|
94
|
+
uri = URI::parse(
|
95
|
+
"ftp://gssc.esa.int/gnss/data/daily/" +
|
96
|
+
"%04d/brdc/BRDC00IGS_R_%04d%03d0000_01D_MN.rnx.gz"%[y, y, yday])
|
97
|
+
rcv.parse_rinex_nav(uri)
|
98
|
+
uri
|
99
|
+
}
|
100
|
+
run_orig = rcv.method(:run)
|
101
|
+
eph_list = {}
|
102
|
+
rcv.define_singleton_method(:run){|meas, t_meas, *args|
|
103
|
+
w_d = [t_meas.week, (t_meas.seconds.to_i / 86400)]
|
104
|
+
eph_list[w_d] ||= loader.call(t_meas)
|
105
|
+
run_orig.call(meas, t_meas, *args)
|
106
|
+
}
|
107
|
+
}.call(misc_options[:online_ephemeris])
|
108
|
+
|
77
109
|
proc{
|
78
110
|
run_orig = rcv.method(:run)
|
79
111
|
t_start, t_end = [nil, nil]
|
File without changes
|
data/lib/gps_pvt/receiver.rb
CHANGED
@@ -4,6 +4,7 @@ Receiver class to be an top level interface to a user
|
|
4
4
|
=end
|
5
5
|
|
6
6
|
require_relative 'GPS'
|
7
|
+
require_relative 'util'
|
7
8
|
|
8
9
|
module GPS_PVT
|
9
10
|
class Receiver
|
@@ -547,22 +548,24 @@ class Receiver
|
|
547
548
|
$stderr.puts ", found packets are %s"%[ubx_kind.inspect]
|
548
549
|
end
|
549
550
|
|
550
|
-
def parse_rinex_nav(
|
551
|
+
def parse_rinex_nav(src)
|
552
|
+
fname = Util::get_txt(src)
|
551
553
|
items = [
|
552
554
|
@solver.gps_space_node,
|
553
555
|
@solver.sbas_space_node,
|
554
556
|
@solver.glonass_space_node,
|
555
557
|
].inject(0){|res, sn|
|
556
558
|
loaded_items = sn.send(:read, fname)
|
557
|
-
raise "Format error! (Not RINEX) #{
|
559
|
+
raise "Format error! (Not RINEX) #{src}" if loaded_items < 0
|
558
560
|
res + loaded_items
|
559
561
|
}
|
560
|
-
$stderr.puts "Read RINEX NAV file (%s): %d items."%[
|
562
|
+
$stderr.puts "Read RINEX NAV file (%s): %d items."%[src, items]
|
561
563
|
end
|
562
564
|
|
563
|
-
def parse_rinex_obs(
|
565
|
+
def parse_rinex_obs(src, &b)
|
566
|
+
fname = Util::get_txt(src)
|
564
567
|
after_run = b || proc{|pvt| puts pvt.to_s if pvt}
|
565
|
-
$stderr.print "Reading RINEX observation file (%s)"%[
|
568
|
+
$stderr.print "Reading RINEX observation file (%s)"%[src]
|
566
569
|
types = nil
|
567
570
|
glonass_freq = nil
|
568
571
|
count = 0
|
data/lib/gps_pvt/util.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'tempfile'
|
3
|
+
require 'uri'
|
4
|
+
require 'zlib'
|
5
|
+
|
6
|
+
module GPS_PVT
|
7
|
+
module Util
|
8
|
+
class << self
|
9
|
+
def inflate(src)
|
10
|
+
Zlib::GzipReader.send(*(src.kind_of?(IO) ? [:new, src] : [:open, src]))
|
11
|
+
end
|
12
|
+
def get_txt(fname_or_uri)
|
13
|
+
is_uri = fname_or_uri.kind_of?(URI)
|
14
|
+
((is_uri && (RUBY_VERSION >= "2.5.0")) ? URI : Kernel) \
|
15
|
+
.send(:open, fname_or_uri){|src|
|
16
|
+
is_gz = (src.content_type =~ /gzip/) if is_uri
|
17
|
+
is_gz ||= (fname_or_uri.to_s =~ /\.gz$/)
|
18
|
+
is_file = src.kind_of?(File) || src.kind_of?(Tempfile)
|
19
|
+
|
20
|
+
return src.path if ((!is_gz) and is_file)
|
21
|
+
|
22
|
+
Tempfile::open(File::basename($0, '.*')){|dst|
|
23
|
+
dst.binmode
|
24
|
+
dst.write((is_gz ? inflate(is_file ? src.path : src) : src).read)
|
25
|
+
dst.rewind
|
26
|
+
dst.path
|
27
|
+
}
|
28
|
+
}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/gps_pvt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gps_pvt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- fenrir(M.Naruoka)
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -93,11 +93,12 @@ files:
|
|
93
93
|
- ext/ninja-scan-light/tool/swig/spec/GPS_spec.rb
|
94
94
|
- ext/ninja-scan-light/tool/swig/spec/SylphideMath_spec.rb
|
95
95
|
- gps_pvt.gemspec
|
96
|
+
- gps_pvt.rbs
|
96
97
|
- lib/gps_pvt.rb
|
97
98
|
- lib/gps_pvt/receiver.rb
|
98
99
|
- lib/gps_pvt/ubx.rb
|
100
|
+
- lib/gps_pvt/util.rb
|
99
101
|
- lib/gps_pvt/version.rb
|
100
|
-
- sig/gps_pvt.rbs
|
101
102
|
homepage: https://github.com/fenrir-naru/gps_pvt
|
102
103
|
licenses: []
|
103
104
|
metadata:
|