各種の値を格納する名前と関数を定義する

Sheet1にはすでに住所録があるものとし、Sheet2に以下の名前を定義しておきます。

表4.Sheet2の名前定義

名前 セル 内容
latitude B1 取得した緯度を格納する
longitude B2 取得した経度を格納する
zoom B3 スピンボタン(後述)の値(0~21)が格納される
roadmap B4 オプションボタン(後述)の状態(TRUE/FALSE)
satellite B5 (同上)
terrain B6 (同上)
hybrid B7 (同上)
move B8 地図の1辺の半分(赤道の経度1度を地図上の1とした単位)
yposC B9 地図の中心のy座標(〃)
yposN B10 地図の上辺のy座標(〃)
yposS B11 地図の下辺のy座標(〃)
latN B12 地図の上辺の緯度
latS B13 地図の下辺の緯度
lngEtmp B14 地図の右辺の経度(仮、180度より大きいこともある)
lngE B15 地図の右辺の経度(上記を補正)
lngWtmp B16 地図の左辺の経度(仮、-180度より小さいこともある)
lngW B17 地図の右辺の経度(上記を補正)

名前の意味は、下図も参照してください。

図4.Googleマップと緯度・経度の関係図

また、moveからlngWには、以下のように関数を設定しておきます。 メルカトル図法において、経度に関する計算は比較的簡単ですが、緯度に関する計算は難解です。まずは、こうやって計算できるものと考えてください。

表5.Sheet2の関数設定

名前 設定する関数
move =360*2^(-zoom)
yposC =ATANH(SIN(RADIANS((latitude))))
yposN =yposC+RADIANS(move)
yposS =yposC-RADIANS(move)
latN =DEGREES((ASIN(TANH(yposN))))
latS =DEGREES((ASIN(TANH(yposS))))
lngEtmp =longitude+move
lngE =IF(lngEtmp<=180,lngEtmp,lngEtmp-360)
lngWtmp =longitude-move
lngW =IF(lngWtmp>=-180,lngWtmp,lngWtmp+360)

最終的に、以下のような名前定義と関数設定ができていればOKです。

図5.Sheet2の名前定義と関数設定