Class for DNS Location (LOC) resource records. See RFC 1876 for details.
Conversions to/from thousandths of a degree.
Defaults (from RFC 1876, Section 3).
Powers of 10 from 0 to 9 (used to speed up calculations).
Reference altitude in centimeters (see RFC 1876).
Reference lat/lon (see RFC 1876).
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.
# 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
# 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