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
# 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
# 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
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}")
# 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
# File lib/dnsruby/resource/LOC.rb, line 116 def latlon2deg(rawmsec) deg=0; deg = (rawmsec - reference_latlon) / CONV_DEG; return deg; end
# 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
# 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