📄 scapi.h
字号:
};
/** 查询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 + -