β

【IDL代码库】栅格转矢量内部接口

ENVI/IDL技术殿堂 46 阅读

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

作者:ENVI/IDL技术殿堂
原文地址:【IDL代码库】栅格转矢量内部接口, 感谢原作者分享。

发表评论