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

时间:2008-09-12 10:36:39

标签: algorithm gis arcgis arcgis-js-api

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

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

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

我正在按要求澄清这个问题。

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

    尼克

5 个答案:

答案 0 :(得分:2)

您使用的是哪种GIS软件? ArcGIS在ArcGIS 9.2或更高版本中提供了“多边形到栅格”工具,该工具可编写为PolygonToRaster_conversion函数。

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

答案 1 :(得分:2)

这可能不是你所需要的,但是如果你想绘制一个多边形(或者反过来以多边形为基础读取多边形图像的像素),那么一个解决方案是滚动你自己的polygon fill tool。坦率地说,这非常有趣,而且非常需要学习。

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

  • 你的任意多边形组是实际图像,还是矢量(即点列表)点,或者???
  • 每个多边形是否都有一个值,或者每个多边形是否都有您要绘制的值数组?
  • 因此,每个多边形都有一个相关的填充值数组,您希望使用?
  • 对多边形进行基本纹理

- 亚当

答案 2 :(得分: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坐标,例如“屏幕”的左边缘。当您完成所有边缘后,只有内部像素将被切换奇数次。

答案 3 :(得分:1)

ImageMagick可以从svg转换为png,也许你可以查看代码,或者只是创建svg并使用IM进行转换? Scruffy就是这么做的。

答案 4 :(得分:1)

@Nick R

  

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

gdal_rasterize不能完全符合您的要求吗?