巨大なラスター時系列用のWebマッピングソフトウェアですか?


11

私は、Webマッピングの世界に初めて足を踏み入れたArcGIS Desktopユーザーです。ここでGIS.SEで見つけたアドバイスに従って、OpenGeoからの無料のチュートリアルから始めました。

しかし、デモと例のほとんどがベクトルデータ向けであることを認識し始めました。私の主なプロジェクトには、5000 x 5000ピクセルのラスターの300フレーム時系列の表示が含まれます。私のデスクトップコンピューターでは、これらは単一の5000x5000x300 16ビット整数BIPバイナリ(合計約8GB)に保存されています。 私の目標は、セル(時系列の1つのラスター)をクリックし、300要素の時系列のそのピクセルの値を示すグラフをポップアップ表示できるようにすることです。 各時系列グラフに使用されるラスターデータは可逆的に保存する必要がありますが、クリックされるオーバーレイマップは非可逆キャッシュになる場合があります。

OpenGeoよりも、このプロジェクト(初心者のWeb GIS開発者)に適しているものはありますか?それとも、このセットアップを続けるべきですか?

参考までに、Python、Java、およびPHPのプログラミング経験があります。SQLの経験はあまりありません。これはオープンエンドのプロジェクトですので、必要に応じて新しい言語を学ぶ時間は十分にあります。GoDaddyはVPSを取得せずにPostgreSQLをサポートしていないため、おそらくホストを切り替える必要がありますが、既にWebサーバーを持っています。

ご協力いただきありがとうございます!

編集:(1月13日) 3次元16ビット整数BIPラスターを格納し、データの単一のz軸「列」を効率的に照会できるようにする最適な方法に関する情報をまだ探しています。32ビット形式に変換したくありません(ファイルサイズが現在の16ビット形式から2倍になるため)。


2
PostgreSQL / PostGISをWebサーバーに配置できますか?-スケーラブルなオプションをお探しの場合、Amazon AWS(EC2 Relational Databases AMI)aws.amazon.com/running_databasesがオプションとなる場合を除き、独自のサーバーを使用することを強くお勧めします。
マッパーズ

1
私のホスト(GoDaddy)は、このスレッドによるとPostgreSQLをサポートしていません。スケーラビリティは本当に必要ありません。このプロジェクトは、8GBファイルを送信してENVIにロードするよりも、数人のピア研究者が自分のデータに簡単にアクセスできるようにすることを主な目的としています。
dmahr

1
新しいホストを検討している場合、webfactionを十分に推奨することはできません。それらはpostgresql / postgis1.5を提供しますが、ラスター機能のためにおそらくpostgis2.0が必要です。これも共有ホスティングにあります。
djq

回答:


6

編集:(1月13日)3次元16ビット整数BIPラスターを保存し、データの単一のz軸「列」を効率的に照会できるようにする最善の方法に関する情報をまだ探しています。32ビット形式に変換したくありません(ファイルサイズが現在の16ビット形式から2倍になるため)。

このようなラスターのクエリは、実際には大きな問題にはなりません。すべてのプログラム言語を使用してバイナリデータを直接読み取ることができ、アクセスは高速です。データを別のファイルにすべてのメタデータを持つファイル形式で保存するようにしてください。BIPはそのような形式です

例えば、PHPで、ファイルが行優先であると仮定すると(そうでない場合はxとyを切り替えます)、$ xと$ yはグリッド内の位置(0からカウント)、$ nx、$ nyと$ nzのピクセル数各次元と$ nbグリッドセルごとのバイト数:

$fp = fopen('yourfile.bil', 'r');

fseek ($fp, $nz*$nb*($y*$nx +$x))//this is a very fast operation
// read some data
$data = fread($fp, $nz*nb);//this is also very fast

正しいピクセルにアクセスしていることを確認してください:カウントは左上から開始するかどうか、...

追加情報:データを読み取った後、フロートに変換する必要があります。例えば:

$dataf=unpack("f*", $data);
print_r($dataf);

ホストが大きなファイルのアップロードをサポートしていない場合、たとえば8個のbipファイルにbipファイルを分割できます。

私がウェブサイトの残りの部分をどのように行うかについてのさらなる情報:データは静的なので、gdal2tilesとopenlayersを使用して小さなマップビューアーを生成できます。http://www.gdal.org/gdal2tiles.html 実際、あなたは「私は本当にスケーラビリティを必要としません。このプロジェクトは、いくつかのピア研究者が私のデータに簡単にアクセスできるようにすることです。 ENVIで8GBのファイルとロードそれ「あなたは多分型WebGISツールボックスを使用せずに行うことができます:。ちょうどあなたのユーザーが画像をクリックすると、座標をキャッチしてみましょう:http://www.emanueleferonato.com/2006/09/02/click -image-and-get-coordinates-with-javascript /

(ただし、5000x5000の画像をうまく表示する方法を見つける必要があります)


素晴らしい、これは本当に役立つ説明です。1つのフォローアップ:このバイナリをPostGISに保存する必要がありますか?サーバーがPHPまたはPythonでクエリを実行する前に、データベースからバイナリファイル全体を取り出す必要がある状況を回避したいだけです。それは非常に遅いステップです。
dmahr

いいえ、ファイルはファイルシステム上にある必要があります。データベースを使用しても意味がありません。接続を開くだけでも、おそらく上記のコードよりも時間がかかります。
-johanvdw

7

これは、インフラストラクチャの問題、アーキテクチャの問題、イベント処理の問題という3つの別個の問題のように見えます。考えられるアプローチの1つを紹介しますが、私の答えは必然的に一般的です。

インフラ

サーバーには、Linode(www.linode.com)などのVPSホスティングサービスを使用することをお勧めします。これにより、専門的に保守されているサーバーへの完全な(つまり、root)アクセスが可能になります。電源が切れたり、インターネットへの接続が失われたりする心配はありません。

建築

ここには非常に多くのオプションがあり、本当に圧倒的です。例として、GeoServerとOpenLayersでいくつかのシステムを実行しています。GeoServerはTomcat 7によって提供されます。OpenLayers/ jQueryフロントエンドはApache2によって提供されます。ベクターデータを保存するためにPostgres / PostGISを含めることができますが、これはラスターデータには適していません。Djangoまたはweb.py(http://webpy.org/)を使用して、かなり単純なコントローラー用のPythonシステムをセットアップすることもできます。GeoServerでは、ラスターデータを次の形式で保存できます。

  • ArcGrid-Arc Gridカバレッジ形式
  • GeoTIFF-地理情報を含むタグ付き画像ファイル形式
  • Gtopo30-Gtopo30カバレッジ形式
  • ImageMosaic-画像モザイクプラグイン
  • WorldImage-空間データファイルを伴うラスターファイル

イベント処理

ユーザーがマップをクリックすると、その時点のフィールドデータの時系列プロットがポップアップします。最初に、緯度または経度でurlリクエストをリッスンするコントローラーをセットアップします。コントローラーはPythonまたはJavaで作成できます。このコントローラーは、サーバーでレンダリングされた静的イメージまたはクライアント(jQuery)がプロットに変換できるjsonデータを返します。

次に、マップ上のXYデータを取得するには、次のような関数を使用します(http://dev.openlayers.org/releases/OpenLayers-2.11/examples/click-handler.htmlを参照)。

onClick: function(evt) {
    var clickSpot = evt.xy;
    // pass clickSpot to the controller ...
}

それがお役に立てば幸いです。


記事をありがとう!これらのファイル形式のいずれかを使用して、サイズが8GBを超える3次元ラスターを実行したことがありますか?たとえば、GeoTIFFは4GBを超えることはできません。また、サーバーソフトウェアは、単一のz軸の時系列データを効率的に照会できますか?
dmahr

画像ピラミッドを見てください。これは、ファイルサイズの問題に役立つ場合があります。クリックイベントを処理するとき、コード(コントローラー)はXYデータを受信し、タイムスタンプ付きの300個の画像のそれぞれからz値を検索して抽出します。これは大量の処理とディスクIOであるため、時間がかかる可能性があります。その「ブルートフォース」方式に時間がかかりすぎる場合は、代替アルゴリズムや時系列ストレージスキームを検討できます。
カタディン

ええ、その「強引な」方法は、私が好むよりも遅くなります(デスクトップコンピューターでも遅くなります)。私が見つけることができる最高の代替ストレージスキームを中心にWebマッピングサービス全体を構成することに興味があると思います。
-dmahr

1

あなたの質問を正しく理解したら、たとえばMapServerを使用して、タイムWMSサービスを作成します。

この方法では、各日時の正しいラスターを(GetMapリクエストを使用して)表示し、特定の日時範囲のセルの値を(GetFeatureInfoリクエストを使用して)簡単にリクエストできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.