行走的蓑衣客

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

  在做遥感图像处理时,矢量数据与栅格数据的转换是常有的事,本节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)
复制代码

 

posted on   行走的蓑衣客  阅读(1880)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
 
点击右上角即可分享
微信分享提示