Bubble://ちずろぐ/別館/
ホーム  Bubble://ちずろぐ/本館/  ログイン
メインメニュー

ログイン
ユーザー名:

パスワード:


パスワード紛失


検索

オンライン状況
6 人のユーザが現在オンラインです。 (6 人のユーザが GISドキュメント を参照しています。)

登録ユーザ: 0
ゲスト: 6

もっと...

なかのひと

Top / kaMapCheck

ka-Map?の動作チェック


 ka-Map?のセットアップ後,最初に行う簡単な動作チェックを説明します。

初期動作チェック

init.phpの実行

 ウエブブラウザに直接URLを入力してjavascriptのコードが返ってくるかどうかを確認します。

http://xxx.xxx.xxx/xxx/init.php

 これで,以下のようにjavascriptによるレイヤ情報が表示された場合には,config.phpの構文に関しては問題ありません。

/*init*/aszScales=new
Array('100000000' ... 以下中略 ...
'tile.php';this.selectMap('SRTMv2Shaded1');

 エラーが表示されたり何も表示されない場合には,config.phpの内容や構文ミス等がある可能性があります。

tile.phpの実行

 前節のinit.phpの確認と同様に,ウエブブラウザから直接tile.phpを呼び出します。

http://xxx.xxx.xxx/xxx/tile.php

 これで,地図の画像データが表示されます。

 エラーが表示された場合には,config.phpの内容や構文ミス等がある可能性があります。その他config.phpやmapfile内のパス設定,各ディレクトリのパーミッションの確認等も行ってください。

config.phpのパスやファイル名を変更した場合

 config.phpファイルはka-Mapの色々なファイル内でinclude_onceされています。

grep * -r -e 'config.php'

等により,必要となるファイル全てのconfig.phpの記述を探し出し,変更後のパスや名称に書き換える必要があります。

 既存のka-Mapディレクトリをコピーして別のマップを作成する場合,config.phpの名称を変えて新たに作成する場合がありますが,この場合include_onceの記述を全て書き換えないと,変更前の地図(旧config.phpの設定)が表示される等の問題が発生します。

precache_wget.phpの削除

 ka-Mapのドキュメントツリートップにあるprecache_wget.phpはブラウザ経由でキャッシュ画像を生成するプログラムです。運用時には以下のような対応を行い,任意のユーザーが実行することを避ける必要があります。

  • precache_wget.phpを削除する
  • precache_wget.phpのパーミッションを変更しウエブユーザーがアクセスできないようにする
  • precache_wget.phpの拡張子を変更する

キャッシュ画像ディレクトリのパーミッション

 キャッシュ画像を作成するときは,キャッシュ画像ディレクトリにはウエブユーザの書き込み権限を与える必要がありますが,全てのキャッシュ画像が生成済みであり,かつユーザー側からのリクエストによるキャッシュ画像の生成を行わない場合は,キャッシュ画像ディレクトリの書き込みを禁止にすることを検討してください。これで,意図しないリクエストパラメータの送信による画像の再作成を防ぐことが可能です。

 キャッシュディレクトリは以下の階層構造になっています。

マップ名/スケール/グループ名
         /グループ名
         /...
     スケール/グループ名
         /グループ名
         /...
         ...

 "マップ名"のディレクトリは,config.php内で

$aszMapFiles = array( 'マップ名' => $val);

として割り当てられた名称で作成されます。

 "スケール"のディレクトリはconfig.php内で

$val = array (
  'title'  => 'マップタイトル',
  'path'   => 'mapfile.map',
  'scales' =>  array(2000000,
                     1000000,
                      500000),
  'format' =>'PNG24'
);

として$val['scales']に設定されたスケールがそのままディレクトリ名となります。

 "グループ名"ディレクトリは上記の$val['path']で設定されたmapfile内のGROUPタグの名称がディレクトリ名となります。

LAYER
    NAME  "sample_layer"
    GROUP "sample_group" # この名称がディレクトリ名となる
    STATUS OFF
    TYPE RASTER
    DATA  "XXXX.tif"
    ...
END

precache.php関連

ポイント

 precache.phpはきちんとmapfileやconfig.phpのパラメータを整合をとってくれるわけではないようです。
 precache.phpを使用して意図しない画像が作成される場合には,ウエブサーバのログに書き出されるリクエストをチェックし,tile.phpに渡されているパラメータが正しいかどうかを確認することが解決への早道となります。
 precache.php実行時とブラウザ上で表示した場合のtile.phpへのパラメータが一致しているかどうかを確認してください。

キャッシュ画像枚数の確認

 precache.php等で画像を生成する場合には途中でエラーとなることがあります。同一スケールディレクトリ以下の各グループディレクトリ内の画像枚数は,全て同数となるため画像の枚数を確認することが簡単なチェックとなります。
 設定時には何度もキャッシュ画像生成をやり直すこともあるため,以下のようなスクリプトあらかじめ作成しておくと,画像枚数が多い場合には楽になります。

find グループ名ディレクトリ/ -name *.png -print | wc -l

 precache.phpでは実行時に1グループレイヤあたりの作成する画像枚数を標準出力しますが,この枚数と上記のfindコマンドの結果が一致していない場合には,正常に画像が作成されていない可能性があります。

precache.phpのエラーを詳細に出力する

 precache.php内のfile_get_contents()関数を呼び出している箇所を修正します。

// 変更前
if(!@file_get_contents($theURL)) {
// 変更後
if(!file_get_contents($theURL)) {

 PHPでは関数名の直前に@マークをつけることで,その関数のエラー出力を抑制することが出来ます。@をはずすことでfile_get_contents(この関数でtile.phpへのリクエストが送られています)で発生したエラーを見ることが出来ます。

レイヤグループ毎に異なる画像形式(メタタグimageformat)を設定している場合

 次節参照

precache.php作成した画像フォーマットとブラウザ経由で作成した画像フォーマットが異なる

 config.phpとmapfileのメタタグ"imageformat"で画像形式が異なる場合,precache.phpでキャッシュ画像を生成すると以下のような症状が出ます。

  • 全てのキャッシュ画像をprecache.phpで生成したはずなのに,ブラウザからアクセスすると再度キャッシュ画像を生成する
  • precache.phpて生成した画像とウエブブラウザ経由で生成される画像の形式が異なる

 config.phpにおける画像形式とmapfile内の画像形式(LAYERディレクティブ内のメタタグ"imageformat"で指定)が異なっている場合に発生します。一部のレイヤグループの画像形式を変えている場合も問題になります。
 precache.php(正確にはパラメータで渡すtile.php)ではメタデータの画像形式は反映されずconfig.php内の設定のみを見るようです。
 tile.php内ではi=XXXパラメータがセットされている場合には,個別に画像形式を変更しますが,precache.phpを経由する場合には簡単なコードの修正ではうまくいきそうもありません。
 現状での対応方法ですが,レイヤーグループ毎に画像形式が異なる場合には,config.phpのformatを手動で書き換えて,レイヤグループ毎にprecache.phpを実行するしかなさそうです。

画像フォーマットとしてAGGAを指定している場合に,prechache.phpで作成すると透明部分の情報が失われる。

 ka-MapでのAGGAの使用はこちらのページの手順で設定することで可能になりますが,precache.php経由では画像の透明化部分が失われる(真っ黒になる等)症状が出ます。

 この場合はtile.phpにi=AGGAパラメータを明示的に与える必要があります。precache.phpの $theURL変数に値をセットしている箇所にパラメータを追加して実行してください。

// 変更前
$theURL = $tileURL...中略...urlencode($groupName) . $forceOpt;
// 変更後
$theURL = $tileURL...中略...urlencode($groupName) . '&i=AGGA' . $forceOpt;

 AGGA以外のレイヤーを作成する場合には削除することを忘れないでください。

mapfileにメタタグ"version"を設定している場合

 precache.phpでキャッシュ画像を作成する場合にはversion情報をセットしないので,mapfileでversionを指定している場合には,ブラウザからのアクセス時にキャッシュ画像を使用せずに再作成してしまいます。

全てのキャッシュ画像が生成されない

 データ容量が大きい場合や処理時間が長い場合に途中で処理が中断している可能性があります。PHPやApacheの設定を確認してください。

 php.ini内のチェック箇所は以下のとおりです。

default_socket_timeout

変更の可否:PHP_INI_ALL
デフォルト値:60等

ソケットベースのストリームの有効時間(単位は秒)を設定。
memory_limit(スクリプトの最大使用メモリ容量)

変更の可否:PHP_INI_ALL
デフォルト値:8M, 16M, 128M等

スクリプトが確保できる最大メモリをバイト数で指定します。
-1を指定すると制限無し。
正しく書かれていないスクリプトがサーバーのメモリを食いつぶすことを防止する
ための設定です。
max_execution_time(スクリプトの最大実行時間)

変更の可否:PHP_INI_ALL
デフォルト値:30, 300等

スクリプトに許される最大実行時間(単位は秒)。
サーバの負荷上昇を抑えるための設定です。
max_input_time(スクリプトの最大パース時間)

変更の可否:PHP_INI_PERDIR
デフォルト値:-1,60等

これは関係無いかもしれませんが念のため...
スクリプトが POST、GET、ファイルアップロードなどの入力をパースする最大時間
(単位は秒)

 また上記のmax-execution-timeに関連してapacheの設定も確認する必要があります。

 httpd.conf(環境によってはapache2.conf)内のチェック箇所は以下のとおりです。

TimeOut
リクエスを失敗とするまでにサーバが待つ時間

参考資料

lost transparency using precache.php with agg-support - solution


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Counter: 1698, today: 3, yesterday: 3
Last-modified: Fri, 07 Nov 2008 17:23:39 JST (664d)
Powered by Bubble (c) 2006-2008
Theme Designed by Bubble(Original Theme Designed by OCEAN-NET)
このサーバはここの近くにあります。