MAPGIS空间数据存取和属性编辑.ppt
MAPGIS空间数据存取和属性编辑,1.空间实体操作,2.属性(属性结构)操作,1.1 线实体操作1.2 点实体操作1.3 区实体操作,第二讲空间数据存取和属性编辑,2.2 属性结构操作,2.1 属性结构和属性的关系,2.3 属性记录操作,2.4 字段操作,相关头文件Win_area.h,取线工作区实体个数,short _GetLinNum(short ai,long*logN,long*n);参数:入口 ai-工作区号出口*logN-返回逻辑数,即未被删除的图元数*n-返回物理数(物理数=逻辑数+被删除图元数+1)返回值 1/0-成功/失败,1.1 工作区线实体操作,1.1 工作区线实体操作,取线实体 short _GetLin(short ai,long li,D_DOT*dat,long*len,LIN_INFO*inf);,注意:线坐标序列所占据的内存是由工作区管理模块来申请的!如果是在同一个工作区中连续调用两次_GetLin,第一次返回的线坐标序列被释放掉!,示例:从给定的ai号工作区中读取所有线long i,linN;long len;LIN_INFO linf;D_DOT*lxy;/取线实体数,i返回逻辑数,linN返回物理数。_GetLinNum(ai,/略过被删除的线/处理线实体代码/,获取线图形信息 short _GetLinInfo(short ai,long li,LIN_INFO*inf);,添加线到线工作区 long _AppendLin(short ai,D_DOT*dat,long len,LIN_INFO*inf);,更新线图形信息 short _UpdateLinInfo(short ai,long li,LIN_INFO*inf);,更新线 short _UpdateLin(short ai,long li,D_DOT*dat,long len,LIN_INFO*inf);,1.1 工作区线实体操作,示例:添加一条折线,颜色为绿色,坐标点为(0,0),(100,0),(100,100);LIN_INFO inf;D_DOT xy3;xy0.x=0;xy0.y=0;xy1.x=100;xy1.y=0;xy2.x=100;xy2.y=100;memset(,1.1 工作区线实体操作,取点 short _GetPnt(short ai,long pi,D_DOT*xy,char*dat,short*len,PNT_INFO*inf);,取点图形信息 short _GetPntInfo(short ai,long pi,PNT_INFO*inf);,添加点 long _AppendPnt(short ai,D_DOT*xy,char*dat,short len,PNT_INFO*inf);,1.2 工作区点实体操作,示例:添加一个字符串类型的点,坐标为(100,100),内容为“MAPGIS”,颜色为红色,字高宽均为10,PNT_INFO inf;D_DOT xy;char dat64;xy.x=500;xy.y=500;lstrcpy(dat,”MAPGIS”);memset(,1.2 工作区点实体操作,1.3 工作区区实体操作,取区域 short _GetReg(short ai,long ri,long*rdat,short*len,REG_INFO*inf);,添加区实体 long _AppendReg(short ai,long*rdat,short len,REG_INFO*inf);,获取区实体图形信息 short _GetRegInfo(short ai,long ri,REG_INFO*inf);,删除区实体 short _DelReg(short ai,long ri);,恢复被删除的区实体 short _UnDelReg(short ai,long ri);,longri;REG_INFO rInf=0;longli;D_DOTdat5;LIN_INFO inf=0;longrdat2;m_ai=_OpenArea(m_hInst,REG);dat0.x=10;dat0.y=10;dat1.x=100;dat1.y=10;dat2.x=100;dat2.y=100;dat3.x=10;dat3.y=100;dat4.x=10;dat4.y=10;inf.lclr=5;inf.ltp=1;inf.lw=0.5;li=_AppendLin(m_ai,dat,5,1.3 工作区区实体操作,示例:添加区,2 属性(属性结构)操作,2.2 属性结构操作,2.3 属性记录操作,2.4 字段操作,2.1 属性结构和属性的关系,2.1 属性结构和属性的关系,属性结构和属性的关系,Field,Att,Field_Head,取某类属性结构 short _GetAttStru(short ai,short type,CATT_STRU*stru);,设置某类属性结构 short _SetAttStru(short ai,short type,CATT_STRU*stru);,说明:若要修改、浏览属性结构,建议使用函数_EditAttStruct、_EditStruct、,添加字段到某类属性结构中short _AppendStruFld(short ai,short type,short fldn,CFIELD_HEAD*fldEntry);,2.2 属性结构操作,说明:该函数对要添加的字段名进行检查,若在原有字段中存在同名字段,则不添加同名的新字段。,示例:向给定的ai号点工作区的点属性结构添加字符串类型,长度为64的字段“MAPGIS”。CFIELD_HEADfldEntry;lstrcpy(fldEntry.fieldname,“MAPGIS”);fldEntry.fieldtype=STR_TYPE;fldEntry.ptc_pos=-1;/新字段必须是-1fldEntry.msk_leng=64;_AppendStruFld(ai,PNT,1,2.2 属性结构操作,取某类属性short _GetAtt(short ai,short atype,long i,CATT_STRU*stru,char*att);,写某类实体属性 short _WriteAtt(short ai,short atype,long i,CATT_STRU*stru,char*att);,编辑属性 HWND _EditAtt(HWND hWnd,AREA_HINST ahInst,DWORD dwStyle=0);,2.3 属性记录操作,2.4 字段操作,根据字段名称取字段值,short _GetField(char*att,CATT_STRU*stru,char*fldName,char*fldBuf,long bufLen,short*isBlank);,根据字段序号取字段值,short _GetFieldOnNumb(char*att,CATT_STRU*stru,short fldi,char*fldBuf,long bufLen,short*isBlank);,根据字段名称设置字段值,short _SetFld(char*att,CATT_STRU*stru,char*fldName,char*realVal);,说明:该函数仅仅把realVal值写到att所指内存空间上,若要永久修改属性字段值,还必须调用_WriteAtt函数将属性记录写到工作区中。,2.4 字段操作示例,D_DOT xy;long pn;ATT_STRU*stru;char*att;PNT_INFO inf;long code=124;/编码double x=20524.87;/X(北)pn=_AppendPnt(ai,如给点工作区ai添加属性,其中结构:点名-编码-X(北),