3

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

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

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

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

  1. 有多个多边形,每个多边形是一组向量
  2. 每个多边形都有一个唯一值
  3. 多边形不重叠

谢谢

缺口

4

5 回答 5

2

你用的是什么GIS软件?ArcGIS 在 ArcGIS 9.2 或更高版本中提供了多边形转栅格工具,该工具可作为 PolygonToRaster_conversion 函数编写脚本。

PolygonToRaster_conversion (in_features, value_field, out_raster_dataset, cell_assignment, priority_field, cellsize)
于 2008-09-12T12:13:10.417 回答
2

这可能不是您所需要的,但如果您想绘制多边形(或相反地在多边形的基础上读取多边形图像的像素),那么一种解决方案是滚动您自己的多边形填充工具。坦率地说,这很有趣,而且非常值得学习。

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

  • 您的任意多边形集是实际图像,还是矢量(即点列表)点,还是 ???
  • 每个多边形是否有一个值,或者每个多边形是否有一组您要绘制的值?
  • 所以每个多边形都有一个相关的人口值数组,你想用它来纹理化多边形?

-亚当

于 2008-09-12T12:22:13.220 回答
2

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

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

于 2009-04-28T19:30:45.130 回答
1

ImageMagick 可以从svg 转换成png,也许你可以看一下代码,或者干脆创建svg 并使用IM 进行转换?邋遢做到这一点。

于 2008-09-12T11:34:41.163 回答
1

@尼克R

我最初使用的是 ArcGIS 9.2,但它不适用于 C# 和 64 位,所以我现在使用 GDAL ( http://www.gdal.org )。

gdal_rasterize不正是你想要的吗?

于 2008-09-12T12:38:34.210 回答