1. 程式人生 > 其它 >【IDL程式碼庫】解決IDL生成多邊形向量在ArcMap中不閉合問題

【IDL程式碼庫】解決IDL生成多邊形向量在ArcMap中不閉合問題

偶然發現的問題。

比如寫出一個4個頂點的矩形向量,在ArcGIS中如果設定不填充,竟然只有三個邊。。。但是在ENVI中是顯示正常的。後來請教同事後發現,是由於不閉合的原因。



廢話不多說了,直接上程式碼。結果已經能夠正常顯示。

注意看頂點座標設定的地方。

PRO test_create_shapefile_polygon

  COMPILE_OPT idl2

  ;啟動ENVI是為了生成座標系字串

  envi, /restore_base_save_files

  ENVI_BATCH_INIT

 

  ;輸出路徑

  outFile = 'D:\testpolygon.shp'

 

  ;新建檔案,設定型別為多邊形

  oShp=OBJ_NEW('IDLffShape', outFile, /UPDATE, ENTITY_TYPE=5)

 

  ;新增屬性,字串型別(不然在ArcGIS中打不開)

  oShp->ADDATTRIBUTE, 'test name', 750, PRECISION=0

 

  ;新建一個Entity

  entNew = {IDL_SHAPE_ENTITY}

 

  entNew.SHAPE_TYPE = 5 ;多邊形

 

  ;關鍵的地方來了。

  ;雖然是4個頂點的多邊形,但是需要輸入5個點座標。

  ;最後1個點座標和第1個點座標一樣。

  entNew.VERTICES

 = PTR_NEW([[110.0,30.0], $

   [110.0,40.0],[120.0,40.0],[120.0,30.0],[110.0,30.0]])

  entNew.N_VERTICES = 5 ;還要設定為5個頂點

 

  ;寫入記錄

  oShp.PutEntity, entNew

 

  ;為此條記錄新增屬性

  attrNew = oShp ->GETATTRIBUTES(/ATTRIBUTE_STRUCTURE)

  attrNew.ATTRIBUTE_0 = 'test'

  oShp.SetAttributes0, attrNew

 

  ;因為座標經緯度,獲取座標系字串,寫入prj檔案(.replace方法是IDL8.4新增的

  oProj = ENVI_PROJ_CREATE(/GEOGRAPHIC)

  prjFile = outfile.replace('.shp','.prj')

  OPENW, lun, prjFile, /GET_LUN

  PRINTF, lun, oProj.PE_COORD_SYS_STR

  FREE_LUN, lun

 

  ;銷燬

  OBJ_DESTROY, oShp

END