python 栅格转shp 添加多个字段
时间: 2023-06-15 09:02:18 浏览: 179
Arcgis中利用python语言对多个shp文件进行批量添加字段
在Python中进行栅格转shp并添加多个字段可以使用GDAL和OGR库来完成。首先需要加载需要使用的库,然后使用GDAL库中的Open函数打开需要进行转换的栅格文件,这个文件可能是一个tiff、img等格式的影像文件。
接着使用GDAL中的Rasterize函数将栅格文件转换成为矢量Shapfile文件,并通过OGR库打开需要进行添加字段的Shapefile文件,使用AddField函数向打开的Shapefile文件中添加需要的多个字段。
例如以下代码段可以实现一个300*300像素的随机栅格生成,经过转换并添加"ID","value","type"三个字段的Shapefile文件:
```
from osgeo import gdal, ogr
import random
cols = 300
rows = 300
driver = gdal.GetDriverByName('GTiff')
outRaster = driver.Create("random_raster.tif", cols, rows, 1, gdal.GDT_Byte)
outRaster.SetProjection('WGS84')
outRaster.SetGeoTransform((-75.8145, 0.01, 0, 39.5501, 0, -0.01))
for i in range(rows):
for j in range(cols):
outBand.WriteArray(random.randint(0, 255), j, i)
outRaster.FlushCache()
del outRaster
inRaster = gdal.Open("random_raster.tif")
outShapefile = "random_shp.shp"
driver = ogr.GetDriverByName("ESRI Shapefile")
outDatasource = driver.CreateDataSource(outShapefile)
outLayer = outDatasource.CreateLayer("random", geom_type=ogr.wkbPoint)
# 添加字段
outLayer.CreateField(ogr.FieldDefn("ID", ogr.OFTInteger))
outLayer.CreateField(ogr.FieldDefn("value", ogr.OFTReal))
outLayer.CreateField(ogr.FieldDefn("type", ogr.OFTString))
gdal.RasterizeLayer(outLayer, [1], inRaster,
burn_values=[0], options=["ATTRIBUTE=ID"])
outDatasource.FlushCache()
del outDatasource
```
阅读全文