In version 6.00.1300152000 20110314 and later, the %L
code
may be used with <fmt>
to print a latitude, longitude or
location (geocode) value, in a manner similar to how date/time values
are printed with %t
. Flags indicate what type of value is
expected, and/or if a subformat is provided:
-
(minus)
A latitude argument is expected (memory aid: latitude lines are horizontal, so is minus sign). This is the default.
|
(pipe)
A longitude is expected (memory aid: longitude lines are vertical; so is pipe).
+
(plus)
A location is expected; either a geocode long
value, or a
latitude and longitude (e.g. comma-separated).
a
Like %at
(date/time format), the next argument (before the
latitude/longitude/location) is a subformat indicating how to
print the latitude and/or longitude. Without this flag,
no subformat argument is expected, and a default subformat is used.
Latitude, longitude and location arguments should be in one of the
formats supported by the parselatitude()
,
parselongitude()
, or latlon2geocode()
(with single arg)
SQL functions, as appropriate. If the a
flag is given, the
subformat string may contain the following codes:
%D
for degrees%M
for minutes%S
for seconds%H
for the hemisphere letter ("N
", "S
",
"E
" or "W
")%h
for the hemisphere sign ("+
" or "-
")%o
for an ISO-8859-1 degree sign%O
for a UTF-8 degree sign%%
for a percent sign
A field width, precision, space, zero and/or minus flags may be
given with the %D
/%M
/%S
codes, with the same
meaning as for numeric fmt
codes. If no flags are given to a
code, the width is set to 2 (or 3 for longitude degrees), with space
padding for degrees and zero padding for minutes and seconds.
Additionally, a single d
, i
, f
or g
numeric-type flag may be given with the %D
/%M
/%S
codes. This flag will print the value with the corresponding
fmt
numeric code, e.g. truncated to an integer for d
or
i
, floating-point with potential roundoff for f
or
g
. This flag is only valid for the smallest unit
(degrees/minutes/seconds) printed: larger units will always be printed
in integer format. This ensures that a fractional value will not be
printed twice erroneously, e.g. 20.5 degrees will not have its
".5
" degrees fractional part printed if "30
" minutes
is also being printed, because the degrees numeric-type will be forced
to integer regardless of flags.
The default numeric-type flag is g
for the smallest unit.
This helps ensure values are printed with the least number of decimal
places needed (often none), yet with more (sub-second) accuracy if
specified in the original value. Additionally, for the g
type,
if a degrees/minutes/seconds value is less than
( 10^-(p-2) ), where p is the format code's precision
(default 6), it will be truncated to 0. This helps prevent
exponential-format printing of values, which is often merely an
artifact of floating-point roundoff during unit conversion, and not
part of the original user-specified value.
Examples:
<!-- Print latitude, default format: -->
<fmt "%-L\n" 41.75>
<!-- Print a longitude in Garmin format: -->
<fmt "%a|L\n" "%H%03D%O%02.2fM'" -121.123>
<!-- Dump geocodes for humans: -->
<sql "select Geocode from geoTable">
<fmt "Loc: %+L\n" $Geocode>
</sql>