矢量數據與柵格數據的相互轉換


  在做遙感圖像處理時,矢量數據與柵格數據的轉換是常有的事,本節l將利用GDAL、ogr來完成矢量與柵格之間的轉換.

1.矢量轉柵格

import gdal
import ogr
import gdalconst
#from osgeo import ogr, osr, gdal,gdalconst
def shpRaster(shp,templatePic,output,field,nodata):
    ndsm = templatePic
    data = gdal.Open(ndsm, gdalconst.GA_ReadOnly)
    geo_transform = data.GetGeoTransform()
    proj=data.GetProjection()
    x_res = data.RasterXSize
    y_res = data.RasterYSize
    mb_v = ogr.Open(shp)
    mb_l = mb_v.GetLayer()
    target_ds = gdal.GetDriverByName('GTiff').Create(output, x_res, y_res, 1, gdal.GDT_Int16)
    target_ds.SetGeoTransform(geo_transform)
    target_ds.SetProjection(proj)
    band = target_ds.GetRasterBand(1)
    NoData_value = nodata
    band.SetNoDataValue(NoData_value)
    band.FlushCache()
    gdal.RasterizeLayer(target_ds, [1], mb_l, options=["ATTRIBUTE=%s"%field,'ALL_TOUCHED=TRUE'])
    target_ds = None
if __name__ == '__main__':
    shp=r"D:\test\1.shp"  #矢量數據路徑
    templatePic=r"D:\test\1.tif"  #模板柵格,一個tif,地理變換信息從這里讀,柵格大小與該柵格一致
    output=r"D:\test"  #保存路徑
    field="Value"    #轉換字段
    nodata=0   #矢量空白區轉換后的值
    shpRaster(shp, templatePic, output, field, nodata)

2.柵格轉矢量

from osgeo import ogr, osr, gdal
def raster_to_shape(rasterfile, shapefile,name):
    data = gdal.Open(rasterfile, gdal.GA_ReadOnly)
    inband = data.GetRasterBand(1)
    drv = ogr.GetDriverByName('ESRI Shapefile')
    Polygon = drv.CreateDataSource(shapefile)
    prj = osr.SpatialReference()
    prj.ImportFromWkt(data.GetProjection())  ## 使用柵格的投影信息
    Polygon_layer = Polygon.CreateLayer(name, srs=prj, geom_type=ogr.wkbPolygon)
    newField = ogr.FieldDefn('Value', ogr.OFTInteger)
    Polygon_layer.CreateField(newField)
    gdal.FPolygonize(inband, None, Polygon_layer, 0)
if __name__ == "__main__":
    rasterfile = r"F:\algorithm\1.tif"
    shapefile= r"F:\algorithm"
    name="test"
    raster_to_shape(rasterfile, shapefile,name)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM