This is a difficult problem: What is the "best" unit to choose?
To get started, let's make a list of all available units (thanks Fidel I. Schaposnik):
allunits = QuantityUnits`$UnitList;
and then define a function that gives me all units that are compatible with a given unit:
allcompatibleunits[x_] := Select[allunits, CompatibleUnitQ[#, x] &]
For example, there are lots of units that are compatible with Second
:
allcompatibleunits["Second"]
(* {"AcademicBimesters", "AcademicQuarters", "AcademicQuinmesters",
...
"Yottaseconds", "Zeptoseconds", "Zettaseconds"} *)
(there are 216 of them, some very exotic).
Let's convert something to all compatible units:
allconversions[x_] := UnitConvert[x, #] & /@ allcompatibleunits[x]
For your case of 1000 meters,
allconversions[Quantity[1000, "m"]]
(* {Quantity[720000000/1397, "AgateLines"],
Quantity[15625/25146, "AirMiles"],
Quantity[324.25, "Akainas"],
...
Quantity[Interval[{3472.2222222222194`, 4166.66666666667}], "Zarot"],
Quantity[1000000000000000000000000, "Zeptometers"],
Quantity[1/1000000000000000000, "Zettameters"]} *)
Now we need to pick the "best" one of these. What exactly are your criteria? We could for example pick the number that is closest to unity:
bestconversion[x_] :=
MinimalBy[allconversions[x], Abs[Log[QuantityMagnitude[#]]] &]
bestconversion[Quantity[1000, "m"]]
(* {Quantity[1, "Kilometers"],
Quantity[1, "LengthClicks"]} *)
bestconversion[Quantity[3600, "s"]]
(* {Quantity[1, "Hours"]} *)
bestconversion[Quantity[86400, "s"]]
(* {Quantity[1, "CivialDays"],
Quantity[1, "Days"],
Quantity[1, "MayanKins"],
Quantity[1, "MesopotamianDays"],
Quantity[1, "Nychthemerons"]} *)
bestconversion[Quantity[86100, "s"]]
(* {Quantity[0.9992561804, "SiderealDays"]} *)
You'll probably have to hand-pick the allunits
list to get what you want, to avoid esoteric units. For example, we can pick out metric units in order to narrow things down a bit:
metricunits = Quiet[Union[
Cases[QuantityUnit[UnitConvert[#, "Metric"]] & /@ allunits, _String]]];
allcompatibleunits[x_] := Select[metricunits, CompatibleUnitQ[#, x] &]
bestconversion[Quantity[1000, "m"]]
(* {Quantity[1, "Kilometers"]} *)
bestconversion[Quantity[3600, "s"]]
(* {Quantity[1, "Hours"]} *)
bestconversion[Quantity[86400, "s"]]
(* {Quantity[1, "Days"]} *)
bestconversion[Quantity[86100, "s"]]
(* {Quantity[287/288, "Days"]} *)
which is a bit more sensible.
All this works only with base units, not derived units.