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
39 40 41 |
# File 'lib/groonga/geo-point.rb', line 39 def degree?(value) value.is_a?(Float) end |
.degree_to_msec(degree) ⇒ Object
31 32 33 |
# File 'lib/groonga/geo-point.rb', line 31 def degree_to_msec(degree) round(degree * 3600 * 1000) end |
.msec?(value) ⇒ Boolean
35 36 37 |
# File 'lib/groonga/geo-point.rb', line 35 def msec?(value) value.is_a?(Integer) end |
.msec_to_degree(msec) ⇒ Object
25 26 27 28 29 |
# File 'lib/groonga/geo-point.rb', line 25 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
53 54 55 56 57 58 59 |
# File 'lib/groonga/geo-point.rb', line 53 def parse(value) if /\A[-+]?\d+\z/ =~ value value.to_i else value.to_f end end |
.to_degree(value) ⇒ Object
43 44 45 46 |
# File 'lib/groonga/geo-point.rb', line 43 def to_degree(value) return value if degree?(value) msec_to_degree(value) end |
.to_msec(value) ⇒ Object
48 49 50 51 |
# File 'lib/groonga/geo-point.rb', line 48 def to_msec(value) return value if msec?(value) degree_to_msec(value) end |
Instance Method Details
#round(number, n_digits = 0) ⇒ Object
62 63 64 65 66 67 68 69 |
# File 'lib/groonga/geo-point.rb', line 62 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 |