📄 scapi.h
字号:
/** 确认码
*/
byte SureCode[16];
byte pad[1];//崔宏威增加的一个成员用来对齐字节数
/** 错误码
*/
ScInt ErrorCode;
} ScRegisterInfo;
/**
* SC要传给上层的其它信息:非显示信息
*/
typedef struct ScOtherEventInfo
{
/// 车辆位置,用于计算自车位置到屏幕中心的距离
ScLogPoint ptVehicle;
/// ptVehicle是否有效
byte bVehicle;
/// unused.
byte pad[3];
} ScOtherEventInfo;
/**
* 避让点描述信息
*/
typedef struct ScConstraint
{
/// 避让点经纬度
ScObjPoint m_point;
/// 避让的路段ID
ScObjecteId m_segID;
/// 避让路段的名字。最长为SC_OP_POINAME_MAXSIZE个字符
ScWChar m_bufRoadName[SC_OP_POINAME_MAXSIZE];
/// 避让有效期。字符串格式。如 "20060105"
ScWChar m_validTime[10];
}ScConstraint;
/**
* 路线描述信息
*/
typedef struct ScRoutInfo
{
/// 路线长度
ScLong m_lLength;
/// 在该路线上估计行驶时间,单位秒
ScLong m_lTime;
}ScRoutInfo ;
/**
* GPS位置信息
*/
typedef struct ScGPSEventInfo
{
/// 经纬度(单位:NTU)
ScLogPoint position;
}ScGPSEventInfo;
/** \brief 观察者定义。定义了各模块会调用的回调函数。
*
* 导航系统在特定事件发生时会通过AppObserver发出通知
* 系统不依赖于应用程序是否相应这些事件
* 应用程序继承该类并实现其方法即可响应此通知
* 注意:在处理任何事件时,都必须保证尽快返回,否则可能会引发系统错误
*/
class ScApObserver
{
public:
/**
* GPS事件
* 如果需要处理这些信息,需要重载此函数
*
* @param eventid 事件ID 参考 ScGPSEvent
* @param pGI GPS信息, 当eventid = SC_GPS_POSITION时为位置信息,其它为空
* @return 0 事件未处理\n
* 1 事件已被处理\n
* 其它值的含义参考ScEventHandleType
*/
virtual ScInt GPSEvent( ScInt eventid, const ScGPSEventInfo * pGI) { return 0;}
/**
* 路径计算事件
* 如果需要处理这些信息,需要重载此函数
*
* @param eventid 事件ID 参考 ScRouteEvent
* @return 0 事件未处理\n
* 1 事件已被处理\n其它值的含义参考ScEventHandleType
*/
virtual ScInt RouteEvent( ScInt eventid,ScRoutInfo* pRouteInfo) { return 0 ;}
/**
* 路径引导事件
* 如果需要处理这些信息,需要重载此函数
*
* @param eventid 事件ID 参考 ScGuidEvent
* @return 0 事件未处理\n
* 1 事件已被处理\n
* 其它值的含义参考ScEventHandleType
*/
virtual ScInt GuidEvent( ScInt eventid) { return 0 ;}
/**
* 错误事件
* 如果需要处理这些错误信息,需要重载此函数
*
* @param eventid 事件ID
* @param pEI 详细错误信息
* @return 0 事件未处理\n
* 1 事件已被处理\n
* 其它值的含义参考ScEventHandleType
*/
virtual ScInt ErrorEvent(ScInt eventid, const ScErrorInfo * pEI ) { return 0; }
/**
* 绘制拐弯方向等其它信息
* 如果需要绘制这些信息,需要重载此函数
*
* @param pDI 绘制信息结构体
* @return 0 事件未处理 \n
* 1 事件已被处理\n
* 其它值的含义参考ScEventHandleType
*/
virtual ScInt DrawInfo( ScDrawInfo * pDI) { return 0; }
/**
* 注册事件
* 处理数据库注册事件
*
* \param eventid 事件序号
* \param pRI 注册信息
*/
virtual ScInt RegisterEvent(ScInt eventid , ScRegisterInfo *pRI) { return 0; }
/**
* 其它非绘制事件
*
* \param pOI 其他事件消息
*/
virtual ScInt OtherEvent(ScOtherEventInfo * pOI) { return 0; }
/**
* RC计算过程中进度事件通知。
*
* \param nPercent,进度的百分比。(0--100)
*/
virtual ScInt RcProcess(ScInt nPercent){return 0;}
};
///////////////////类型定义///////////////////////////////////////
/////////////////////API 定义////////////////////////////////////
//------------------------------------------------------------
// 系统API
//------------------------------------------------------------
/** \brief Sc初始化
*
* Sc初始化。在调用此函数时,需要保证窗口的大小是正确的。在win32平台可以通过
* GetClientRect(...)来确认窗口大小。如果使用MFC的View结构,在CView::OnCreate
* 中,窗口大小是(0,0,0,0),不是一个合法的窗口大小。
*
* @param pStartupParams 一个结构体指针,初始化信息应包含工作目录位置
* @return 0 创建成功\n
* <0 创建失败
*/
SC_API ScInt ScInit(ScStartupParams * pStartupParams);
/** \brief Sc退出
*
* 保存配置信息,释放所有分配的模块。在退出程序时,必须调用这个函数清理分配的
*内存和资源。
*/
SC_API void ScExit();
/** \brief 载入地图数据库
*
* 根据数据库文件名载入数据库
*
* @param dbname 数据库名称,如“北京”,“上海”,请使用绝对路径
* @return 0 创建成功\n
* <0 创建失败
*/
SC_API ScInt ScLoadDb(const ScWChar *dbname);
/** \brief 设定接收AP消息接收者
*
* 设定接收AP消息的类,在事件发生时对应模块会调用对应的虚方法
*/
SC_API ScInt ScSetApObserver(ScApObserver *apo);
//------------------------------------------------------------
// 状态API
//------------------------------------------------------------
/** \brief 获取系统状态
*
* 获取系统状态
*
* @return 系统状态。是ScSystemStatus枚举值或多个进行按位或操作后的组合值
*/
SC_API ScLong ScGetSystemStatus();
//------------------------------------------------------------
// 绘制相关API
//------------------------------------------------------------
/** \brief 开始绘制
*
* 启动绘制, ScDrawMap和ScEndDraw必须连续调用
*
* @param drawmap 0 不绘制地图\n
* 1 绘制地图
*/
SC_API void ScBeginDraw(ScInt drawmap);
/** \brief 绘制地图
* 绘制地图
*/
SC_API void ScDrawMap();
/** \brief 结束绘制
* 结束绘制
*/
SC_API void ScEndDraw();
/** \brief 将逻辑坐标值转换为设备坐标
* 将逻辑坐标值转换为设备坐标
*
* @param [in] ptLog
* @param [out] ptDev
*/
SC_API void ScLPtoDP(ScLogPoint *ptLog, ScDevPoint *ptDev);
/** \brief 将设备坐标转换为逻辑坐标
* 将设备坐标转换为逻辑坐标
*
* @param [in] ptDev
* @param [out] ptLog
*/
SC_API void ScDPtoLP(ScDevPoint *ptDev, ScLogPoint *ptLog);
/** \brief 将逻辑坐标转换为设备坐标
*
* 将逻辑坐标转换为设备坐标
* 由于ScLPtoDP会在ptLog值特别大,同时地图比例尺特别小时会溢出
* 为了解决这种情况,增加了这个函数。这个函数不保证ptDev和ptLog
* 点的对应,只保证当ptLog在屏幕外时,ptDev是在ptLog到屏幕中心的
* 连线上的一点,并且ptDev在屏幕外。
*/
SC_API ScInt ScLPtoDPClipped(ScLogPoint *ptLog, ScDevPoint *ptDev);
/** \brief 判断是否在地图的矩形区域内
*
* 判断是否在地图的矩形区域内
*
* @param [in] ptLog
*/
SC_API ScBool ScIsInMapRange(ScLogPoint *ptLog);
/** \brief 获得当前的比例尺
*
* 获得当前的比例尺
*/
SC_API ScLong ScGetScale();
/** \brief 获得当前的比例尺级数
*
* 获得当前的比例尺级数
*/
SC_API ScLong ScGetScaleIndex();
/** \brief 刷新地图
*
* 刷新地图
*
* @param [in] param 0 只刷新地图\n
* 1 根据客户区大小更新绘制矩形大小,并重新绘制地图
*/
SC_API void ScRefreshMap(ScInt resizing = 0);
/** \brief 缩放到显示整个地图
* 缩放到显示整个地图
*/
SC_API void ScZoomAll();
/** \brief 旋转地图
*
* 按角度旋转地图,缩放后会自动刷新整个地图
*
* @param angle 旋转角度
*/
SC_API void ScRotateMap( ScInt angle );
/** \brief 按比例尺缩放
*
* 按比例尺缩放,缩放后会自动刷新整个地图
*
* @param ScLongitude 缩放中心点的经度逻辑坐标
* @param latitude 缩放中心点的纬度逻辑坐标
* @param scale 比例尺的分母
*/
SC_API void ScZoomScale(ScLong ScLongitude, ScLong latitude, ScInt scale);
/** \brief 按地图上矩形区域缩放地图
*
* 按地图上矩形区域缩放地图
*
* @param [in] minlon 最小经度
* @param [in] maxlon 最大经度
* @param [in] minlat 最小纬度
* @param [in] maxlat 最大纬度
*/
SC_API void ScZoomMapRect(ScLong minlon, ScLong maxlon, ScLong minlat, ScLong maxlat);
/** \brief 平移地图
*
* 平移地图,平移后会自动刷新整个地图
*
* @param x x方向上的平移距离(设备坐标)
* @param y y方向上的平移距离(设备坐标)
*/
SC_API void ScPanMapOffset(ScInt x, ScInt y);
/** \brief 获得屏幕中心点的经纬度(逻辑坐标)
*
* 获得屏幕中心点的经纬度(逻辑坐标)
*
* @param ScLongitude 经度
* @param latitude 纬度
*/
SC_API void ScGetScreenCenterXY(ScLong &ScLongitude, ScLong &latitude);
/** \brief 定位到地图指定位置
*
* 定位到地图指定位置,并可设置比例尺
*
* @param longitude 定位后的地图中心经度
* @param latitude 定位后的地图中心纬度
* @param scalevalue 缩放后的比例尺
* example: ScMapLocate(12144291,3125302, 4000);
*/
SC_API void ScMapLocate(ScLong longitude, ScLong latitude, ScLong scalevalue);
/** \brief 设定是否显示放大图
*
* 设定是否显示放大图
*
* @param [in] cgon
*/
SC_API void ScSetCgOn(ScBool cgon);
/** \brief 设定放大图路径
*
* 设定放大图路径
*
* @param [in] 放大图路径,相对于ConfigFile的目录路径
*/
SC_API void ScSetCgPicDir(ScWChar *cgpicdir);
/** \brief 缩放到当前路径
*
* 缩放到当前路径
*/
SC_API ScInt ScZoomToRoute();
/** \brief AG语音播放
*
* AG语音播放API
*
* @param playStr 播报字串
* @param level 播报等级;0-异步,打断正在播报的\n
* 1-同步,等待顺序播报
*/
SC_API void ScPlayString(const ScWChar *playStr, ScInt level);
/**** GPS ****/
typedef enum _SC_DCType
{
SC_DC_GPS = 0x0001, //GPS
}SC_DCType;
/** \brief GPS通讯方式
* 通讯方式类型定义
*/
typedef enum _SC_CommType
{
SC_SERIAL_COMM = 0x0001, ///< 串口
SC_SOCKET_COMM = 0x0002, ///< 蓝牙
SC_WIDCOM_COMM = 0x0003 ///< widcom
}SC_CommType;
/** \brief 通讯方式选项
* 通讯方式选项类型定义
*/
typedef enum SC_CommOption
{
SC_CO_SPECIFIED = 0x0001, ///< 指定专用设备地址或名称
SC_CO_AUTODETECTED = 0x0002, ///< 自动探测设备
}SC_CommOption;
//bluetooth device
#ifdef __SYMBIAN32__
#include <e32std.h>
#include <bttypes.h>
#define SC_OP_BLUETOOTH
struct ScBluetoothDevice
{
TBTDevAddr tbdev;
TBuf<32> DeviceName;
};
#endif
#ifdef WIN32
#define SC_OP_BLUETOOTH
struct ScBluetoothDevice
{
ScWChar name[SC_OP_DEVICENAME_MAXSIZE]; //device name.
ScULong address[2]; //device address
};
#endif
//------------------------------------------------------------
// GPS相关API
//------------------------------------------------------------
#define GPS_FOUND 0x0001
#define GPS_OPEN_FAILED 0x0002
#define GPS_SET_FAILED 0x0003
#define GPS_NOT 0x0004
/** \brief GPS参数
* GPS参数
*/
typedef class ScGpsParams
{
public:
/**
* 是numa格式还是moto的二进制格式
* - SC_CO_SPECIFIED
*/
SC_CommOption option;
/**
* 设备类型,是否是gps设备
* - SC_DC_GPS = 0x0001
*/
SC_DCType dcType;
/**
* 通讯方式,是串口通讯方式还是socket通讯方式
* - SC_SERIAL_COMM = 0x0001 串口
* - SC_SOCKET_COMM = 0x0002 蓝牙
*/
SC_CommType commType;
/**
* gps状态,用于扫描
* - SCAN_STATUS_GPS_FOUND
* - SCAN_STATUS_OPEN_FAILED
* - SCAN_STATUS_OPEN_SUC
*/
ScInt Status;
union
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -