• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

MapGISSDK(C++)【基础篇】

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

算法测试:Demo、Test

https://www.cnblogs.com/2008nmj/p/10060847.html

//例1-1 简单要素
void AppendSFeature(CSFeatureCls *ptSFCls)
{
CAnyLine line; // 任意线(几何实体)
CRecord linAtt; // 属性
LIN_INFO linInfo; // 图形参数
memset(&linInfo,0,sizeof(LIN_INFO));
CATT_STRU attStru;

//设置要素属性
ptSFCls->att_GetStru(attStru);
linAtt.SetStru(attStru);
for(int i = 0;i<attStru.hd.numbfield;i++)
linAtt.SetFldFromStr(i,"Zondy");

//设置要素几何形态
line.m_linType = ARC_TYPE_BROKEN_LINE;
D_DOT* dotset = new D_DOT[2];
dotset[0].x = 0; dotset[0].y = 0;
dotset[1].x = 50; dotset[1].y = 50;
line.m_varLin.Set(dotset,2);
linInfo.linstyID = 6;

//在简单要素类里添加要素
TYPE_LIN_ID SfeaID = ptSFCls->line_Append(&line,&linAtt,&linInfo);
delete []dotset;
}

//例1-2 几何封装类
CMultiLine ptMultLin;
D_DOT dot[2];

CGeomBasePTR *ptLine;
ptLine = new CGeomBasePTR[2];

dot[0].x = 0; dot[0].y = 0;
dot[1].x = 0; dot[1].y = 100;
ptLine[0] = new CAnyLine;
ptLine[1] = new CAnyLine;
((CAnyLine*)ptLine[0])->m_varLin.Append(dot,2);
dot[0].x = 0; dot[0].y = 100;
dot[1].x = 100; dot[1].y = 100;
((CAnyLine*)ptLine[1])->m_varLin.Append(dot,2);

ptMultLin.Set(ptLine,2);

delete (CAnyLine*) ptLine[0];
delete (CAnyLine*) ptLine[1];
delete []ptLine;

例2-1 创建基于文件的地理数据库
void OnCreateGdb(){
CGDataBase* GDateBase;
CGDBServer* ptWA;
char szName[] = "My TestGDB";
HDF_CREATE_MSG Msg;

memset(&Msg,0,sizeof(HDF_CREATE_MSG));
strcpy(Msg.HDFName,"D:\\MyTestGDB");
Msg.extendInfo.extendMode = 0;
Msg.extendInfo.isExtendable = 1;
Msg.extendInfo.maxFileSize = 0;
Msg.size = 10;

ptWA = new CGDBServer;
GDateBase = new CGDataBase;

if(ptWA->Connect("MapGisLocal")>0)
GDateBase->Create(ptWA,szName,&Msg,1);
ptWA->Disconnect();

delete ptWA; ptWA = NULL;
delete GDateBase; GDateBase = NULL;
}

例2-2 打开地理数据库
void OnOpengdb()
{
CGDBServer GDBSvr;
CGDataBase GDB;
GDBPATHINFO path;
char user[30]="";
char pwsd[64]="";

long ptSelFlag = XCLS_TYPE_GDB;
long selN = 1;
if(ShowGDBShellDlg(path,&ptSelFlag,selN)>0)
{
GetLoginInfo(path.svcName,user,30,pwsd,64);
if(GDBSvr.Connect(path.svcName,user,pwsd)>0)

if(GDB.Open(&GDBSvr,path.gdbName)>0)
MessageBox("GDB打开成功!");
}
}

例3-1 创建简单要素类(以混合要素类为例)
void OnCREATECSFeaCls()
{
CGDBServer GDBSvr;

CGDataBase *ptGDB; //存储该要素类的地理数据库
GDBPATHINFO path; //地理数据库路径信息
long ptSelFlag=XCLS_TYPE_GDB; //文件类型为数据库
long selN=1; //文件类型个数
char user[30]="";
char pwsd[64]="";

CSFeatureCls *ptSFCls=NULL; //简单要素类对象指针
char SFclsName[]="TestSFeaCls"; //简单要素类名称
/*简单要素类所属的要素数据集的ID,dsID=0表示要创建的要素类
不属于某个要素数据集。*/
long DsID=0;
long NetID=0; //简单要素类所在的几何网络的ID
long srID=0; //空间参照系的id
char AliasName[]="MyAliasName";//简单要素类的别名,不能超过128个字节
char ModelName[]="MyModelName"; //模板名称,不能超过128个字节
char *ptSubTypeField=NULL; //子类型的字段名,可为NULL,表示不划分子类型
//简单要素类的属性结构,该参数可以为NULL,表示没有属性
//如要创建属性结构,参考要素类的创建示例
CATT_STRU *fclsStru=NULL;

char fclsType=FCLS_SUNION_TYPE; //混合要素类
TYPE_FCLS_ID fclsid=0; //简单要素类ID;

ptGDB = new CGDataBase;
ptSFCls = new CSFeatureCls;

if(ShowGDBShellDlg(path,&ptSelFlag,selN,0,"选择类")>0) //地理数据库目录选择对话框
{
GetLoginInfo(path.svcName,user,30,pwsd,64); //得到对话框中的用户名和密码
if(GDBSvr.Connect(path.svcName,user,pwsd)>0) //服务器连接
if(ptGDB->Open(&GDBSvr,path.gdbName)>0) //打开地理数据库
{
fclsid=ptSFCls->cls_Create(ptGDB, SFclsName, DsID, NetID, selN,
AliasName, ModelName, ptSubTypeField, fclsStru,fclsType);
}
}

if(fclsid>0)
AfxMessageBox("简单要素类创建成功!");
else
AfxMessageBox("简单要素类创建失败!");

delete ptSFCls; ptSFCls=NULL;

delete ptGDB; ptGDB=NULL;

}

例3-2:添加一个要素(以几何形态为区(只有一圈弧段)的要素为例)
void OnAppendsfeature(CSFeatureCls *ptSFCls)
{
CAnyPolygon reg; //多边形对象指针
D_DOT plydot[5]; //坐标点序列
TYPE_REG_ID objid; //多边形要素的id
REG_INFO rinf; //多边形图形参数
long ptNe[2]; //记录多边形每条线上点数的数组
CGeomBasePTR *ptLine;

memset(&rinf,0,sizeof(REG_INFO));
rinf.libID = 0;

rinf.fillclr = 6; //区域填充色
rinf.endclr = 6; //区域填充结束色
rinf.patID = 1632;
rinf.pathei = 5; //图案高
rinf.patwid = 5; //图案宽
rinf.patclr = 5; //图案颜色,图案颜色固定,即使渐变填充时也不变。
rinf.outpenw = 2; //图案笔宽

ptNe[0] = 1; //第一圈的弧段数
ptNe[1] = 0;

//构造多边型坐标
plydot[0].x=0; plydot[0].y=0;
plydot[1].x=100; plydot[1].y=0;
plydot[2].x=100; plydot[2].y=100;
plydot[3].x=0; plydot[3].y=100;
plydot[4].x=0; plydot[4].y=0;

ptLine = new CGeomBasePTR[2];
memset(ptLine,0,sizeof(CGeomBasePTR)*2);

ptLine[0] = new CAnyLine;

if(((CAnyLine*)(ptLine[0]))->m_varLin.Append(plydot,5,2)>0)
{
reg.Set(ptLine,ptNe,1);
objid = ptSFCls->polygon_Append(&reg,NULL,&rinf); //添加多边形要素到简单要素类
if(objid>0)
AfxMessageBox("添加区要素成功!");
}
delete (CAnyLine*)ptLine[0];
delete[] ptLine; ptLine = NULL;
}

例3-3 矩形查询示例(以区几何形态的要素类型为例)
void OnRectAsk(CSFeatureCls *ptSFCls)
{
D_RECT rect;
long rtn=-1;
CSFeatureSet *ptSet=NULL;
TYPE_OBJ_ID objid;

//构造矩形范围
rect.xmin = -100; rect.ymin = -100;
rect.xmax = 1000; rect.ymax = 1000;
ptSet = new CSFeatureSet;

rtn = ptSFCls->RectSelect(AnyPolygon_Type,&rect,ptSet); //矩形查询
if(rtn>0)
{
if(ptSet->GetObjCount()>0)
{
ptSet->MoveFirst();
do {
ptSet->GetObjID(&objid);
} while(ptSet->MoveNext()!=END_OF_SET);
}
}

else
AfxMessageBox("查询结果集为空!");

delete ptSet; ptSet = NULL;
}

例4-1 创建要素类
void OnCreatecfls()
{
CGDBServer GDBSvr;
CGDataBase *ptGDB; //存储该要素类的地理数据库
GDBPATHINFO path; //地理数据库路径信息
long ptSelFlag=XCLS_TYPE_GDB; //文件类型为数据库
long selN=1; //文件类型个数

char user[30]="";
char pwsd[64]="";

char fclsType=FCLS_UNION_TYPE; //要素类的类型 TYPE_FCLS_ID
fclsID; //要素类的 ID
CFeatureCls *ptFCls=NULL; //要素类对象
char CFlsName[]="MyCFls"; //要素类的名字
long DsID=0; /*要素类所属的要素数据集的 ID,dsID=0
表示要创建的要素类不属于某个要素数据集。*/
long NetID=0; //要素类所在的几何网络的 ID
long SrID=0; //空间参照系的 ID,<=0表示使用缺省参照系
char AliasName[]="MyAliasName";//要素类的别名,不能超过 128 个字节
char ModelName[]="MyModelName"; //模板名称,不能超过 128个字节
char *ptSubTypeField=NULL; //子类型的字段名

CATT_STRU *fclsStru=NULL; //要素类的属性结构
CFIELD_HEAD *field=NULL;

//以下是添加字段要属性结构中
field = new CFIELD_HEAD;
fclsStru = new CATT_STRU;
lstrcpy(field->fieldname,_T("MyAtt")); //字段名
field->fieldtype = STR_TYPE; //字段类型
field->msk_leng = 50; //字段字符长度
field->edit_enable =1; //字段是否可编辑
field->ptc_pos = -1; //字段在属性结构中的序号,新字段为-1
fclsStru->AppendFld(1,field); //添加字段
//字段添加完成

ptGDB = new CGDataBase;
ptFCls = new CFeatureCls;

if(ShowGDBShellDlg(path,&ptSelFlag,selN,0,"选择类")>0) //地理数据库目录选择对话框
{
GetLoginInfo(path.svcName,user,30,pwsd,64); //得到对话框中的用户名和密码
if(GDBSvr.Connect(path.svcName,user,pwsd)>0) //服务器连接
{
if(ptGDB->Open(&GDBSvr,path.gdbName)>0) //打开地理数据库
//在打开的地理数据库中创建要素类
fclsID=ptFCls->fcls_Create(ptGDB,CFlsName,DsID,NetID,SrID,
AliasName,ModelName,
ptSubTypeField,fclsStru,fclsType);
}
}

if(fclsID>0)
{
ptFCls->fcls_Close();
AfxMessageBox("创建成功!");
}
else
AfxMessageBox("创建失败!");

delete ptGDB; ptGDB=NULL;
delete ptFCls; ptFCls = NULL;
delete field; field = NULL;
delete fclsStru; fclsStru = NULL;

}

例4-2 添加要素
void WINAPI AppendFeature(CFeatureCls *ptFCls)
{
CAnyLine arc;
CArcIDs ArcIDs;
REG_INFO rinf;
D_DOT xy1[3];
D_DOT xy2[2];
CFeature feature;
long fclsID;

xy1[0].x = 0; xy1[0].y = 100;
xy1[1].x = 0; xy1[1].y = 0;
xy1[2].x = 100; xy1[2].y = 0;

xy2[0].x = 100; xy2[0].y = 0;
xy2[1].x = 0; xy2[1].y = 100;

arc.m_linType = ARC_TYPE_BROKEN_LINE;
arc.m_varLin.Set(&xy1,3);

TYPE_ARC_ID arcid = ptFCls->arc_Append(arc);
arc.m_varLin.Set(&xy2,2);
TYPE_ARC_ID arcid1 = ptFCls->arc_Append(arc);

ArcIDs.Add(arcid);
ArcIDs.Add(arcid1);

memset(&rinf,0,sizeof(REG_INFO));
rinf.libID = 0;

rinf.fillclr = 6; //区域填充色
rinf.endclr = 0; //区域填充结束色
rinf.patID = 8;
rinf.pathei = 5; //图案高
rinf.patwid = 5; //图案宽

REG_INFO_ID rinfID=ptFCls->rinf_Append(rinf);
TYPE_GEOM_ID gregID=ptFCls->greg_Append(ArcIDs,rinfID);

fclsID =ptFCls->GetSpaceID();
feature.m_geom.New(1);

feature.m_geom[0].geomType=GEOM_REG_TYPE;
feature.m_geom[0].geomID = gregID;
feature.m_geom[0].fclsID = fclsID;
feature.m_geom[0].infID = rinfID;

CATT_STRU stru;
if(ptFCls->att_GetStru(stru)>0)
{
feature.m_att.SetStru(stru);
for(int i=0;i<stru.hd.numbfield;i++)
feature.m_att.SetFldFromStr(i,"Test");
}

TYPE_FID fID = ptFCls->f_Append(feature);
}

例4-3 取要素引用信息和坐标

Void GetFeaturePos(CFeatureCls* fCls, TYPE_FID fID)
{
//一、直接通过要素类成员函数f_GetGeomPos取坐标
CPolyGeometry geoms;
fCls->f_GetGeomPos(fID,geoms);
D_DOT *xy = geoms.ptXY(); //D_DOT *xy是要素的空间坐标信息

//二、通过要素类成员函数f_Get取(几何引用->空间引用)
CFeature f;
GEOM_REF *ptGeomRef; //要素的几何实体信息
long geomNum; //要素的几何实体的个数
CDotIDs dat; //几何引用的空间点数据对象 ID 序列
CArcIDs ldat,rdat; //几何引用的空间弧段数据对象 ID 序列

int j,k;

int num;
D_3DOT dot;
CVarLine ldot,rdot; //线的折线坐标

if(fCls->f_Get(fID,f)>0) //得到一个要素
{
geomNum = f.m_geom.GetGeomNum(); //取要素引用几何实体的个数
ptGeomRef = f.m_geom.GetBufPtr(); //取要素的引用几何实体的信息
//循环操作几何实体
for(int i=0;i<geomNum;i++)
{
switch(ptGeomRef[i].geomType)
{
case GEOM_PNT_TYPE: //判断几何实体的类型
//取点实体引用的空间点数据对象 ID序列
fCls->gpnt_Get(ptGeomRef[i].geomID,dat);
num = dat.GetSize();
for(j=0;j<num;j++)
{
//dot是点数据对象 ID 为 dat[j]的坐标
fCls->dot_GetPos(dat[j],dot);
}
break;
case GEOM_LIN_TYPE:
//取线实体引用的空间弧段数据对象ID 序列
fCls->glin_Get(ptGeomRef[i].geomID,ldat);
num = ldat.GetSize();
if(num!=0)
{
for(j=0;j<num;j++)
{
fCls->arc_GetPos(abs(ldat[j]),ldot); //取弧段坐标信息

for(k=0;k<ldot.dotNum();k++)
{
double x = ldot.GetX(k); //x,y,z 是坐标信息
double y = ldot.GetY(k);
double z = ldot.GetZ(k);
}
}
}
break;
case GEOM_REG_TYPE:
//取区实体引用的空间弧段数据对象ID 序列

fCls->greg_Get(ptGeomRef[i].geomID,rdat);
num = rdat.GetSize();
if(num!=0)
{
for(j=0;j<num;j++)
{
fCls->arc_GetPos(abs(rdat[j]),rdot); //取弧段坐标信息
for(k=0;k<rdot.dotNum();k++)
{
double x = rdot.GetX(k); //x,y,z 是坐标信息
double y = rdot.GetY(k);
double z = rdot.GetZ(k);
}

}
}
break;
default:
;
}

}
}
}

例4-4 更新要素的属性
void UpdateFeatureAtt(CFeatureCls* fCls, TYPE_FID fID)
{
CFeature f; //要素
CRecord attRcd; //属性记录
CATT_STRU stru; //属性结构
char strtemp[]="test";

if(fCls->f_Get(fID,f)>0)
{
if(f.m_att.GetStru(stru)>0) //得到要素的属性结构
{
for(int i=0;i<stru.hd.numbfield;i++) //循环每个字段
{
long rtn = f.m_att.SetFldFromStr(i,strtemp); //设字段的值

attRcd = f.m_att;
fCls->att_Update(fID,attRcd) ; //更新要素的属性
}
}
}
}

例4-5 属性查询
void FAttSelect(CFeatureCls* fCls)
{
char condition[]="test='test'";
long subTypeCode=-1; //子类型字段的值,该参数缺省为-1
char orderByFld[]="OID"; //结果排序字段名
char isAsc=1;
CATT_STRU *ptStru=NULL;
CConditionOBJ *ptConObj=NULL; //查询条件
CFeatureSet *ptSet=NULL; //返回查询结果集
TYPE_OBJ_ID objid;

ptConObj = new CConditionOBJ;
ptSet = new CFeatureSet;
ptConObj->SetAttCondition(condition);


if(fCls->f_AttSelect(ptConObj, ptSet, subTypeCode, orderByFld, isAsc)>0) //属性查询
{
if(ptSet->GetObjCount()>0)
{
ptSet->MoveFirst();
do {
ptSet->GetObjID(&objid); //取结果集里的所有对象
} while(ptSet->MoveNext()!=END_OF_SET);
}
}

delete ptConObj; ptConObj=NULL;
delete ptSet; ptSet=NULL;

}

例5-1-1 取对象类属性结构
void OnGetCObjAttStru(CObjectCls* ptCObjectCls)
{
CATT_STRU stru; //对象类属性结构
CString str;

if(ptCObjectCls->att_GetStru(stru)>0) //取属性结构
{
for(int i=0;i<stru.hd.numbfield;i++) //循环字段
{
str.Format("%s",stru.fldEntry[i].fieldname); //取字段名
MessageBox(str);
}
}
}

例5-1-2 设置对象类属性结构

void OnSetcobjattstur(CObjectCls* ptCObjectCls)
{
CATT_STRU stru; //对象类的属性结构
CFIELD_HEAD fldhead; //字段信息
CExtFIELD_HEAD extfldhead(LONG_TYPE,1); //字段的扩展信息
TYPE_XCLS_ID dmn_ID = 1; //域集 ID

lstrcpy(fldhead.fieldname,_T("APPENDFIELD")); //字段名
fldhead.fieldtype = LONG_TYPE; //字段类型
fldhead.ptc_pos = -1; //字段在属性结构中的序号
fldhead.msk_leng = 10; //字段字符长度

lstrcpy(extfldhead.m_alias,_T("MyField")); //字段扩展信息
extfldhead.m_IsNull = 1;
extfldhead.SetDefVal(10);
extfldhead.SetMinVal(1);
extfldhead.SetMaxVal(90);

extfldhead.m_dmnID = dmn_ID; //所属域集 ID

fldhead.SetExtFIELD_HEAD(&extfldhead);
if(stru.AppendFld(1,&fldhead)>0) //添加字段
{
if(ptCObjectCls->att_SetStru(stru)>0) //设置对象类属性结构
AfxMessageBox("对象类属性结构创建成功!");
}

}

例5-1-3添加记录(所有字段)

void OnAppendRecordALL(CObjectCls* ptCObjectCls)
{

CATT_STRU stru;
TIME_STRU timeval; //时间记录结构体
short sht=100;
char str[]="zondy";
char chr='A';
__int64 i64=1000;
DATE_STRU date;


//设置时间
timeval.hour = 23;
timeval.sec = 30;
timeval.min = 20;

date.day = 23;
date.mon=1;
date.year=2006;

if(ptCObjectCls->att_GetStru(stru)>0) //取对象类的属性结构
{
CRecord rcd(&stru);
for(short i=0;i<stru.hd.numbfield;i++)
{
switch(stru.fldEntry[i].fieldtype) //判断字段的类型

{
case LONG_TYPE:
rcd.SetLongVal(i,1000); //设置长整型字段的值
break;
case TIME_TYPE:
rcd.SetTimeVal(i,timeval); //设置时间型字段的值
break;
case SHORT_TYPE:
rcd.SetShortVal(i,sht); //设置短整型字段的值
break;
case BYTE_TYPE: //设置字节类型字段的值
rcd.SetCharVal(i,chr);
break;
case INT64_TYPE:
rcd.SetInt64Val(i,i64); //设置 64 位长整型字段的值
break;
case DATE_TYPE: //设置日期型字段的值
rcd.SetDateVal(i,date);
break;
default:
rcd.SetFldNull(i);
}
}
if(ptCObjectCls->att_Append(rcd)>0) //添加记录到对象类中
AfxMessageBox("记录添加成功!");

}
}

例5-1-4 记录查询

void OnRecordSelect(CObjectCls* ptCObjectCls)
{
//查询(有条件表达式对话框)
TYPE_OBJ_ID ObjID; //对象 ID
CConditionOBJ condition; //查找条件对象
CObjectSet ObjSet; //对象集合
CATT_STRU stru;
char expStr[255];
long len=255;

memset(&stru,0,sizeof(CATT_STRU));

ptCObjectCls->att_GetStru(stru);
if(Tool_ShowAttExpSel(stru,"输入表达式",expStr,&len)>0)
{
condition.SetAttCondition(expStr);
if(ptCObjectCls->Select(&condition,&ObjSet)>0)
{
if(ObjSet .GetObjCount()>0)
{
ObjSet .MoveFirst();
do {
ObjSet .GetObjID(&ObjID); //取结果集里的所有对象
} while(ptSet.MoveNext()!=END_OF_SET);
}
}
}

例5-1-5 设置子类型

void OnSetSubTypeFld(CObjectCls* ptCObjectCls)
{
CATT_STRU stru;
if(ptCObjectCls->att_GetStru(stru)>0)
{
//设置子类型对象,此字段类型必须是长整或短整型
//参数传NULL或""则取消子类型字段设置
if(ptCObjectCls->subT_SetSubTypeField(stru.fldEntry[0].fieldname)>0)
AfxMessageBox("子类型对象设置成功!");
}
}

例5-2-1 创建关系类
Void OnCreatecrelationcls()
{
CRelationCls *ptCRelationCls; //关系类对象指针
CGDBServer GDBSvr;
CGDataBase *ptGDB=NULL;
GDBPATHINFO path;
long ptSelFlag=XCLS_TYPE_GDB;
char user[30]="";
char pwsd[64]="";
char ptRclsName[]="MyRelationCls"; //关系类名称
long dsID=0; //要素数据集 ID
TYPE_XCLS_ID origClsID=4; //原始类 ID
TYPE_XCLS_ID destClsID=5; //目的类 ID
short origClsType=XCLS_TYPE_FCLS; //原始类类型码

short destClsType=XCLS_TYPE_FCLS; //目的类类型码
char ptFwardLabel[]="FwardLabel"; //向前标签
char ptBwardLabel[]="BwardLabel"; //向后标签
short cardinality=REL_CARD_1_1; //映射类型
short notification=REL_NOTIFY_BOTH; //通知类型
char relType=REL_TYPE_ASSOCIATE; //关系类类型
char isAttributed=0; //指定关系类是否属性化
CATT_STRU *stru=NULL; //属性结构
char origPKey[]="OID"; //原始类主键
char destPKey[]="OID"; //目的类主键
char origFKey[]="q"; //原始类外键
char destFKey[]=""; //目的类外键
TYPE_OCLS_ID clsid=0;

ptGDB = new CGDataBase;
ptCRelationCls = new CRelationCls;

if(ShowGDBShellDlg(path,&ptSelFlag,1)>0)
{
GetLoginInfo(path.svcName,user,30,pwsd,64);
if(GDBSvr.Connect(path.svcName,user,pwsd)>0)
if(ptGDB->Open(&GDBSvr,path.gdbName)>0) //打开地理数据库
{
//创建关系类
clsid = ptCRelationCls->Create(ptGDB, ptRclsName, dsID,
origClsID, destClsID, origClsType, destClsType,
ptFwardLabel, ptBwardLabel, cardinality,
notification, relType, isAttributed,
stru, origPKey, destPKey,
origFKey, destFKey);
}
}

if(clsid>0)
AfxMessageBox("关系类创建成功!");
else
AfxMessageBox("关系类创建失败!");

delete ptCRelationCls; ptCRelationCls=NULL;
delete ptGDB; ptGDB=NULL;
}

例5-2-2 取关系类型

void OnGetCRelationclsType(CRelationCls* ptCRelationCls)
{
char crlsType;
if(ptCRelationCls->GetRelationType(crlsType)>0)
{
switch(crlsType)
{
case REL_TYPE_ASSOCIATE:
AfxMessageBox("关联关系");
break;
case REL_TYPE_COMPOSITE:
AfxMessageBox("组合关系");
break;
case REL_TYPE_DEPENDENCE:
AfxMessageBox("依赖关系/引用关系");
break;
case REL_TYPE_INHERITED:
AfxMessageBox("继承关系");
break;
case REL_TYPE_META:
AfxMessageBox("元关系");
break;
default:
;
}
}
}

例6-1 添加注记
void OnAppendAnnotation(CAnnotationCls* ptCAnnotationCls)
{
/*添加文本注记************************************

D_DOT xy; //注记位置
CAnnDat dat; //注记信息封装类
TYPE_FID fID=0; //与注记关联的要素 id
CRecord *ptRcd=NULL; //注记的属性记录(可以为NULL,CRecord
用法可以参照对象类一章)
char ptTxt[]="Zondy"; //注记的内容
ANN_STR_INFO strinfo; //注记的可视化信息
memset(&strinfo,0,sizeof(ANN_STR_INFO));

//初始化注记的可视化信息结构
strinfo.height=5;
strinfo.width=5;
strinfo.iclr=5;

xy.x=100;
xy.y=100;

dat.m_type = ANN_TYPE_STR; //注记类型为字符串注记类型(必须先指定类型)
dat.SetTxt(ptTxt);
dat.SetInfo((char*)&strinfo);

TYPE_AID AID = ptCAnnotationCls->Append(&xy, dat, fID, ptRcd); //添加注记
if(AID>0)
AfxMessageBox("添加注记成功!");
else
AfxMessageBox("添加注记失败!");
***************************************************************/

///*添加 html注记*********************
D_DOT xy; //注记位置
CAnnDat dat; //注记信息封装类
TYPE_FID fID=0; //与注记关联的要素 id
CRecord *ptRcd=NULL; //注记的属性记录(可以为NULL,CRecord
用法可以参照对象类一章)
char ptTxt[]="<p><strong><em><u><strike><font
color='#ff0080'>zondy</font></strike></u></em></strong></p>";
ANN_HTML_INFO htmlinfo; //注记的可视化信息
TMPL_INFO tmplinfo;
memset(&htmlinfo,0,sizeof(ANN_HTML_INFO));
memset(&tmplinfo,0,sizeof(TMPL_INFO));

//初始化注记的可视化信息结构
htmlinfo.height=20;
htmlinfo.width=20;

//初始化注记模板信息
tmplinfo.iclr=5;

xy.x=100;
xy.y=100;

dat.m_type = ANN_TYPE_HTML; //注记类型为 HTML注记类型(必须先指定类型)
dat.SetTxt(ptTxt);
dat.SetInfo((char*)&htmlinfo);
dat.SetTmplInfo(tmplinfo);

TYPE_AID AID = ptCAnnotationCls->Append(&xy, dat, fID, ptRcd); //添加注记
if(AID>0)
AfxMessageBox("添加注记成功!");
else
AfxMessageBox("添加注记失败!");

//**********************************/
}

例6-1 取注记信息

Void OnGetAnnotationInfo(CAnnotationCls* ptCAnnotationCls,TYPE_AID id)
{
D_DOT xy; //注记坐标
D_RECT rc; //注记外包矩形
TYPE_FID fID; //和注记相关的要素 ID
CAnnDat dat; //注记数据信息(具体参阅 basclass70.h)
char *str;


if(ptCAnnotationCls)
{
if(ptCAnnotationCls->Get(id,&xy, &rc, &fID,dat)>0) //取注记信息
str = dat.GetTxt(); //CAnnDat参阅 basclass70.h或添加注记代码
CString cstr;
cstr.Format("取注记信息成功!内容是%s",str);
MessageBox(cstr);
}

}

 

例7-1 要素类添加拓扑规则()
void CCAnnotationClsView::OnAddRule(CFeatureCls* ptCFeaCls)
{
CTopRule toprule; //拓扑规则类

X_CLS_FCLS fclInf;
CGDataBase *GDB; //地理数据库
GDB = ptCFeaCls->GetGDataBase(); //取要素类的地理数据库
if(ptCFeaCls->fcls_GetInfo(fclInf)>0)
{
if(fclInf.ftype==FCLS_LIN_TYPE) //判断要素类的类型是否是线要素类
{
toprule.origClsID=fclInf.ID; //定义原始类的 ID
toprule.destClsID=fclInf.ID; //定义目的类的 ID
toprule.topType=LINE_NO_INTERSECTORINTERIORTOUCH; //定义拓扑规则的类型
TYPE_RULE_ID ruleID = GDB->rule_Add(fclInf.ID,&toprule);//添加规则
if(ruleID>0)
AfxMessageBox("拓扑规则添加成功");
}
}
}

例7-2 规则有效性检查
void OnValidateRule(CFeatureCls* ptCFeaCls,TYPE_RULE_ID ruleID)
{
CSmartArray<RULE_ERR_INFO> err; //不符合规则的 ID
RULE_ERR_INFO errinfo;
if(ptCFeaCls->rule_ValidateCls(ruleID,err)>0) //规则有效性检查
{
for(int i=0;i<err.GetSize();i++) //循环取不符合规则的 ID
errinfo = err.GetAt(i);
}
}

例7-3 GSQL
void OnGsqExecute(CGDataBase *ptOriGDB,CGDataBase *ptDesGDB)
{
//需要执行的GSQL语句
char gsql[]="SET @CLS-SC-ROAD = SELECT ATT FROM FCLS.SC-ROALK AS ROALK WHERE
RN LIKE 'G%' ORDER BY RN;";
char errStr[255];
CGSQLBlock gsqlblock;
if(gsqlblock.gsql_CreatEnv(ptoriGDB,ptdesGDB)>0) //分配 GSQL环境
if(gsqlblock.gsql_Prepare(gsql,sizeof(gsql))>0) //准备执行 GSQL语句
if(gsqlblock.gsql_Execute(0)>0) //执行 GSQL语句
{
gsqlblock.gsql_ReleaseEnv(); //释放 GSQL环境
AfxMessageBox("GSQL执行成功!");
}
else
{
gsqlblock.gsql_GetErrStr(errStr); //得到执行GSQL语句的错误信息

AfxMessageBox(errStr);
gsqlblock.gsql_ReleaseEnv();
}
}

 

MapGIS三维开发类库:

空间分析功能:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#判断日期是否正确(1900~今年,月份,天数)发布时间:2022-07-13
下一篇:
C#皮肤美化——按钮发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap