<强>概述:强>
本文讲述如何在Python中用GDAL实现根据输入矢量边界对栅格数据的裁剪。
效果:
<强>裁剪前强>
<强>矢量边界强>
<强>裁剪后强>
实现代码:
# - * -编码:utf - 8 - * ”“” @author lzugis @date 2017-06-02 @brief利用轴马力裁剪影像 ”“” 从osgeo进口gdal, gdalnumeric ogr 从公益诉讼导入图像,ImageDraw 进口操作系统 进口经营者 gdal.UseExceptions () #该函数将把点阵快船shapefile #在GDAL面具使用。 def imageToArray(我): ”“” 将一个Python成像库数组转换为 gdalnumeric形象。 ”“” 一个=gdalnumeric.fromstring (i.tobytes (),“b”) a.shape=i.im。大小[1],i.im.size [0] 返回一个 def arrayToImage(一个): ”“” 将一个gdalnumeric数组转换为 Python图像库图像。 ”“” 我=Image.frombytes (‘L’(a.shape [1], a.shape [0]), (a.astype (b)) .tobytes ()) 返回我 def world2Pixel (geoMatrix, x, y): ”“” 使用gdal geomatrix (gdal.GetGeoTransform())来计算 地理空间坐标的像素位置 ”“” ulX=geoMatrix [0] 真心=geoMatrix [3] xDist=geoMatrix [1] 像素=int ((x - ulX)/xDist) 行=int((真心- y)/xDist) 返回(像素,线) # 编辑:这基本上是一个重载的 # gdal_array版本。OpenArray传入发送葡开,yoff明确 #我们可以通过这些参数CopyDatasetInfo # def OpenArray(数组,prototype_ds=None,发送葡开=0,yoff=0): ds=gdal。开放(gdalnumeric.GetArrayFilename(数组)) 如果不没有ds prototype_ds并不是没有: 如果类型(prototype_ds)。__name__==皊tr”: prototype_ds=gdal。打开(prototype_ds) 如果prototype_ds不是没有: gdalnumeric。CopyDatasetInfo (prototype_ds ds,发送葡开=发送葡开,yoff=yoff) 返回ds def直方图(垃圾箱=范围(0256)): ”“” 直方图函数多维数组。 一个=数组 垃圾箱=数字匹配的范围 ”“” fa=a.flat n=gdalnumeric.searchsorted (gdalnumeric.sort (fa)、箱) n=gdalnumeric。连接([n [len (fa)]]) 嘘=n [1:] - n (: 1) 返回嘘 def拉伸(一个): ”“” 执行一个直方图拉伸,原型=raster_path) # # # # # gtiffDriver=gdal。GetDriverByName (“GTiff”) 如果gtiffDriver没有: 提高ValueError(“找不到GeoTiff司机”) gtiffDriver。CreateCopy (“beijing.tif”, OpenArray(剪辑,prototype_ds=raster_path发送葡开=xoffset yoff=yoffset) ) #另存为一个8位的jpeg容易,快速预览 剪辑=clip.astype (gdalnumeric.uint8) gdalnumeric。SaveArray(剪辑,“beijing.jpg”,格式=癑PEG”) gdal.ErrorReset () if __name__==癬_main__”: # shapefile_path, raster_path shapefile_path=' beijing.shp ' raster_path=' world.tif ' 主要(shapefile_path raster_path) >之前
这篇文章主要描述了如何使用GDAL/OGR打开矢量文件,读取属性表,并将部分属性写出至txt。
代码
进口ogr、系统、操作系统 进口numpy np os.chdir (r说:\”) #设置的司机,并打开矢量文件 司机=ogr。GetDriverByName (“ESRI Shapefile”) ds=driver.Open(“网站。轴马力”,0) 如果没有:ds print(“无法打开”,“sites.shp”) sys.exit (1) #获取图册 层=ds.GetLayer () #要素数量 numFeatures=layer.GetFeatureCount () 打印(“特征数:”+ str (numFeatures)) #获取范围 程度上=layer.GetExtent () 打印(“程度:“程度) 打印(UL:“[0],[3]程度) 打印(“LR:”,[1],[2]程度) #获取要素 特点=layer.GetNextFeature () id=[] x=[] y=[] 覆盖=[] #循环每个要素属性 而功能: #获取字段“id”的属性 id=feature.GetField (id) #获取空间属性 几何=feature.GetGeometryRef () x=geometry.GetX () y=geometry.GetY ()=feature.GetField封面(封面) ids.append (id) xs.append (x) ys.append (y) covers.append(封面) 特点=layer.GetNextFeature () data=https://www.yisu.com/zixun/[id、x、y,封面) data=np.array(数据) data=data.transpose () #写出致txt np.savetxt (“myfile。txt”,数据,fmt=' % s % s % s % s ') np.savetxt (“myfile。csv”数据,fmt=' % s % s % s % s ') #释放文件空间 layer.ResetReading () feature.Destroy () ds.Destroy ()在Python中用GDAL实现矢量对栅格的切割实例