最近导师要求实现一个批量的二值图转矢量文件,发现用python调用arcgis的arcpy库非常方便,记录一下。
我的数据都是0,1分布的二值图,实际使用看需求来修改吧,我要提取值为1的区域,所以代码中gridcode值为1。
# -*- coding: UTF-8 -*-
#导入arcgis的pythonIDE使用或使用arcgis自带的python.exe
import arcpy
from arcpy import env
import os
import time
env.workspace = r"E:\jjw_work\GIS\raster_to_polygon\New2_veg" #二值图路径
output_path = r"E:\jjw_work\GIS\raster_to_polygon\shp/" #0,1都有的shp
result_path = r"E:\jjw_work\GIS\raster_to_polygon\result/" #只有gridcode=1的shp
filelist = os.listdir(env.workspace)
tif_list = []
for file in filelist:
if os.path.splitext(file)[1] == ".tif":
tif_list.append(file)
for tif in tif_list:
stime = time.time()
shpfile = tif.split(".")[0] + '.shp'
shp_path = output_path + shpfile
resultpath = result_path + shpfile
arcpy.RasterToPolygon_conversion(tif, shp_path,
"NO_SIMPLIFY", "VALUE") #相当于Arcgis中的Raster to polygon 工具
arcpy.Select_analysis(shp_path, resultpath, '"gridcode" = 1') #这里可以修改为你需要的字段
print(shp_path, "time:", round(time.time()-stime, 2))
听说可以直接安装Arcpy库,不过我这里直接就用的是安装arcgis时自带的python解释器了,里面自带arcpy。