QGISの重み付きポイントから密度マップを作成する最良の方法は何ですか?


18

ArcGISカーネル密度ツールの機能を繰り返したいのですが、どうすればよいですか?

簡単にインストールできるフリーでオープンソースのソフトウェアへの回答制限したいと思います。つまり、QGISはすべてのプラットフォームでGRASSを使用して簡単にインストールできるため、QGIS + GRASSは問題ありませんが、SAGAはそうではありません(残念ながら、理想的なツールである)。

QGISの保護地域全体の野生生物の密度マップを作成しようとしています。次の例の密度マップは、ArcGISで野生生物のポイント観測から作成され、グループ密度(ベクトルファイルのフィールド)の生のカウントを使用して、カーネル密度(SpatialAnalyst)ツールで各グリッドセルの密度を重み付けします。選択した検索半径とグリッドセルサイズ:

5x5kmのグリッドセルと半径7.5 kmのカーネル密度を持つカフエ国立公園の野生生物密度

密度に関する以前の質問では、GRASS v.kernelツールを使用してArcGISカーネル密度ツールを模倣することが提案されましたが、v.kernelは同じ仕事をしませんマニュアルを見て、(成功して)密度マップを作成した後、v.kernel関数はポイント密度でのみ機能し、各ポイントに重みを付けるために各ポイント(rawカウントなど)に変数を与える機会がないようです。

更新

*.surf.*GRASSには、密度サーフェスの作成に役立つさまざまなツールがあるようです。これらのツールは、重み付け列またはZ値を受け入れるか、ラスタで実行されます。@underdarkはv.surf.rstを提案しました-そして、「zcolumn」は私の重み(カウント)変数になります-しかし、特定のグリッドサイズを作成するか、特定の半径を使用するようにツールに依頼する方法がわかりません。

v.surf.rstまたはその他の方法の使用方法に関する提案


サンプルデータ

x,y,count
431250,8707500,0
418750,8707500,5
413750,8707500,3
411250,8707500,1
408750,8685000,0
411250,8685000,0
416250,8685000,0
416250,8682500,6
411250,8682500,3
418750,8680000,0
433750,8677500,3
421250,8677500,0
423750,8675000,1
431250,8672500,0
428750,8672500,2
426250,8672500,2
423750,8670000,0

入力データをもっと説明できますか?v.surf.rstはv.kernel grass.osgeo.org/gdp/html_grass64/v.surf.rst.htmlよりも適切かもしれません。上記のグリッドセルごとに1つのカウント値がありますか?
暗闇

@underdark-サンプルデータを追加しました。カウント(表示されている象の数)を含むポイントデータであり、グリッドセルごとに複数の観測値が存在する場合があります。通常、ArcGISでは、「カウント」がカーネル密度ツールの「人口」フィールドになります。
シンバマング

考えれば考えるほど、v.kernelがユースケースに適しているとは思いません。文献を確認しましたか?この場合、どの方法が適切かについて最初に質問することもできます。
暗闇

私の主な質問は、既知の方法であるArcviewのカーネル密度の機能をどのように繰り返すかです。あなたは正しい、v.kernelはそれを行うための適切なツールではないことはほぼ間違いない!
シンバマング

@underdark、ありがとう-私は助けになるかもしれない質問をいくらか拡大しました。v.surf.rstは適切に見えますが、その使用に関するガイダンスを使用できます。
シンバマング

回答:


8

そのマニュアルページによると、GRASSコマンドr.resamp.filterがために行いますポイントデータを表すラスタのArcGISが対応致します正確に何ポイントレイヤー:使用filter=box「単純な」ラスターのためのオプションを使いfilter=gauss他のArcGISカーネル用のオプションを選択します。-nフラグを使用して、ヌルの伝搬を回避します。


カーネル密度の推定値(別名「ヒートマップ」)はデータの補間ではないことに注意してください 位置xでのKDEの値は、xの近くの単位面積あたりの値「Z」の量を推定します。(半径または「帯域幅」は、「近く」の意味を定量化します。)Zの値は、マップ上のすべての可能な場所で定義する必要はありません。たとえば、Zは人などの存在を表す場合があります。その場合、KDEは人口密度を示します。Zの値は、マップ全体で連続的に変化する必要もありません。補間のために、それは想定しているZをはすべての場所で定義され、データは指定されたポイントでのZの値の観測値であることを示します。補間器は、他のすべての点で観測されていないZの値を予測しようとします。とき、これは理にかなってZは、たとえば、温度や圧力であるが、とき、通常は無意味であるZは、データが完全国勢調査のときに何かの存在を記録したり。(後者の場合、ある地域の道路密度マップが意味するものと、道路以外のエリアにまたがる道路を「補間」する意味を理解する方法を考えてください。)


GRASSツールボックスにr.resamp.filterがないようです(OS X、GRASS 6.4)。しかし、あなたがそれを言及するまで、私は「ヒートマップ」がKDと同じことだとは思いませんでした。表面全体を補間していると仮定しました。QGISのRaster | HeatmapツールはKDを実行しますか?「減衰率」とは何ですか?
シンバマング

「ヒートマップ」という用語は、GISで元の意味からほとんどすべてのラスターのようなマップを一般的かつ漠然と指すものに採用されたと思います。GISが元の意味と一致する機能を提供しているとは思えません。
whuber

調査時に、減衰率を0に設定すると、QGISのヒートマップツールはArcのKDと同様の処理を行います(半径の端で密度を0にテーパリングします)。いくつかの違いがあるようです:計算されたセル値は25倍高い(半径5km / 2.5kmセル)、関数がセルに適用される方法と同様-Arcは実際のポイントの周りの半径を使用しているようですが、QGISは重複するセルを選択しますそのポイントから先細りになります。
シンバマング

2
よく使用される「ヒートマップ」は多くのことを意味しているようです-周りを見てみると、補間されたサーフェス、カーネル密度、平滑化されていないピクセルの単純なカラーリングにも適用されます。元の使用法/履歴に関する興味深い論文– QGISツールのラベル付けには、より正確な用語を使用する必要があるようです。
シンバマング

3
@Simbamangu r.resamp.filterはGRASS 7新しく追加されましたが、OS Xの月ごとのスナップショットがあります。また、ヒートマップツールは密度分布のアルゴリズムの選択肢を提示していないようであるため、カーネル密度またはr.resamp.filterと正確に同等ではないと思います。
トルスティ

3

SAGAのモジュール「カーネル密度推定」はあなたが探しているものです。

QGISにSAGAモジュールインターフェースをインストールし(メニュー:[プラグイン]-> [Fetch Pythonプラグイン])、モジュールを使用します。幸運を!


私はSAGAを使用したいのですが、OSX 10.7で作業しており、まだ正常にビルドできていません(OSXのバイナリはありません)。最近、複数のコンパイル方法を試してみましたが、ビルドは常に失敗します。
シンバマング

次に、OSX 10.7でのSAGAコンパイルについて質問する必要があります。私が見るように、SAGAはArcGIS KDツールに代わる唯一の合理的な代替手段です。
ウラジミール

3

カーネル密度よりもArcMapのポイント密度に近いGRASS GISを使用した非常に単純な方法:

  1. r.in.xyz指定されたラスター解像度でmethod = sum を使用して、ポイントをラスターマップにインポートします(で設定g.region)。

  2. 使用r.neighbors方法と地図=(デフォルト)平均を平滑化し、検索半径を設定するためのオプションのサイズを使用します。

(現時点ではGRASSにアクセスできないので、実際にはこれを試していない!)


v.in.xyzまた、動作するv.neighbors可能性があります。v.neighborsただし、マニュアルでは、どの属性を使用するかを設定する方法は指定されていません。
トルスティ

2

v.surf.rstの詳細なガイダンスをリクエストしたので、ここに私の入力を示します

最初に、グリッドサイズについて-プラグイン-> GRASS-> Edit Current GRASS regionを使用して、出力解像度を設定します。v.surf.rstからの出力にはその解像度があります。

半径については、「張力」がパラメータのようです。私はこのアルゴリズムの専門家ではありませんが、マニュアルから読むと、これは関連するビットのようです

「...高張力は「ポイント間の距離を広げる」と各ポイントの影響範囲を狭め、低張力は「距離を減らす」とポイントは長距離にわたって相互に影響します。)

したがって、半径パラメーターを使用するのとほぼ同じように、張力パラメーターを使用できます。

サンプルデータから、v.surf.rstの結果は以下のようになり、カウントを補間の重みとして使用していることを考えると妥当なようです。

ここに画像の説明を入力してください


1
これに感謝します-ヘルプページよりもはるかに理解しやすいです。ただし、@ whuberで前述したように、補間はこの種のポイントサンプルデータには適切な方法ではありません。
シンバマング

2

私はそれをテストしていませんが、QGIS Contributorsリポジトリには「Rを使用したホーム範囲推定」と呼ばれるプラグインがあります。これには、カーネル(密度?)計算が含まれます。うまくいけば、これが最良の方法だと思います。Rは、カーネル密度を計算する実際の統計的方法を実行します。

Rをインストールしている場合は、プラグインをインストールして試してみることができます。


1

qgis以外でJavaプログラミングを少し行うことに同意する場合は、この密度マップビルダーライブラリを使用できます

constructorを使用するとHeatMapBuilder(int w, int h, int[][] pts, int[] weights)、必要に応じて各ポイントに重みを付けることができます。出力イメージはgetImage()メソッドで取得し、でディスクに保存できますImageIO.write("mymap.png")

出力の例を次に示します。

opencarto javaライブラリを使用したヒートマップ

スムージング強度とカラーパレットを変更することができます。

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