一連のポリゴンをビットマップに変換するにはどうすればよいですか
-
09-06-2019 - |
質問
任意の値を含むポリゴンのセットを取得し、各ピクセルにその位置のポリゴンの値が含まれる対応するビットマップを作成するにはどうすればよいですか?
質問の内容を具体的に説明すると、私のポリゴンには、ポリゴン内の平方キロメートルあたりの平均人数に関する情報が含まれています。200 メートルのビン内の人口を表すピクセルを含むラスター/ビットマップを作成する必要があります。
私は過去に同様のことを行ったことがあります。ポリゴンを使用してビットマップに描画して値を埋め、そのビットマップを操作可能な配列に変換することでマスクを作成しました。これを行うためのより良い方法があると確信しています。
リクエストに応じて質問をもう少し明確にします。
- 複数のポリゴンがあり、各ポリゴンはベクトルのセットです
- 各ポリゴンは単一の一意の値を持ちます。
- ポリゴンは重なりません
ありがとう
ニック
解決
@ニックR
もともと ArcGIS 9.2 を使用していましたが、C# と 64 ビットではうまく機能しないため、現在 GDAL を使用しています (http://www.gdal.org).
しません gdal_rasterize まさにあなたが望むことをしますか?
他のヒント
どのような GIS ソフトウェアを使用していますか?ArcGIS では、ArcGIS 9.2 以降で Polygon to Raster ツールを提供しており、PolygonToRaster_conversion 関数としてスクリプト化できます。
PolygonToRaster_conversion (in_features, value_field, out_raster_dataset, cell_assignment, priority_field, cellsize)
これはおそらく必要なものではありませんが、ポリゴンを描画したい場合(または逆に、ポリゴン画像のピクセルをポリゴン単位で読み取りたい場合)、解決策の 1 つは独自のロールを作成することです。 ポリゴン塗りつぶしツール. 。率直に言って、これはとても楽しいものであり、学ぶのは本当に素晴らしいことです。
しかし、あなたの質問は私にはあまり明確ではありません。もっと良い説明をしてもらえますか?
- 任意のポリゴンのセットは実際の画像ですか、それともベクトル (つまり、点のリスト) 点ですか、それとも ???
- 各ポリゴンには 1 つの値がありますか、それとも描画しようとしている値の配列が各ポリゴンにありますか?
- 各ポリゴンには、基本的にポリゴンのテクスチャに使用する人口値の配列が関連付けられているということでしょうか?
-アダム
楽しいプロジェクトです。ポリゴンが凸であると仮定して、私が行うことは次のとおりです。
have a NY * 2 array of x positions: int x[NY][2]
foreach polygon
clear the array to -1
for each edge line
foreach horizontal raster line iy intersecting the line
generate ix, the x position where the raster intersects the line
if x[iy][0] == -1, set it to ix, else set x[iy][1] to ix
end foreach iy
end foreach edge
foreach iy
fill the pixels between x[iy][0] and x[iy][1] with the polygons label
end foreach iy
end foreach polygon
これは思っているより少し難しいです。ラスター座標をラベル付けされるピクセルとしてではなく、それらの間の目に見えない線として考える精神訓練が必要だからです。そうしないと、境界の問題で混乱してしまいます。
これを適切にテストするには、点 A から点 B へ、そして点 A に戻るエッジで構成されるような、面積がゼロのポリゴンがある場合、ピクセルは点灯しないはずです。もう 1 つのテストは、高さが 2 単位、上端と下端の幅が 2 単位の平行四辺形がある場合、正確に 4 ピクセルが点灯するはずです。
ポリゴンが凸でない場合は、少し異なります。エッジがラスター ラインと交差するたびに、すべてのピクセルをそこから任意に選択した X 座標 (「画面」の左端など) に切り替えます。すべてのエッジを完了すると、内側のピクセルのみが奇数回切り替わります。
ImageMagick は svg から png に変換できます。コードを見てみるか、単純に svg を作成して IM を使用して変換することもできます。 みすぼらしい そうします。