C#で地理参照画像を生成する
-
08-07-2019 - |
質問
オープンレイヤーを使用してベースマップ上にオーバーレイするヒートマップスタイルタイルを作成したい。基本的に、いくつかのバウンディングボックスをグリッドに分割し、そのグリッドの正方形内にあるサンプルのポイント数に基づいて、異なる色を使用してグリッドの各正方形を表示します。
関連するテクノロジは、C#、OpenLayers、SQL Server 2008、およびGeoServerです。
私の質問は基本的に一般的なアプローチの1つであり、これにノミの先端をどこに置くかはよくわかりません。
私の最終的な目標は、任意のバウンディングボックスを取得し、そのバウンディングボックス内に収まるxマイルx xマイルのグリッドを計算し、個々のポイントのコレクションを反復処理して1つのグリッドスクエアに割り当てることです。別のように、グリッドの正方形ごとにポイント密度を計算し、密度に応じてグリッドに色を付けてから、オープンレイヤーを使用してCloudMadeベースマップにオーバーレイします。
全体またはその一部について、すべてのヘルプをいただければ幸いです。
解決
境界ボックスが軸に揃えられている場合、これは非常に簡単です。画像を作成し、そのファイル用のワールドファイルを手動で作成するだけです。ワールドファイルはわずか6行のテキストで、必要なものはすべてわかっています(x <!> amp; yピクセルサイズ、左上隅の座標)。
ボックスの角ではなく、左上隅のピクセルのCENTERを使用していることを確認してください。
------ワールドファイルの作成方法は次のとおりです-------
境界ボックスの左上隅が203732x598374で、東が幅200m、北が高さ300mの長方形<!> lt;-<!> gt;が必要な画像があるとします。 !> gt;南。
適切なピクセル数の画像を作成してから、次の6行のワールドファイルを作成します。
200
0
0
-300
203632
598524
これは次のものに対応します:
200 == size of one pixel in X
0 == shear1
0 == shear2
-300 == size of one pixel in Y (from top down)
203632 == left edge - 1/2 pixel size (to center on pixel instead of edge of box)
598524 == top edge - 1/2 pixel size (to center on pixel instead of edge of box)
.png画像を使用する場合、同じ名前で保存しますが、.pgwとして保存します。 .jpgを使用する場合、.jgwなどになります。
詳細については、以下を参照してください。 ワールドファイルに関するウィキ
他のヒント
<!> quot;バウンディングボックスをグリッドに分割し、そのグリッドの正方形内にあるサンプルのポイント数に基づいて異なる色を使用してグリッドの各正方形を表示します。<!> quot;これはラスターであり、これらを表示するためのGeoServerには機能があります。色の濃淡、凡例などがあります。これらの機能を使用する方が、C#で画像タイルを作成するよりも柔軟になると思います。
GeoServerのドキュメントから:
ラスターデータは単なる画像ではなく、 むしろグリッドと考えることができます ジオリファレンスされた情報の多く グラフィックが視覚的なグリッドのように 情報(赤の組み合わせで、 緑、および青)。グラフィックスとは異なり、 視覚データのみが含まれ、それぞれ ラスターグリッド内のポイント/ピクセルは さまざまな属性があり、 おそらくそれらのどれも 本質的に視覚的なコンポーネント。
これは、テーマ別マッピング、等高線プロット、ヒートマップ、または他のGISパッケージの2.5Dプロットとも呼ばれます。
草のような無料のGISをラスターグリッドを作成しますが、説明から補間する必要はありません(すべてのセルに少なくとも1ポイント)ので、独自のコードを簡単にロールバックできます。
左上のピクセルの中心を計算する式は間違っていると思います。この例では、左上のピクセルの中心は(203732,598374)の右下になります。では、次のようにすべきではありませんか?
203832 == left edge + 1/2 pixel size (to center on pixel instead of edge of box)
598224 == top edge - 1/2 pixel size (to center on pixel instead of edge of box)