如何将一组多边形转换为位图

时间:2020-03-05 18:52:07  来源:igfitidea点击:

如何获取一组包含任意值的多边形,并创建一个对应的位图,其中每个像素都包含该位置处的多边形的值?

为了将问题放到上下文中,我的多边形包含有关多边形内每平方公里平均人数的信息。我需要创建一个栅格/位图,其中包含代表200米料箱中的人口的像素。

过去我做过类似的事情,我使用多边形来创建蒙版,方法是绘制成位图并填充值,然后将位图转换成可以操纵的数组。我敢肯定有更好的方法可以做到这一点!

我根据要求进一步澄清了这个问题。

  • 有多个多边形,每个多边形是一组向量
  • 每个多边形将具有一个唯一值
  • 多边形不重叠

谢谢

缺口

解决方案

回答

ImageMagick可以从svg转换为png,也许我们可​​以看一下代码,或者只是创建svg并使用IM进行转换?地做到这一点。

回答

我们正在使用什么GIS软件? ArcGIS在ArcGIS 9.2或者更高版本中提供了"多边形到栅格"工具,该工具可编写为PolygonToRaster_conversion函数。

PolygonToRaster_conversion (in_features, value_field, out_raster_dataset, cell_assignment, priority_field, cellsize)

回答

这可能不是我们所需要的,但是如果我们要绘制多边形(或者以多边形为基础读取多边形图像的像素),则一种解决方案是滚动自己的多边形填充工具。坦率地说,这是很多乐趣,而且真的很容易学习。

但是问题对我来说不是很清楚。你能给个更好的描述吗?

  • 任意多边形集是实际图像还是矢量(即点列表)点或者???
  • 每个多边形都有一个值,还是每个多边形都有一个我们要绘制的值数组?
  • 因此,每个多边形都有一个相关的填充值数组,我们想使用该数组本质上对多边形进行纹理处理?

-亚当

回答

@尼克R

I was originally using ArcGIS 9.2, but that doesn't work well with C# and 64 bit, so I am now using GDAL (http://www.gdal.org).

gdal_rasterize确实不满足要求吗?

回答

这是一个有趣的项目。这是我要做的,假设多边形是凸的:

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坐标,例如"屏幕"的左边缘。完成所有边缘后,仅内部像素将被切换奇数次。