偶然发现的问题。
比如写出一个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', 7, 50, 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.SetAttributes, 0, 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