各種の値を格納する名前と関数を定義する
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 | 地図の右辺の経度(上記を補正) |
名前の意味は、下図も参照してください。
また、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です。

