|
自ENVI 5.2版本开始提供了ENVIClassificationToShapefileTask,可以实现由分类图像转换为shapefile矢量文件的功能。
但是,在使用过程中发现,当栅格图斑数量过多时,此Task效率较低。
于是尝试用旧版本的RTV_doit来实现,结果发现不会输出dbf文件,这样矢量文件也就没有了属性信息。很不开心。跟美国技术支持反馈后,他们给了我一个内部接口,可以实现正常转换。但是当转换的某类像元个数为0时(虽然这种情况极少出现),此接口会报错。
参考代码如下:
- PRO test_raster_to_vector_doit
- COMPILE_OPT idl2
- envi, /restore_base_save_files
- ENVI_BATCH_INIT
-
- file = 'D:\Temp\class.dat' ;输入分类图像
- out_shpfile = 'D:\Temp\vector.shp' ;输出矢量文件路径
- idx = [1,2,3,4,5] ;输出类别索引
-
- ENVI_OPEN_FILE, file, r_fid=fid
-
- ENVI_FILE_QUERY, fid, dims=dims, $
- class_names=class_names, sname=sname
- pos = [0]
-
- l_name = class_names[idx]
- evf_file = envi_get_tmp()
- envi_hourglass
- envi_check_save, /vector
- rtv_class_setup, fid=fid, pos=pos, dims=dims, $
- class_names=l_name, class_ptr=idx, $
- out_name=evf_file, in_memory=0, $
- output_flag=1, sname=sname
-
- ;输出为shapefile
- evf_id = ENVI_EVF_OPEN(evf_file)
- ENVI_EVF_TO_SHAPEFILE, evf_id, out_shpfile
-
- ;关闭evf文件,并删除
- ENVI_EVF_CLOSE, evf_id
- FILE_DELETE, evf_file, /quiet
- END
复制代码
|
|