掩码并从vrt文件中提取单元格值?

时间:2018-03-07 00:29:50

标签: python-2.7 arcgis raster gdal

我有全球建筑区域的栅格数据,分辨率为40m作为vrt文件,download data from here,我试图通过掩码裁剪数据,然后提取每个单元格的颜色索引值。

注意:另外2个文件包含数据:vrt.clrvrt.ovr

以下是数据示例: view of vrt data in arcmap

我的问题:为什么我在通过面具裁剪时获得空单元格值?

我尝试了以下内容:

  • 使用arcmap工具箱通过掩码提取
  • 在python 2.7中使用gdal

    import gdal ds = gdal.Open('input.vrt') ds = gdal.Translate('output.vrt', ds, projWin = [80.439,5.341,81.048,4.686]) ds = None

  • 我还尝试将数据保存为tif

另外,有没有办法在屏蔽数据后读取给定坐标(x,y)处的颜色索引值?

1 个答案:

答案 0 :(得分:1)

数据似乎在Pseudo Mercator投影中(EPSG 3857)。因此,您应该在该坐标系中指定projWin的范围,或者如果要在不同的坐标系中提供projWinSRS,则添加gdal.Translate

此外,如果您希望format='VRT输出到VRT文件,则应添加invrt = 'GHS_BUILT_LDSMT_GLOBE_R2015B_3857_38_v1_0.vrt' outfile = '/vsimem/tmpfile' ds = gdal.Translate(outfile, invrt, projWin=[80.439, 5.341, 81.048, 4.686], projWinSRS='EPSG:4326') data = ds.ReadAsArray() ds = None gdal.Unlink(outfile) 。因为在你的代码片段输出到默认文件格式,即GeoTIFF。

当我假设您的坐标是WGS84(EPSG 4326)时,它定义了斯里兰卡南部海洋上的一个小区域。鉴于数据的性质,这没有多大意义。

如果您想阅读坐标给出的数组,可以使用:

let script = "JSON.stringify([].slice.call(document.getElementsByTagName('img')).map(function(img) { return {url: img.src, width: img.clientWidth, height: img.clientHeight} }))"

绘制的数组如下所示: enter image description here