如何将一组多边形转换为位图
-
09-06-2019 - |
题
如何获取一组包含任意值的多边形并创建相应的位图,其中每个像素包含该位置处的多边形的值?
为了将问题放在上下文中,我的多边形包含有关多边形内每平方公里平均人数的信息。我需要创建一个栅格/位图,其中包含代表 200 米箱内人口的像素。
我过去做过类似的事情,我使用多边形通过绘制位图并填充值来创建蒙版,然后将位图转换为我可以操作的数组。我确信有更好的方法来做到这一点!
我按照要求进一步澄清这个问题。
- 有多个多边形,每个多边形是一组向量
- 每个多边形都有一个唯一的值
- 多边形不重叠
谢谢
缺口
解决方案
其他提示
您使用什么 GIS 软件?ArcGIS 在 ArcGIS 9.2 或更高版本中提供了“面转栅格”工具,该工具可编写为 PolygonToRaster_conversion 函数的脚本。
PolygonToRaster_conversion (in_features, value_field, out_raster_dataset, cell_assignment, priority_field, cellsize)
这可能不是您所需要的,但是如果您想绘制多边形(或者相反地在多边形的基础上读取多边形图像的像素),那么一种解决方案是滚动您自己的 多边形填充工具. 。坦率地说,这非常有趣,而且非常值得学习。
但你的问题对我来说不是很清楚。你能给出更好的描述吗?
- 您的一组任意多边形是实际图像,还是矢量(即点列表)点,还是???
- 每个多边形是否都有一个值,或者每个多边形是否都有一组您要绘制的值?
- 那么每个多边形都有一个关联的人口值数组,您想用它来对多边形进行基本纹理处理吗?
-亚当
这是一个有趣的项目。假设多边形是凸的,我会这样做:
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 坐标,例如“屏幕”的左边缘。当您完成所有边缘时,只有内部像素将被切换奇数次。
ImageMagick可以从svg转换为png,也许你可以看一下代码,或者简单地创建svg并使用IM进行转换? 邋遢 这样做。