どのような保存方法を使用すると、レンダリング用のマップベクトルを最も速く読み取ることができるのでしょうか。SHP?PostGres?SQLite?(これらは頻繁には変更されず、これらのベクトルに空間関数は必要ありません)。
どのような保存方法を使用すると、レンダリング用のマップベクトルを最も速く読み取ることができるのでしょうか。SHP?PostGres?SQLite?(これらは頻繁には変更されず、これらのベクトルに空間関数は必要ありません)。
回答:
このプレゼンテーション(2007年)には、MapServerのシェープファイルとデータベース(PostGIS)の非常に高速なテストがいくつかあります。
要約すれば:
また、時間の詳細も、ストレージフォーマットが重要な要素であるかどうかを判断するのに役立ちます。
PostGIS Shapefile
Start mapserv process 15ms 15ms
Load mapfile 3ms 3ms
Connect to DB 14ms n/a
Query 20ms n/a
Fetch 7ms n/a
Draw 11ms 28ms
Write Image 8ms 8ms
Network Delay 3ms 3ms
データベースを使用する場合は、データベース接続を再利用できるため、常にMapServerでFastCGIを使用してください。そうしないと、リクエストごとに新しい接続を作成する必要があります。
シェープファイル(およびデータベースからのデータ)を読み取る速度は、特定のコーディング実装によって異なります。
シェープファイルを開くMapServerのソースコードは、こちらにあります。コメントに続いて、インデックスを持つことの重要性を確認できます。通常、レコードを取得するにはファイルを一方向にしか読み取ることができませんが、インデックスを使用すると、双方向に読み取ることができます。
345 /* Read the .shx file to get the offsets to each record in */
346 /* the .shp file.
もう1つは、PyShpのPythonソースでシェープファイルを開く例です。ここでも、特定の形状を直接検索するためにインデックスがどのように使用されているかを確認できます。
データベースを使用するかどうかを決定するときは、DBF形式の制限(フィールドサイズの制限、nullサポートなし、テキストストレージの制限)も考慮する必要があります。
データベースは、データを保護する手段、ビューの簡単な結合と作成、ロギング、およびスタンドアロンファイルでは得られない他の多くの機能も提供します。
ダリアプラの言うこととは逆に、Maperitiveの開発における私の経験から、レンダリングの前にデータを実際にロードすることが最大のボトルネックであることがわかりました。保存されるデータセット全体の大きさと、一度にレンダリングしようとしているデータセットの大きさに大きく依存します。すべてをメモリにロードできる場合、シェープファイルはデータベースエンジンを使用するよりもおそらく優れています。
レンダリングにどのプログラムを使用しますか?これは結果に影響を与える可能性があります。とにかく、使用される空間インデックス(例:http : //mapserver.org/utilities/shptree.html)を備えたシェープファイルを持つこと は、多くの場合最速のテクニックです。それとは別に:アプリケーションによって異なりますが、レンダリングされた結果をキャッシュすることは、多くの場合、パフォーマンスを向上させるのに非常に役立ちます。
シェープファイルが最も速く、おそらくあなたの最善の策です。SQLデータベースにはオーバーヘッドがあり、大きな結果セットの戻りを管理します(データベースのデータ型からネイティブのデータ型への変換も遅くなります)。
読み取りを行うには、maptools.orgのオープンソースパッケージを使用してみてください。ArcGISツールは、目的に応じて作成されていますが、開始するには少しオーバーヘッドがあり、コストがかかります。
お役に立てれば