Google Maps の GTileLayer() を扱うために

GTileLayer では、getTileUrl()の返り値を URL として画像を取りに行き、他のレイヤーと重ねてくれます。getTileUrl()は自前で実装する必要があります。また、これに連動する画像提供サーバも必要となります。

getTileUrl(point,zoom) で渡される引数 point と zoom の意味は、次の通りです。
pointは、GPoint型で、取得される画像単位(ピクセル単位ではない)での横位置、縦位置を示します。座標系は左上隅を原点としています。
zoomは、整数型で、値が1つ大きくなると、地図のサイズが2倍になります。
このため、point位置における画像の、地図全体から見たオフセット値(ピクセル単位)は

X : point.x * 256
Y : point.y * 256

になります。
以前 X : point.x * 256 * 2**zoom等としていたのは、間違いです。お詫びして訂正します。


緯度経度で位置情報を持つ図形を重ねたい場合には、画像の生成が必要となり、そのためには、緯度経度から、getTileUrl() で取得しようとしている画像上でのピクセル単位の位置への変換が必要になります。
緯度経度から地図全体から見たピクセル単位の位置は、次のように計算します。

X : (256 * zoom**2) / 2 + lon * (256 * zoom**2) / 360
Y : (256 * zoom**2) / 2 + 0.5 * log( (1+sin(phi))/(1-sin(phi)) ) * (-(256 * zoom**2)/(2*M_PI))

ここで、lonは経度(度)、phiは緯度(ラジアン)、M_PIは円周率をそれぞれ示します。
この値から、先ほど出したオフセット値を引いてやると、getTileUrl() で取得しようとしている画像上でのピクセル単位の位置が出ます。
あとは、このピクセル位置に基づいて、線を引いたり塗りつぶしたりした画像を作成するだけです(gd使えば早いです)。