単位の管理

単位の管理は、ilog.views.maps パッケージに含まれる次の 3 つのクラスで行います。
これらのクラスは、角度と距離の測定単位を明確に区別しなかった以前の ilog.views.maps.IlvUnitConverter に代わるものです。
単位は、物理量を計測する単純な参照システムです。通常、それぞれの種類の単位にはカーネル単位が定義されています。角度のカーネル単位はラジアンで、長さのカーネル単位はメートルです。これで派生単位の変換が容易になります。
単位は座標系の各軸に付加されています。つまり、座標系内で、縦座標を異なる座標で表すことができます。例えば、地理座標を使用して、x および y 縦軸を度数で表し、z 縦軸 (例えば、楕円体の高さに対応) をメートルで表すことができます。通常、座標系では、同じ単位を使用してすべての同じような物理量を表します (例えば、すべての角度を度数で表します)。
この例のソース・コード一式は、以下のファイルにあります。

定義済みの単位

パッケージには長さと度数の両方を計測するための定義済み単位一覧があります。定義済み単位はその略称で参照されます。関連クラスのスタティック・インスタンスか、またはスタティック・メソッド GetRegisteredUnit のいずれかを使用して、定義済み単位コンバーターにアクセスできます。
JViews Maps で提供されている定義済みの角度および長さの単位については、次の一覧を参照してください。
定義済みの角度単位
略称
単位名
カーネル単位変換
rad
ラジアン
1.0
deg
PI / 180
grad
グラード
PI / 200
定義済みの長さの単位
略称
単位名
カーネル単位変換
km
キロメートル
1000.0
m
メートル
1.0
dm
デシメートル
0.1
cm
センチメートル
0.01
mm
ミリメートル
0.0010
kmi
国際海里
1852.0
イン
国際インチ
0.0254
ft
国際フィート
0.3048
yd
国際ヤード
0.9144
mi
国際法定マイル
1609.344
fath
国際尋
1.8288
ch
国際チェーン
20.1168
link
国際リンク
0.201168
us-in
米国測量局のインチ
0.025400050800101603
us-ft
米国測量局のフィート
0.304800609601219
us-yd
米国測量局のヤード
0.914401828803658
us-ch
米国測量局のチェーン
20.11684023368047
us-mi
米国測量局の法定マイル
1609.347218694437
ind-yd
インドのヤード
0.91439523
ind-ft
インドのフィート
0.30479841
ind-ch
インドのチェーン
20.11669506

単位の定義

IlvUnit クラスは、すべての単位のスーパークラスです。JViews Maps パッケージに、このクラスの 2 つの特殊バージョンが含まれています。
新しい単位を定義するには、3 つのパラメーターを指定して、これら 2 つのクラスのインスタンスを新規に作成します。
  • カーネル単位への変換係数 (単位を 1 つ定義する際に必要なカーネル単位の数)
  • 単位の略称
  • 単位の名称
例えば、以下のコードでは、メートルをフィートに変換する IlvLinearUnit のインスタンスを新規に作成します (1 ft=0.3048 メートルと想定)。
IlvLinearUnit unit = new IlvLinearUnit(0.3048,
                                       "ft",
                                       "International foot");

単位の使用

単位は、値間または座標系の単純な変換に使用できます。さまざまな標準単位が、JViews Maps パッケージの組み込み単位クラスに定義されています。これらの単位を取得するには、IlvLinearUnit および IlvAngularUnit クラスの定義済み静的メンバー (これらは、最もよく使用される単位です) かまたは GetRegisteredUnit メソッドを使用します。

単純な単位変換

例えば、メートルをフィートに変換する場合に、次に示すフィートのスタティック定義を使用することができます。
IlvLinearUnit unit = IlvLinearUnit.FT;
double meters = 100D;
double feet = unit.fromMeters(meters);
System.out.println("100 m = " + feet + " ft");
// The following is also valid, as the kernel unit for lengths
// is the meter.
double other_feet = unit.fromKernel(meters);
System.out.println("100 m = " + feet + " ft");
または、登録されたバージョンを使用します。
IlvUnit unit = IlvUnit.GetRegisteredUnit("ft");
double meters = 100D;
double feet = unit.fromKernel(meters);
System.out.println("100 m = " + feet + " ft");
単位の標準変換について、IlvUnit クラスは次のメソッドを定義します。
  • toKernel メソッドは、単位をカーネル単位に変換します。
  • fromKernel メソッドは、カーネル単位から特定の単位に変換します。
さらに、IlvLinearUnit クラス (あるいは IlvAngularUnit) では、明示的にメソッドを呼び出す必要のあるアプリケーションに toMeters および fromMeters メソッド (それぞれ、toRadians メソッドと fromRadians メソッド) を定義します。

座標系における単位

単位は座標系の定義の一部です。つまり、すべての座標系は、軸の単位で構成されている必要があります。座標系に単位を定義すると、変換ファクトリーは後続のアフィン変換を自動的に追加して、変換パスの座標を変換することができます。