1. 程式人生 > 其它 >【IDL程式碼庫】柵格轉向量內部介面

【IDL程式碼庫】柵格轉向量內部介面

自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