class Dnsruby::RR::LOC
Class for DNS
Location (LOC
) resource records. See RFC 1876 for details.
Constants
- CONV_DEG
- CONV_MIN
- CONV_SEC
-
Conversions to/from thousandths of a degree.
- DEFAULT_HORIZ_PRE
- DEFAULT_MIN
-
Defaults (from RFC 1876,
Section
3). - DEFAULT_SEC
- DEFAULT_SIZE
- DEFAULT_VERT_PRE
- POWEROFTEN
-
Powers of 10 from 0 to 9 (used to speed up calculations).
- REFERENCE_ALT
-
Reference altitude in centimeters (see RFC 1876).
- REFERENCE_LATLON
-
Reference lat/lon (see RFC 1876).
Attributes
The altitude of the center of the sphere described by the size method, in centimeters, from a base of 100,000m below the WGS 84 reference spheroid used by GPS.
The horizontal precision of the data, in centimeters.
The latitude of the center of the sphere described by the size method, in thousandths of a second of arc. 2**31 represents the equator; numbers above that are north latitude.
The longitude of the center of the sphere described by the size method, in thousandths of a second of arc. 2**31 represents the prime meridian; numbers above that are east longitude.
The diameter of a sphere enclosing the described entity, in centimeters.
The version number of the representation; programs should always check this. Dnsruby
currently supports only version 0.
The vertical precision of the data, in centimeters.
Public Class Methods
Source
# File lib/dnsruby/resource/LOC.rb, line 247 def self.precsize_ntoval(prec) mantissa = ((prec >> 4) & 0x0f) % 10; exponent = (prec & 0x0f) % 10; return mantissa * POWEROFTEN[exponent]; end
Public Instance Methods
Source
# File lib/dnsruby/resource/LOC.rb, line 89 def dms2latlon(deg, min, sec, hem) retval=0 retval = (deg * CONV_DEG) + (min * CONV_MIN) + (sec * CONV_SEC).round; retval = -retval if ((hem != nil) && ((hem == "S") || (hem == "W"))); retval += REFERENCE_LATLON; return retval; end
Source
# File lib/dnsruby/resource/LOC.rb, line 105 def latlon retlat, retlon = nil if (@version == 0) retlat = latlon2deg(@latitude); retlon = latlon2deg(@longitude); end return retlat, retlon end
Returns the latitude and longitude as floating-point degrees. Positive numbers represent north latitude or east longitude; negative numbers represent south latitude or west longitude.
lat, lon = rr.latlon system("xearth", "-pos", "fixed #{lat} #{lon}")
Source
# File lib/dnsruby/resource/LOC.rb, line 116 def latlon2deg(rawmsec) deg=0; deg = (rawmsec - reference_latlon) / CONV_DEG; return deg; end
Source
# File lib/dnsruby/resource/LOC.rb, line 71 def latlon2dms(rawmsec, hems) # Tried to use modulus here, but Perl dumped core if # the value was >= 2**31. abs = (rawmsec - REFERENCE_LATLON).abs; deg = (abs / CONV_DEG).round; abs -= deg * CONV_DEG; min = (abs / CONV_MIN).round; abs -= min * CONV_MIN; sec = (abs / CONV_SEC).round; # $conv_sec abs -= sec * CONV_SEC; msec = abs; hem = hems[(rawmsec >= REFERENCE_LATLON ? 0 : 1), 1] return sprintf("%d %02d %02d.%03d %s", deg, min, sec, msec, hem); end
Source
# File lib/dnsruby/resource/LOC.rb, line 253 def precsize_valton(val) exponent = 0; while (val >= 10) val /= 10; exponent+=1 end return (val.round << 4) | (exponent & 0x0f); end