如何取一組包含任意值的多邊形並創建一個對應的位圖,其中每個像素包含該位置的多邊形值?如何將一組多邊形轉換爲位圖
爲了說明問題,我的多邊形包含有關多邊形內每平方公里平均人數的信息。我需要創建一個光柵/位圖,其中包含代表200米箱內人口的像素。
我在過去曾做過類似的事情,我使用多邊形通過繪製位圖並填充值來創建遮罩,然後將位圖轉換爲可操作的數組。我相信這樣做有更好的方法!
我按照要求澄清了這個問題。
- 有多個多邊形,每個多邊形是一組向量
- 每個多邊形將有單個唯一的值
- 多邊形不重疊
由於
尼克
如何取一組包含任意值的多邊形並創建一個對應的位圖,其中每個像素包含該位置的多邊形值?如何將一組多邊形轉換爲位圖
爲了說明問題,我的多邊形包含有關多邊形內每平方公里平均人數的信息。我需要創建一個光柵/位圖,其中包含代表200米箱內人口的像素。
我在過去曾做過類似的事情,我使用多邊形通過繪製位圖並填充值來創建遮罩,然後將位圖轉換爲可操作的數組。我相信這樣做有更好的方法!
我按照要求澄清了這個問題。
由於
尼克
@Nick [R
我本來使用ArcGIS 9.2,但是這並不能很好的C#和64位工作,所以現在我使用GDAL(http://www.gdal.org) 。
是不是gdal_rasterize做到了你想要的?
ImageMagick可以從svg轉換爲png,也許你可以看看代碼,或者只需創建svg並使用IM進行轉換? Scruffy這樣做。
您使用的是什麼GIS軟件? ArcGIS在ArcGIS 9.2或更高版本中提供了「多邊形轉柵格」工具,它可以編寫爲PolygonToRaster_conversion函數。
PolygonToRaster_conversion (in_features, value_field, out_raster_dataset, cell_assignment, priority_field, cellsize)
我最初使用ArcGIS 9.2,但這不適用於C#和64位,所以我是現在使用GDAL(http://www.gdal.org)。雖然答案很好。 – 2008-09-12 12:28:49
這可能不是你所需要的,但如果你想畫一個多邊形(或相反多邊形的基礎上讀出一個多邊形圖像的像素),那麼一個解決方案是推出自己的polygon fill tool。坦率地說,這是一個有趣的樂趣,並且非常好學。
但你的問題對我來說不是很清楚。你能給出一個更好的描述嗎?
- 亞當
我已經添加了一些澄清的問題 - 希望這可以更容易地回答! – 2008-09-12 12:31:29
這是一個有趣的項目。這裏是我會做什麼,假設多邊形是凸:
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的邊所組成的,它應該點亮沒有像素。另一個測試是如果你有一個2單位高的平行四邊形,它的頂部和底部邊緣是2個單位寬,它應該正好點亮4個像素。
如果多邊形不是凸的,則有點不同。無論邊線與光柵線相交,將所有像素從那裏切換到任意選擇的X座標,例如「屏幕」的左邊緣。當你完成所有的邊界時,只有內部像素會被切換奇數次。
實現類似這樣的功能,支持自相交,並避免遍歷每條柵格線的所有邊 - http://stackoverflow.com/a/31768384/432509 – ideasman42 2016-09-12 17:17:58
從這個問題的一些答案可能是有趣的:http://stackoverflow.com/questions/1341399 – ideasman42 2016-09-12 17:18:41