各種の値を格納する名前と関数を定義する
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です。