手順 1:新しい投影図法の定義
最初の手順では、投影図法をサブタイプ化するために必要な最低要件について説明します。具体的には、投影図法の forward 関数と inverse 関数の実装方法を紹介します。
この投影図法のコード一式は、proj_step1.h ファイルと proj_step1.cpp ファイルに入っています。
クラス宣言
メルカトル図法は、proj_step1.h ファイルで宣言します。
この投影図法の基本クラス
IlvProjection を宣言する
<ilviews/maps/projection/project.h> ファイルを含める必要があります。
次に、実装する投影図法機能の宣言が必要です。
sForward はもっとも単純なケース、すなわち地球を球体としてモデリングする場合の順投影を実装します。
IlvProjection::sForward 関数は抽象関数なので、この機能の実装は必須です。
次に示す関数の宣言と実装は、必須ではありません。この新しい投影図法は単純に、実装されていない機能には対応せず、アプリケーションによってそれらが要求されるとエラー・コードを返します。
sInverse は、地球が球体としてモデリングされる場合に逆投影を実装します。
eForward は、地球が非球形の楕円としてモデリングされる場合に順投影を実装します。
eInverse は、地球が非球形の楕円としてモデリングされる場合に逆投影を実装します。
投影図法宣言では、
IlvMapsDeclareProjectionIO マクロを使用する必要があります。このマクロでは、入出力操作をサポートするために、クラスの
IlvProjectionClassInfo といくつかの必須メンバーを宣言します。
投影図法を宣言したら、ファイルに
IlvMapsInitProjectionIO を追加する必要があります。このマクロによって、静的初期化中に
IlvProjectionClassInfo の初期化が保証されます。
#include <ilviews/maps/projection/project.h>
class Mercator :public IlvProjection
{
public:
Mercator();
protected:
virtual IlvMapsError sForward(IlvCoordinate &) const;
virtual IlvMapsError sInverse(IlvCoordinate &) const;
virtual IlvMapsError eForward(IlvCoordinate &) const;
virtual IlvMapsError eInverse(IlvCoordinate &) const;
IlvMapsDeclareProjectionIO(Mercator);
};
// Enable IO initialization.
IlvMapsInitProjectionIO(Mercator);
Version 6.0
Copyright © 2015, Rogue Wave Software, Inc. All Rights Reserved.