在Python中用GDAL实现矢量对栅格的切割实例

  

<强>概述:

  

本文讲述如何在Python中用GDAL实现根据输入矢量边界对栅格数据的裁剪。

  

效果:   

在Python中用GDAL实现矢量对栅格的切割实例

  

<强>裁剪前

  

在Python中用GDAL实现矢量对栅格的切割实例

  

<强>矢量边界

  

在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实现矢量对栅格的切割实例