MAPGIS二次开发讲义 下载本文

4、网络分析数据操作 弧段分配方案

设置弧段分配方案

short _SetAllocatedArcs(short ai,long *arcsLst,long len); 参数:入口 ai - 工作区号

*arcsLst - 弧段分配列表

len -

弧段分配列表长度

出口 无

返回值 成功返回1,失败返回0。

取所有弧段数

long _GetAllocatedArcsNum(short ai); 参数:入口 ai - 工作区号

出口 无

返回值 成功返回弧段数,失败返回0。

取弧段分配方案

short _GetAllocatedArcs(short ai,long *arcsLst,long len); 参数:入口 ai - 工作区号

len - 弧段分配列表长度 出口 *arcsLst - 弧段分配列表 返回值 成功返回1,失败返回0。

取弧段分配信息

short _GetArcAllocInfo(short ai,long li,ARC_ALLOC_INFO *allocInf); 参数:入口 ai - 工作区号 li - 弧段号

出口 *allocInf - 返回弧段分配信息 返回值 成功=1,失败=0。 设置弧段分配信息

short _SetArcAllocInfo(short ai,long li,ARC_ALLOC_INFO *allocInf); 参数:入口 ai - 工作区号 li - 弧段号

*allocInf - 弧段分配信息 出口

返回值 成功=1,失败=0。

结点转角权值

设置结点的转角权值类型

int WINAPI _SetLinkValType(short ai,long ni,short valType); 参数:入口 ai -工作区号 ni -结点号

valtype -连通值数据类型,可以是下列值之一:BIT_TYPE、BYTE_TYPE、

SHORT_TYPE、LONG_TYPE、FLOAT_TYPE、DOUBLE_TYPE。

返回值 返回结点数据类型。详细说明请参阅_GetNod函数。

取结点的转角权值

int _GetNodLink(short ai,long ni,long li0,long li1, double *val,short *valtype); 参数:入口 ai -工作区号 ni -结点号

li0 -前一条弧段 li1 -后一条弧段

出口 *val-返回弧段连通值,连通值范围由连通值数据类型决定

*valtype -返回连通值数据类型,可以是下列值之一:BIT_TYPE、

BYTE_TYPE、SHORT_TYPE、LONG_TYPE、FLOAT_TYPE、DOUBLE_TYPE。

若不需要返回连通值数据类型,则valtype可以为NULL。

返回值 返回结点数据类型。详细说明请参阅_GetNod函数。

更新结点的转角权值

int _UpdateNodLink(short ai,long ni, long li0,long li1,double *val); 参数:入口 ai -工作区号 ni -结点号

li0 -前一条弧段 li1 -后一条弧段

*val -弧段连通值,连通值的取值取决于_SetLinkValType ()函数所设类

型,

出口 无

返回值 1/0 - 成功/失败

说明:如果ni号结点已经有连通方阵,那么该函数更新原来的连通方阵;否则就将连通方阵添加到ni号结点,并改变结点数据类型(位或NOD_LINK)。

网络中心数据

取网络中心结点数据

int _GetNodCenter(short ai,long ni,NOD_CENTER_INFO *ncinf); 参数:入口 ai -工作区号

ni -结点号 出口 *ncinf-返回网络中心结点数据

返回值 返回结点数据类型,详细说明请参阅_GetNod函数。 更新网络中心结点数据

int _UpdateNodCenter(short ai,long ni,NOD_CENTER_INFO *ncinf); 参数:入口 ai -工作区号

ni -结点号 *ncinf-网络中心结点数据

出口 无

返回值 1/0 - 成功/失败

说明:如果ni号结点已经有网络中心结点数据,那么该函数更新原来的网络中心结点数据;否则就将网络中心结点数据添加到ni号结点,并改变结点数据类型(位或NOD_CENTER)。

网络站点数据

取网络站结点数据

int _GetNodStop(short ai,long ni,NOD_STOP_INFO *nsinf); 参数:入口 ai -工作区号 ni -结点号

出口 *nsinf-返回网络终止结点数据

返回值 返回结点数据类型,失败则返回0,请参阅_GetNod函数。 更新网络站点数据

int _UpdateNodStop(short ai,long ni,NOD_STOP_INFO *nsinf); 参数:入口 ai -工作区号

ni -结点号

*nsinf-网络终止结点数据

出口 无

返回值 1/0 - 成功/失败

说明:如果ni号结点已经有网络终止结点数据,那么该函数更新原来的网络终止结点数据;否则就将网络终止结点数据添加到ni号结点,并改变结点数据类型(位或NOD_STOP)。

网络障碍数据

取网络障碍结点数据

int _GetNodBarrier(short ai,long ni,NOD_BARRIER_INFO *nbinf);

参数:入口 ai -工作区号

ni -结点号 出口 *nbinf-返回网络障碍结点数据

返回值 返回结点数据类型,失败则返回0,请参阅_GetNod函数。 更新网络障碍结点数据

int _UpdateNodBarrier(short ai,long ni,NOD_BARRIER_INFO *nbinf); 参数:入口 ai -工作区号 ni -结点号

*nbinf -网络障碍结点数据 出口 无

返回值 1/0 -成功/失败

说明:如果ni号结点已经有网络障碍结点数据,那么该函数更新原来的网络障碍结点数据,否则就将网络障碍结点数据添加到ni号结点,并改变结点数据类型(位或NOD_BARRIER)。

5、查找检索 位置判断函数

判断点是否在矩形框内

short _PntInRect(D_DOT *dot,D_RECT *rc); 参数:入口 dot - 判断点位置

*rc - 矩形范围

出口 无

返回值 dot点在rc矩形框内返回2,在矩形框上返回1,在框外返回0。

判断点是否在多边形内

short _IsDotInPolygon(D_DOT *pxy,long dn,D_DOT *dot) 参数:入口 *pxy - 多边形坐标串,不要求多边形封闭

dn - pxy包含的点数 *dot - 判断点坐标

出口 无

返回值 dot点在多边形内返回2,在边线上返回1,在多边形外返回0。 VB函数:Declare Function bIsDotInPolygon(pxy As D_DOT, ByVal dn As Long, ByVal

dot As D_DOT) As Integer

判断点是否在区域内

short _IsDotInReg(short regNum,D_DOT *xy,long *ne,D_DOT *dot,short flg); short _IsDotInReg1(D_DOT *dot,short ai,long ri,short flg); 参数:入口

*xy - 区域边界坐标数据串。请参阅_GetRegEdge函数说明。 ai - 工作区号

ri - 区域号

*ne - 区域边界每一圈点数。 *dot - 判断点坐标。

Flg - 是否判断内圈标志,1/0:判断/不判断。即flg=1时,要严格判断点

是否落在区域内,若落在区域的空洞内,也认为是落在区域外

边。

出口 无

返回值 dot点在区域内返回2,在边线上返回1,在区域外返回0。

VB函数:Declare Function bIsDotInReg(ByVal regNum As Integer, xy As D_DOT,

ne As Long, ByVal dot As D_DOT, ByVal flg As Integer) As Integer

判断线是否与区域相交

short _LinInterReg(short lai,long li,short rai,long ri);

short _LinInterReg1(D_DOT *xy,long len,D_DOT *rxy,long *ne,short neLen); 参数:入口 *xy – 线上点坐标数据串

*rxy - 区域边界坐标数据串。请参阅_GetRegEdge函数说明。 lai - 线工作区号 rai - 区工作区号 ri - 区域号

*ne - 区域边界每一圈点数 neLen - ne数组的项数

出口 无

返回值 相交返回1,否则返回0

判断两个区是否相交

short _RegInterReg(short rai,long ri,short rai1,long ri1);

short _RegInterReg1(D_DOT *rxy0,long *ne0,short ne0Len,D_DOT *rxy1,long *ne1,short ne1Len);

参数:入口 rai - 第1个区所在的工作区号