创建shapefile显示栅格的轮廓图?


33

我有大约1,000张tiff格式的卫星图像,我想创建一个shapefile,将其作为栅格的索引。这类似于栅格目录,但是我不想建立栅格目录。

我可以预见的一些障碍是图像是经过地理反射的,因此它们的形状不是矩形的(我说的是数据区域)。

为了澄清起见,我要求多边形仅覆盖栅格的非零(或非nodata)像素,而不覆盖整个矩形栅格。到目前为止,大多数答案都给出了一个覆盖数据以及非数据像素的矩形多边形。

我的形象 卫星图像样本


我检查过的工具给出的结果(例如栅格目录,各种Arcscript,在答案之一中给出的自定义Python脚本): 结果


我想要的结果: 在此处输入图片说明


4
似乎创建栅格目录,即使暂时创建栅格目录也是一个很好的解决方案。您可以创建一个不受管理的目录,该目录创建一个引用表,但是将图像保留在服务器上的位置。将栅格批量导入目录很容易,而且相对较快。创建足迹后,可以将轮廓导出到新的要素类并删除栅格目录。这可能和其他选项一样快。
获得空间

2
镶嵌数据集还会生成图像足迹。
罗伊(Roy)

镶嵌数据集是必经之路。非常容易完成
Brad Nesom 2012年

那么在最后一张图像中,红色框NoData或0之外的像素是吗?如果它们为0,那么您想要的区域中是否还有像素也是0值?
乍得·库珀

1
红色边框之外的像素为无数据;但是我的多光谱数据有0,0,0作为nodata区域的RGB值。在这两种情况下,在所需区域内都没有值为0的像素。
Devdatta Tengshe 2012年

Answers:


15

QGIS中有一个名为Image Boundary的插件。这是一个很棒的工具。在此工具中,有一个“有效像素”选项,例如,它将忽略卫星图像的黑色边缘。


这个插件声称可以完成我想要的操作,但是在我尝试过的图像上却失败了。明天我将使用我的真实数据。
Devdatta Tengshe 2012年

我发现该插件与多光谱数据配合得很好,但有时单波段大范围图像会产生奇怪的结果。
Devdatta Tengshe 2012年

2
我同意QGIS图像边界效果最好,但是是否有一个工具可以对矢量文件执行此操作,而在这些文件中我们不需要“边界框”或“足迹”,而需要一个概述数据存在的多边形。
GeorgeC 2012年

图像边界工具很棒,但是,您提供的链接是404。我相信如果您在插件设置中允许使用实验性插件,这些工具仍然可用。也许使用此链接?:github.com/lmotta/imagefootprint_plugin
Aaron

是否有使用图像边界的任何文档?
Loonuh

9

以下代码将获取输入栅格,获取其范围,然后将该范围插入到面要素类中:

import arcpy

r = arcpy.Raster(in_raster)
point = arcpy.Point()
array = arcpy.Array()

corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"]

cursor = arcpy.InsertCursor(fc)
feat = cursor.newRow()
for corner in corners:    
    point.X = getattr(r.extent, "%s" % corner).X
    point.Y = getattr(r.extent, "%s" % corner).Y
    array.add(point)
array.add(array.getObject(0))
print len(array)
polygon = arcpy.Polygon(array)
feat.shape = polygon
cursor.insertRow(feat)
array.removeAll()
del feat
del cursor

您可以在ArcMap的Python窗口通过设置运行它in_raster,并fc像这样:

>>> fc = 'r_extent'
>>> in_raster = 'CaliCoast10mNED_HavCurvedPCS'

这里r_extent是一个已有的多边形要素类。然后只需复制代码并运行即可。我得到这个:

在此处输入图片说明


1
我使用上面的代码对文件夹执行了相同的操作:gist.github.com/4162013
jeb 2012年

7

您可以为此使用gdaltindex:http ://www.gdal.org/gdaltindex.html

但是,它仍将在与图像相同的参考系统中创建矩形(例如4 + 1点)。但是我想知道这是否真的是一个问题:您的图像有多大?


gdaltindex的问题在于,它会为每个图像创建一个矩形多边形。我只对非零值像素感兴趣
Devdatta Tengshe 2012年

4

我在QGIS中尝试了“图像边界”工具,但由于某些栅格而失败。

对我有用的另一个选项是:1.使用gdal_translate命令行实用程序将输入栅格转换为单个数字。

gdal_translate -co compress = lzw -b 1 -ot字节-scale 1 1 inp.tif out.tif

这将在inp.tif的值非零的地方创建值为1的栅格。

  1. 然后,在ArcMap中,您可以使用“栅格转多边形”工具来获取多边形(shapefile)。

输出shapefile将具有非四边形边界,并在图像的实际边界之后具有多个多边形顶点。


3

如果您对脚本解决方案感兴趣,请尝试使用gdal命令nearblack。您也可以使用标志-white来检索以空格为边界的数据。您可以将输出多边形化以生成栅格数据的非矩形轮廓。

##run nearblack
shellcmds = "nearblack -white -o " + outpath + " " + inpath
os.system(shellcmds)

##run polygonize
shellcmds = "gdal_polygonize.py " + outpath + " -f" + """ "ESRI Shapefile"  """ + outpath2 + " nearblack"
os.system(shellcmds)


0

ArcGIS 3D Analyst中有一个称为“ 栅格域”的工具,该工具可为栅格数据集的数据部分创建多边形或折线轮廓图-并忽略NoData像元。对我来说很棒。


1
欢迎来到我们的网站!您能否解释一下您的答案与Tomek的答案有何不同?
whuber

栅格域为我工作-感谢您的帮助!
meryloo

0

您可以创建分配了空间参考的栅格目录,将栅格目录添加到ArcMap,然后“导出足迹”。请记住,有一个选项可以创建一个“未管理”的栅格目录,这样您就不会复制每个栅格数据集。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.