1

Geotools は初めてです。地図を表示する単純なアプリケーションを開発しています。その上にビットマップまたはベクター シンボルを動的に配置したいと考えています (たとえば、ナビゲーション システムのように現在の位置を示すために)。さて、私がすでに行ったことは次のとおりです。

  • 1 つまたは複数のシェープファイルが指定されたマップを表示します。
  • 最後に挿入された位置を地図の中心にします。
  • 必要に応じて新しいレイヤーにシェイプを追加します。

私がする必要があるのは、マップ エリア上の特定の座標にある画像でオーバーレイを作成することです (明確にするために、ディスク上にラスター レイヤーを生成したくありません。画面上にペイントしたいだけです)。私の推測では、どうにかして JMapPane 内の Graphics2D インスタンスを直接使用する必要があると思いますが、それは正しいですか? この場合、地理座標から描画ペインのピクセル座標に変換するにはどうすればよいですか? または、探しているジオツール関数/クラスがいくつかありますか?

ありがとうございました。

4

1 に答える 1

3

解決策を見つけたので、自分自身に答えます。

クラスorg.geotools.map.DirectLayerを拡張することによってそれを行いました。これは、そのdraw(Graphics2D, MapContent)メソッドを拡張することによってカスタム レイヤーを定義する方法を提供します。グラフィック要素は、geotools が提供する worldToScreen アフィン変換を使用して正しい座標に配置されます。たとえば、実世界の座標が与えられた現在の位置に配置された Point2D を定義するには、次のようにします。

AffineTransform worldToScreen = viewport.getWorldToScreen();
Point2D worldPoint = new Point2D.Double(currentPosition.x, currentPosition.y);
Point2D screenPoint = worldToScreen.transform(worldPoint, null);

draw() メソッドが定義されたら、インスタンス化してレイヤーとして MapContent インスタンスに追加します。

于 2013-06-10T14:07:35.950 に答える