トップPC版地図アプリGIS > 折れ線を描画する

折れ線を描画する

はじめに

なめらかな曲線もベースは折れ線データである。つまり、短い直線線分をつなぎ合わせたものが曲線である。

線分の終端および繋ぎ目の形状

java.awt.BasicStrokeでは線分の終端および繋ぎ目の形状はそれぞれ以下の3つから選択できる。 これらの数値をプログラムで確認した結果を下に示した。

BasicStrokeとしてのデフォルトの属性は、実線の幅1.0、CAP_SQUARE、JOIN_MITER、接合制限値10.0である。

道路のレンダリングでは使い分けが必要となる。国境や県境などは標準OSM地図では JOIN_BEVEL である。

レンダリングでは、ライン描画が多彩である。細い線では、CAPやJOINをさほど気にしなくてもよい。 いちいち指定するのではなく、幅のみ指定して、CAP と JOIN はデフォルトとしたい。 BasicStrokeの仕様では CAP_SQUARE、JOIN_MITER、接合制限値10.0 となる。接合制限値は JOIN_MITER だけに関係する。 線幅によって変えるべきかもしれない。

地図アプリとしては CAP_ROUNDまたはCAP_BUTT、JOIN_ROUNDまたはJOIN_BEVEL の方がよい気がする。 現在(2025年2月19日)は CAP_BUTT、JOIN_ROUND としている。

Admin境界線、道路・鉄道などは個々に指定する。

static int	CAP_BUTT
    装飾を付けずに、閉じられていない部分輪郭線および破線セグメントを終了します。
static int	CAP_ROUND
    ペン幅の半分の長さを半径とした丸い装飾を付けて、閉じられていない部分輪郭線
    および破線セグメントを終了します。
static int	CAP_SQUARE
   ライン幅の半分の長さに等しい距離だけセグメントの先端を延長する正方形を付けて、
   閉じられていない部分輪郭線および破線セグメントを終了します。
static int	JOIN_BEVEL
   幅の広い輪郭線の外側の角を直線セグメントに接合するようにして輪郭線セグメントを接合します。
static int	JOIN_MITER
   輪郭線セグメントの外側の端が重なるまで延長して輪郭線セグメントを接合します。
static int	JOIN_ROUND
   ライン幅の半分の長さを半径として、角を丸く切り落として輪郭線セグメントを接合します。
cap_butt=0, cap_round=1, cap_square=2, join_bevel=2, join_miter=0, join_round=1

リファレンス

[1] クラスBasicStroke
[2] Fun with Java2D - Strokes
[3] StrokeTest 線属性の設定
[4] シェイプのストローク