如何取一组包含任意值的多边形并创建一个对应的位图,其中每个像素包含该位置的多边形值?如何将一组多边形转换为位图
为了说明问题,我的多边形包含有关多边形内每平方公里平均人数的信息。我需要创建一个光栅/位图,其中包含代表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