ピクセル座標とは:グーグルマップのしくみを探る(2)

前回は、緯度経度で表された地球上の位置をどのように、ディスプレイ上のピクセル座標に対応させるかを探ってみました。
しかし、ピクセルとは四角の要素であり、点ではありません。それを、緯度経度で表された点とどのように対応させればよいのでしょうか。

すぐ、思いつくのはピクセル(要素)の中心に対応させる方法ですが、実はそうすると地図画像を扱う上ではともても不便になります。今回はどのようにピクセル座標を定義したらスムーズに対応させられるかを探ってみます。

まず、注意しなければならないことは、ピクセルは点ではなく、面積を持つ「要素」と考えなければなりません。したがって、画像の大きさとは、端から端の境界間の長さとなります。例えば、下図の画像の場合、縦と横に6個のピクセル(要素)が並んでいますので、画像の大きさは6px×6pxとなります。このなかで座標を定めます。

ピクセル座標は左上を原点(0,0)として、xの正方向は右方向、yの正方向は下方向、とします。下図の例では、画像の最端点は(6,6)となります。ピクセル座標は実数であり、(1.58,5.38)のような座標値もありえます。

一方、ピクセル(要素)の配置を決める「番地」は配列に相当しますので、整数で指定されます。ここでは、混同しないように、この配列を「ピクセル番号」と呼ぶようにして、カギカッコ([,])で囲むようにします。なお、これは一般的な呼び方ではないのでご留意ください。

そして、ピクセル(要素)は、そのピクセル番号と同じ、ピクセル座標の位置に、左上を合わせて配置されます。

繰り返しますが、ここで決めたピクセル座標は実数です。したがって、ピクセル(要素)の中心のピクセル座標は、そのピクセルの左上の座標(=ピクセル番号と同じになる)に(0.5,0.5)を足した値になります(このように、ある基準から距離を足し合わせて位置を決めることをよくオフセットという言い方をします)。例えば、ピクセル番号[3,3]の中心のピクセル座標は、(3.5,3.5)になります。

グーグルマップは、ズームレベル=0のときの1枚の画像(256px×256px)のピクセル画像と独自の世界座標を1対1に対応させています。すなわち、ズームレベル=0のときのピクセル座標が世界座標と一致します。

pixel-coordinate-explain

ピクセル座標は、ピクセル(要素)の中心を基準にする方法もあります。この場合、画像の領域の左上隅は、(-0.5,-0.5)になります。目的に応じて使い分けるのが良いと思います。以下のサイトがとても参考になります。
マイクロソフトのDirectXの座標系の説明

ピクセルのイメージで、ピクセル座標を整数しかとらない座標と考えてしまうと、おかしくなってしまいます。ピクセル座標は、実数で表される通常の座標と同じであり、そのなかにピクセルという要素(セル)が張り込まれいるだけである、と考えると分かりやすいかもしれません(少なくとも地図画像を扱う限りは…)。