地図表示の高速化
FLand-Aleは地図表示の高速化を以下のように行っています。1.ブロック化
地図データを緯度経度のブロック化し地球全体で27分割、さらに日本部分を11分割する。そして地図表示時は以下の処理を行う。
1)地図表示範囲に含まれるブロック番号を求める
2)該当するブロックの地図データのみ表示を行う。
3)海岸線・標高線で複数ブロックにまたがり、一部のブロックのみ表示する場合、表示しないブロック部分はそのブロックの淵を経由するデータにする。
2.データの間引き
地図の縮尺・表示精度によりベクトルデータの間引きを行う。
'ポイント間隔を設定する
If mSpmap Then '詳細地図か?
sph = PSTEPSP
Else
sph = PSTEPNR
End If
If HyojiStyle = HS_NORMAL Then
m_Pstep1 = (PSTEP1 / .picbai) / sph '縮尺により連動
m_Pstep2 = (PSTEP2 / .picbai) / sph
Else
m_Pstep1 = (PSTEP1B / .picbai) / sph
m_Pstep2 = (PSTEP2B / .picbai) / sph
End If
Select Case mMapSeido '精度により修正する
Case 0: mms = MMS0
Case 1: mms = MMS1
Case 2: mms = MMS2
End Select
m_Pstep1 = m_Pstep1 * mms
m_Pstep2 = m_Pstep2 * mms
3.計算の高速化
(1)三角関数で固定値となるものは定数で行う。
Private Const mATN1P45 = 0.0174533 'atn(1)/45
(2)浮動小数計算はなるべく行わない。整数化できるものは整数化してから計算を行う。
4.同じ種類ごと処理
市町村などアイテムの表示はそれぞれアイテムごとに描画する。ピクチャーボックスの色・フォントサイズなど変更に時間がかかるため。
For kakujun = KAKU_END To 0 Step -1 '島から描いていく
If mPshskub(kakus) Then '961121
z_Fontset kakus, mPshskubMp(kakujun), mMappic '種別ごとにフォントと色を設定する。
Select Case mPicprn
Case 1
Set prx = New CPolyPrn
End Select
For j = 0 To ii 'すべてのアイテムから
If mPsno(j).kaku = kakus Then '今回処理の種別なら
z_Psetshspp_pic j,
mPicprn, mPshskubMp(kakujun)
End If
Next

