⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scapi.h

📁 NEA1803 51单片机与12864 由串口中断收取数据 显示经度纬度 高度 速度 时间 使用卫星数-GPS development NEA1803 51 SCM and 12864 collect
💻 H
📖 第 1 页 / 共 5 页
字号:
};


/** 查询POI类别列表
	
	使用方法:
			ScPOIType	*ppTypes = NULL; 
			ScInt		getTypeCnt = 0;
			ScGetPOIType(SC_POITYPE_COMMON, &ppTypes,&getTypeCnt);
*/
/// 搜索 2、3级时会根据内部保存的1、2级Class进行搜索
SC_API 
ScResult ScGetPOIType(	/*in*/ SC_POITYPE_QUERYTYPE qClass,  
						/*in,out*/ScPOIType *&ppTypes, //in:*ppTypes =NULL ;out:内部字串指针 
						/*in,out*/ScInt	&typeCnt // out:输出最大条数
					); 
/** 
	父子搜索时,用于确定父类别,内部保存当前1、2级Class
	请顺序使用,并保证1.2级的父子关系正确
	@param qClass	SC_POITYPE_CURRENT|SC_POITYPE_CLASS1 或 SC_POITYPE_CURRENT|SC_POITYPE_CLASS2
	@param types 
*/
SC_API 
ScResult ScSetPOIType(	/*in*/ SC_POITYPE_QUERYTYPE qClass,  // SC_POITYPE_CLASS1/SC_POITYPE_CLASS2
						/*in*/const ScPOIType types);


/// get时 SC分配内存,由SC释放
SC_API 
ScResult ScReleasePOIType(/*in,out*/ScPOIType *&ppTypes); ///out:*ppTypes = NULL


SC_API ScInt ScGetRoundPOIIconInfo(ScInt code, ScWChar *iconfile, ScInt iconfilelen,
								   ScInt *iconindex);
/**
 * 根据某个POI的类型代码获得它对应的图标文件和索引。需要遍历整个地图层数组,速度比较慢。
 * @param [in] mincode, maxcode POI类型代码范围
 * @param [out] iconfile 返回的图标文件,文件名为绝对路径
 * @param [out] iconfile 图标文件名称大小
 * @param [out] iconindex 返回的图标索引
 * @return >=0 成功
 *         <0 失败
 */
SC_API ScInt ScGetPOIIconInfo(ScInt mincode, ScInt maxcode, ScWChar *iconfile, ScInt iconfilelen, 
						  ScInt *iconindex);

//---------district ---------------------------------

enum SC_DISTRICT_QUERYTYPE //district
{
	SC_ADMIN_QUERYCn	= 0x1,	//country ,待扩展
	SC_ADMIN_QUERYPr	= 0x2,	//Province
	SC_ADMIN_QUERYCt	= 0x3,	//City
	SC_ADMIN_QUERYTn	= 0x4,	//Town
};
/**
	行政区划
*/
struct ScDistrict {
	ScInt		code; //为一个9位10进制数 [87][65][43][210] [省][市][区][000]
	ScWChar		name[SC_POITYPENAME_MAXSIZE]; //行政区划名称,<64;
};

#define SC_CHINA_Code 0
//判断是否为省级编码,非一定,仅是一个范围判断
#define SC_CHINA_IsPrCode(code)		((code%10000000)== 0) &&((code/10000000)>=11)
//判断是否为市级编码,非一定,仅是一个范围判断
#define SC_CHINA_IsCtCode(code)		((code%100000)==0) && ((code/100000)>=1101)
//判断是否为县级编码,非一定,仅是一个范围判断
#define SC_CHINA_IsTnCode(code)		((code%1000)==0) && ((code/1000)>=110101)

//取得省级编码
#define SC_CHINA_GetPrCode(code)	((code/10000000)*10000000)
//取得市级编码
#define SC_CHINA_GetCtCode(code)	((code/100000)*100000)
//取得县级编码
#define SC_CHINA_GetTnCode(code)	((code/1000)*1000)


/** 搜索 Ct、Tn级时会根据内部保存的Pr、Ct级Class进行搜索
	@param qType	对行政区划搜索的级别
	@param dCode	给出一个基编码。
					dCode == 0 && SC_ADMIN_QUERYPv,取得全部省级编码;
				    其它时根据qCode,返回相应的搜索请求,如当取得某个行政区划的名称时,会根据此编码返回;
					但并不要求等级一定相符,编码小于等于请求等级。
					
*/
SC_API ScResult ScGetDistrict (	
				/*in*/ const SC_DISTRICT_QUERYTYPE qType,  
				/*in*/  const ScInt dCode, //
				/*in,out*/ScDistrict *&ppDist, //in:指针列表 ;out:内部字串指针 
				/*in,out*/ScInt	&distCnt // out:输出最大条数
				);

//根据屏幕坐标取得行政区划编码,dist.name为全部行政区划名称的连接:北京市海淀区
SC_API ScResult ScGetDistrict(
				/*in*/ScDevPoint pt,
				/*out*/ScDistrict& dist
				);
 
/// get时 SC分配内存,由SC释放
SC_API ScResult ScReleaseDistrict(/*in,out*/ScDistrict *&ppDist); ///out: NULL



//----------Place Search ---------------------------------
/**
	地名搜索类别,包括POI搜索,或关系枚举
*/
typedef ScRect ScDevRect;
enum SC_PLACE_QUERYTYPE
{
	SC_PQT_NO		= 0x0,              //无类型限定,即搜索Road|POI,此时ScPlaceQueryOption.poiType失效
	SC_PQT_ROAD		= 0x1,				//道路
	SC_PQT_POI		= 0x2,				//兴趣点(SERVICE|LANDMARK),地标点属于POI,通过限定Type指定,其中也包括行政区划地标
	//SC_PQT_DISTRICT  	= 0x4,				//行政区划,待扩展
};

enum SC_KEYWORD_QUERYTYPE
{
	SC_KEYWORD_NO = 0,      /// 不匹配
	SC_KEYWORD_EXACT = 1,	/// 精确
	SC_KEYWORD_FUZZY = 2,   /// 模糊,尽力满足最大条数
};

/// 所有的排序是基于搜索条数的,也就是说,排序是在搜索之后
enum SC_PLACE_SORT
{
	SC_PSORT_NO			= 0, /// 无排序
	SC_PSORT_PY			= 1, /// 拼音排序
	SC_PSORT_KEYWARD	= 2, /// 关键字排序
	SC_PSORT_DISTANCT	= 3, /// 按距离排序
};


struct ScPlaceQueryOption
{
	ScInt       placeType;							/// Place类型限定,

	ScWChar	 	sKeyword[SC_OP_POINAME_MAXSIZE];	/// 关键字(前后无空格),待扩展:多关键字中间通过“英文空格”区分,""为搜索全部
	SC_KEYWORD_QUERYTYPE	keywordType;			/// SC_KEYWORD_QUERYTYPE 				

	ScInt		dCode;								/// 行政区划限定,code == 0 为搜索全部, 否则请给出相应的Code
	ScInt		maxCnt;								/// 条数限定,0为全部,放于SC Setting?? 我觉得还是给UI控制比较好
	SC_PLACE_SORT	sort;							/// 排序准则,放于SC Setting?? 我觉得还是给UI控制比较好
	ScPOITypeRange   poiTypeR;						/// POI类型限定,POI类型,SMG_PT_POI使能,nID == SC_INVALID_TYPE 为搜索

	ScBool		isLPRect;							/// 是否为逻辑坐标矩形:ScFalse-设备坐标;ScTrue-逻辑坐标
	ScRect		rect;								/// 坐标矩形
};

/** 
	Place搜索函数,将Place与POI统一一种结构,具体内容通过请求内容控制
	
	分为2步:1、返回处理好的ObjectID; 2、取得ObjectID的对应内容

	内部规则:
		1、非精确搜索必须给一个最大的条数;
		2、当placeType == SMG_PT_POI时,使能poiType;
		3、仅对一直POI类型进行搜索,即假定多类型仅在周边搜索是应用;
		4、Place搜索不支持POIType,不支持矩形搜索; 
		5、仅能搜索一个行政区划,并请输入相应的行政区划基本,北京110000000,北京东城110101000;
		6、当进行矩形搜索时,使能距离排序;

	使用:
	ScPlaceQueryOption opt;
	// 全清
	memset(&opt,0,sizeof(ScPlaceQueryOption));
	// 设置选项
	opt.placeType = SC_PQT_POI;
	opt.keywordType = SC_KEYWORD_FUZZY;

*/
SC_API ScResult ScQueryPlaceID(	
				/*in*/const ScPlaceQueryOption query,	/// 搜索条件限定
				/*in,out*/ScObjecteId  *&resultPtr,		/// 搜索指针,in == NULL
				/*in,out*/ScInt	&resCnt					/// 搜索返回条数
				);
/// get时 SC分配内存,由SC释放
SC_API ScResult ScReleasPlaceID(/*in,out*/ScObjecteId  *&resultPtr); ///out: NULL

/** 请求内容,或关系枚举 */
enum SC_PLACE_QUERYCONTENT
{
	// ALL
	SC_PQC_BASE		= 0x0, /// ID + type
	SC_PQC_OBJECT	= 0x1, // 坐标,点坐标or中心点坐标
	SC_PQC_NAME		= 0x2, // 名称
	SC_PQC_DISTANCE = 0x4, // 距离,当给出参考中心点时
	
	// POI
	SC_PQC_POITYPE	= 0x10, // POI类型
	SC_PQC_DISTRICT	= 0x20, // 行政区划
	SC_PQC_ADDRESS	= 0x40, // 地址
	SC_PQC_TELE		= 0x80, //电话
};

struct ScPlaceItem
{
	ScObjecteId			objID;						/// 对象ID
	SC_PLACE_QUERYTYPE  placeType;					/// SC_PLACE_QUERYTYPE
	ScObjPoint 			pt;							/// 点位置,对于线、面给出中心点
    ScWChar				name[SC_OP_POINAME_MAXSIZE];/// 对象名称
	ScInt				distance;					/// 距离,单位:米

	//以下 POI 使能
	ScPOIType 			poiType;					/// POI类型,SMG_PT_POI使能
	ScWChar    			district[SC_OP_DIST_MAXSIZE];/// 所在行政区,为全部行政区划连接,"北京市海淀区",SMG_PT_POI使能
	ScWChar				addr[SC_OP_ADDR_MAXSIZE];	/// 地址
	ScWChar				tele[SC_OP_TELE_MAXSIZE];	/// 电话
};

// 取得详细内容
SC_API ScResult ScGetPlaceItem(	/*in*/ScInt		qContent , /// 获取内容:SC_PLACE_QUERYCONTENT
								/*in*/const ScObjecteId objid,
								/*in*/ ScDevPoint	*cenPt,  //中心点,屏幕坐标
								/*in,out*/ScPlaceItem	&item  //如果没有item内容均为0
							   );

//------搜索路段--------------
struct ScSegmentQueryOption{
	ScBool			isLPRect;      /// 是否为逻辑坐标矩形:ScFalse-设备坐标;ScTrue-逻辑坐标
	ScRect			rect;			/// 
	ScInt			distCode;		/// 行政区划编码

	SC_PLACE_SORT	sort;			/// 排序准则,目前仅支持距离排序
	ScInt			maxCnt;			/// 最大条数,取得排序后最前面的几条
};

// 根据条件搜索路段
//请使用ScReleasPlaceID 释放
SC_API ScResult ScQuerySegmentID(/*in*/ ScSegmentQueryOption option,
								 /*in,out*/ScObjecteId  *&resultPtr,		/// 搜索指针,in == NULL
								 /*in,out*/ScInt	&resCnt					/// 搜索返回条数
								);

struct ScSegmentItem {
	ScObjecteId id;
    ScWChar		name[SC_OP_POINAME_MAXSIZE];/// 对象名称
};
SC_API ScResult ScGetSegmentItem(	/*in*/const ScObjecteId objid,
									/*in,out*/ScSegmentItem	&item  //如果没有item内容均为0
								 );

//-----------周边设施-------------------------
/**
	RoundPOI 的编码
	一个10进制数,每2位表示一个等级,最多可表示5个等级。
	编码与round.xml的配置有关。并且仅对<smge:sub>true<smge:sub>产生编码。
	如下的xml仅有2级编码:
	加油站:	100
	汽车服务:	200
	停车场:		201
	汽车维护:	202
	服务区:		203

<smge:RoundPoiLib xmlns:smge="http://www.lingtu.com/smge/roundpoi.dtd">
	<smge:PoiTypes>
		<smge:Table Name="TBL_LandMarkFtr"/>
		<smge:PoiType>
			<smge:Name>加油站</smge:Name>
			<smge:ID>0X5010</smge:ID>
			<smge:Style>100078</smge:Style>
		</smge:PoiType>
		<smge:PoiType>
			<smge:Name>汽车服务</smge:Name>
			<smge:Sub>true</smge:Sub>
			<smge:PoiTypes>
				<smge:PoiType>
					<smge:Name>停车场</smge:Name>
					<smge:ID>0X5020</smge:ID>
					<smge:Style>100079</smge:Style>
				</smge:PoiType>
				<smge:PoiType>
					<smge:Name>汽车维护</smge:Name>
					<smge:Sub>false</smge:Sub>
					<smge:PoiTypes>
						<smge:PoiType>
							<smge:Name>拖吊服务,汽车配件,汽车检验场</smge:Name>
							<smge:ID>0x5030,0x5050</smge:ID>
							<smge:Style>100080</smge:Style>
						</smge:PoiType>	
						<smge:PoiType>
							<smge:Name>此行允许为空, 汽车维修</smge:Name>
							<smge:ID>0x5100,0x517F</smge:ID>
							<smge:Style>100081</smge:Style>
						</smge:PoiType>
					</smge:PoiTypes>
				</smge:PoiType>
				<smge:PoiType>
					<smge:Name>服务区</smge:Name>
					<smge:ID>0X5090</smge:ID>
					<smge:Style>100042</smge:Style>
				</smge:PoiType>
			</smge:PoiTypes>
		</smge:PoiType>
	</smge:PoiTypes>
</smge:RoundPoiLib>

*/

struct ScRoundPOI {
	ScInt		code;		//编码,唯一的标识
	ScWChar		name[32];	//名称
};

//内部使用,给MD用于显示的结构
struct Sc_RoundPOI4MD {
	ScPOITypeRange	type;
	ScInt			styleID;
	ScWChar			name[64]; //Table Name
};


/**
	周边设施类别列表工具,SC内部需要维护周边查询类别表,启动or第一次使用初始化,程序推出释放
	E_ERROR_IN_PARA
	E_FAIL_OPERATION
*/

/**
	增加周边设施类别,根据编码。
	
	@param poiType 添加的类别,通过code做唯一标识
	@return		追加在最后,返回当前已设置的周边搜索类型个数;
				若操作失败,返回-1;如:条数已满等情况。
				若已包括,返回0
*/
SC_API ScInt ScAddRoundType(/*in*/const ScRoundPOI poiType);	

/**
	删除周边设施类别,根据编码。
	
	@param poiType 删除的类别
	@return		返回当前存在的周边搜索类型个数;若操作失败,返回-1;如:无此类别等情况。	

*/
SC_API ScInt ScDelRoundType(/*in*/const ScRoundPOI poiType);	

/**
	取得索引的周边设施类型,根据编码。
	
	@param	poiType 结果添加到此中
	@param	index	索引:0-2;当前仅保存3个,
	@return		E_FAIL_OPERATION 此索引无结果;S_SC_OK 成功
*/
SC_API ScResult ScGetRoundType(/*in,out*/ScRoundPOI &poiType,/*in*/ScInt index);	

/**
	周边设施类别获取,根据编码。
*/
SC_API ScResult ScGetSubRoundPOI(/*in*/ const ScRoundPOI *parentRP,	///in:NULL 为取得根类别
							   /*in,out*/ScRoundPOI *&getRP, /// in:NULL ;;out:内部字串指针 
							   /*in,out*/ScInt	&getCnt /// out:输出最大条数
								);
/**
	取得等级数,如上为2;
*/
SC_API ScResult ScGetRoundTypeClass(/*in,out*/ScInt	&classCnt);
/// get时 SC分配内存,由SC释放
SC_API ScResult ScReleaseRoundType(/*in,out*/ScRoundPOI *&getRP);///out:Null;

/** 
	周边设施搜索,距离由SC确定,用于返回距离当前最近的一个周边搜索的详细结果,
	搜索半径为图标半径的2倍,通过配置文件进行设置
	如果没有结果返回S_SC_NORESULT;
*/
SC_API ScResult ScGetRoundPOIItem(	/*in*/ ScDevPoint	pointDev, 
									/*in*/ const ScInt	qContent ,  //请求内容
									/*in,out*/ScPlaceItem &poi       //如果没有item内容均为0
								);


//测试使用
//SC_API ScResult _SCGetRoundPOI4MD(
//		/*in,out*/Sc_RoundPOI4MD *&getRP, /// in:NULL ;;out:内部字串指针 
//		/*in,out*/ScInt	&getTypeCnt /// out:输出最大条数)
//		);

//--- 首字母拼音输入法 ---------
struct ScPYQueryOption {
	ScWChar	 	sKeyword[SC_OP_POINAME_MAXSIZE];	/// 拼音首字母,如,灵图:lt
	ScInt		distCode;							/// 行政区划编码
	ScInt		maxCnt;								/// 条数限定,0为全部,放于SC Setting?? 我觉得还是给UI控制比较好
	ScBool		totalCnt;							/// 是否取得总条数		
};

struct ScPYItem {
    ScWChar				name[SC_OP_POINAME_MAXSIZE];/// 对象名称
};

/**
	拼音输入法
	@param option	搜索条件
	@param totalCnt 搜索总条数
	@param pItem	返回条目,输入为NULL
	@param cnt		返回条数
	*/
SC_API ScResult ScQueryPYItem(/*in*/ ScPYQueryOption option,
						  /*in*/ ScInt *totalCnt,
						  /*in,out*/ScPYItem* &pItem, //返回条目
						  /*in,out*/ScInt	&cnt  //返回条数
						  );

/// get时 SC分配内存,由SC释放
SC_API ScResult ScReleasePYItem(/*in,out*/ScPYItem *&pItem); ///out: NULL



#ifdef __SYMBIAN32__
class RMutex;
typedef struct SoundInfo
{
    RMutex * pmutex;
    ScWChar  *  fullname;
    char IsPlay;
} ScSoundInfo;
#else
typedef struct ScSoundInfo
{  
    ScWChar  * fullname;
}ScSoundInfo;
#endif




/** 
 * ScGetBluetoothDevice
 * retrive bluetooth device array.
 * @param ppDevices pointer to  device array
 * @return device sum.
 * use ScFreeData( ppDevices ) to free data. 
  ScInt count=0;
  ScBluetoothDevice   * pbtdevs = 0;
  //ScBluetoothDevice   pbtdevs[1]; //for SYMBIAN.
  count = ScGetBluetoothDevice(&pbtdevs);
  if( count>0 ){
     // FOR SMARTPHONE2003: (count) bluetooth devices found.
     // FOR SYMBIAN: count always = 1
     ...      
     //after using...
     ScFreeData( &pbtdevs); //SYMBIAN NOT NEED
     pbtdevs = 0;
  }
  else {
    //no bluetooth devices found.
  }  
 */
 
#ifdef SC_OP_BLUETOOTH
SC_API  ScInt  ScGetBluetoothDevice( /*[in,out]*/ ScBluetoothDevice **ppDevices);
#endif

typedef struct tagScPoiInfo 
{
/*
nType
0 不提示
1 摄像头
2 测速点
3 危险路段
4 请注意
5 按名称播报
	*/
	ScInt    nType;       //类型
	ScInt    nIconCode;   //图标序号
	
	ScLogPoint point;//位置
	ScWChar    name[SC_OP_POINAME_MAXSIZE];//poi名称32
	ScWChar    wLocateName[SC_OP_DIST_MAXSIZE]; //64个字母,行政区划信息
	ScInt      showName;  //0:仅显示图标,1:显示名称与图标
	ScInt      range;        //声音播报范围:0: 100m,1: 200m, 2:300m, 3:500m, 4:700m, 5:1km, 6:1.5km, 7:2km
	
}ScPoiInfoAddrItem;

//地址簿
SC_API ScInt ScOpenAddr();
SC_API ScInt ScCloseAddr();

//向地址簿添加一条地址
SC_API ScInt ScAddAddr(ScPoiInfoAddrItem* pPoiInfo);
//从地址簿中删除一条地址
SC_API ScInt ScDelAddr(ScInt idx);
//获得地址簿的总条目
SC_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -