在做遥感图像处理时,矢量数据与栅格数据的转换是常有的事,本节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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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训练数据并当服务器共享给他人