Module: Groonga::GeoPointValueConverter
- Defined in:
- lib/groonga/geo-point.rb
Constant Summary collapse
- MSEC_PER_SEC =
1000 * 1000
- N_SIGNIFICANT_DIGITS =
(Math.log10(MSEC_PER_SEC) + 1).truncate
Class Method Summary collapse
- .degree?(value) ⇒ Boolean
- .degree_to_msec(degree) ⇒ Object
- .msec?(value) ⇒ Boolean
- .msec_to_degree(msec) ⇒ Object
- .parse(value) ⇒ Object
- .to_degree(value) ⇒ Object
- .to_msec(value) ⇒ Object
Instance Method Summary collapse
Class Method Details
.degree?(value) ⇒ Boolean
38 39 40 |
# File 'lib/groonga/geo-point.rb', line 38 def degree?(value) value.is_a?(Float) end |
.degree_to_msec(degree) ⇒ Object
30 31 32 |
# File 'lib/groonga/geo-point.rb', line 30 def degree_to_msec(degree) round(degree * 3600 * 1000) end |
.msec?(value) ⇒ Boolean
34 35 36 |
# File 'lib/groonga/geo-point.rb', line 34 def msec?(value) value.is_a?(Integer) end |
.msec_to_degree(msec) ⇒ Object
24 25 26 27 28 |
# File 'lib/groonga/geo-point.rb', line 24 def msec_to_degree(msec) degree_integer_part, degree_fraction_part = msec.divmod(3600 * 1000) degree = degree_integer_part + (degree_fraction_part.to_f / (3600 * 1000)) round(degree, N_SIGNIFICANT_DIGITS) end |
.parse(value) ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/groonga/geo-point.rb', line 52 def parse(value) if /\A[-+]?\d+\z/ =~ value value.to_i else value.to_f end end |
.to_degree(value) ⇒ Object
42 43 44 45 |
# File 'lib/groonga/geo-point.rb', line 42 def to_degree(value) return value if degree?(value) msec_to_degree(value) end |
.to_msec(value) ⇒ Object
47 48 49 50 |
# File 'lib/groonga/geo-point.rb', line 47 def to_msec(value) return value if msec?(value) degree_to_msec(value) end |
Instance Method Details
#round(number, n_digits = 0) ⇒ Object
61 62 63 64 65 66 67 68 |
# File 'lib/groonga/geo-point.rb', line 61 def round(number, n_digits=0) if n_digits.zero? number.round else base = 10 ** n_digits (number * base).round / base.to_f end end |