空间搜索服务提供通过关键字、多边形、矩形、周边搜索等多种方式,实现对指定范围内entity实时位置和数量的搜索。类btkentityaction中支持实时查询entity最新位置、高度、速度、方向和相关属性信息。支持以下搜索方式:
1. 关键字模糊查询:根据entityname和entitydesc字段模糊查询entity
2. 周边搜索:查询某中心点周边的entity
3. 矩形搜索:查询某矩形地理范围内的entity
4. 多边形搜索:查询多边形范围内的entity
通过 -(void)searchentitywith:(btksearchentityrequest *)request delegate:(id
以下代码片段表示,查找100000这个service下,名称或描述字段含有“entity”的,在过去7天有轨迹上传的,终端实体的实时位置。若有多个entity满足条件,则按照它们最后定位时间 “loc_time” 字段的倒序返回,即定位时间离现在越近越靠前。
// 设置过滤条件btkqueryentityfilteroption*filteroption =[[btkqueryentityfilteroption alloc] init];filteroption.activetime=[[nsdate date] timeintervalsince1970]-7*24*3600;// 设置排序条件,返回的多个entity按照,定位时间'loc_time'的倒序排列btksearchentitysortbyoption* sortbyoption =[[btksearchentitysortbyoption alloc] init];sortbyoption.fieldname= @"loc_time";sortbyoption.sorttype=btk_entity_sort_type_desc;// 构造请求对象btksearchentityrequest*request =[[btksearchentityrequest alloc] initwithquerykeyword:@"entity"filter:filteroption sortby:sortbyoption outputcoordtype:btk_coordtype_bd09llpageindex:1pagesize:10serviceid:100000tag:34];// 发起检索请求[[btkentityaction sharedinstance] searchentitywith:request delegate:self];
通过 -(void)boundsearchentitywith:(btkboundsearchentityrequest *)request delegate:(id
以下代码片段表示,在西南角为东经116.311046度、北纬40.046667度,东北角为东经116.315264度、北纬40.048973度,所构成的矩形区域内,检索名称为 “entitya” 、 “entityb”、“entityc” 这3个终端实体,在过去的7天内是否有轨迹点上传。如果有,则返回每个终端实体最后一次上传的轨迹点,如果返回结果包含不止一个轨迹点,则按照它们最后一次上传的时间戳 “loc_time” 字段的倒序排列,即离当前时间越近的轨迹点越靠前。
// 设置矩形的区域nsmutablearray*bounds =[nsmutablearray arraywithcapacity:2];// 矩形左下角的顶点坐标cllocationcoordinate2d point1 =cllocationcoordinate2dmake(40.046667,116.311046);[bounds addobject:[nsvalue valuewithbytes:&point1 objctype:@encode(cllocationcoordinate2d)]];// 矩形右上角的顶点坐标cllocationcoordinate2d point2 =cllocationcoordinate2dmake(40.048973,116.315264);[bounds addobject:[nsvalue valuewithbytes:&point2 objctype:@encode(cllocationcoordinate2d)]];// 设置检索的过滤选项btkqueryentityfilteroption*filteroption =[[btkqueryentityfilteroption alloc] init];filteroption.entitynames= @[@"entitya", @"entityb",@"entityc"];filteroption.activetime=[[nsdate date] timeintervalsince1970]-7*24*3600;// 设置检索结果的排序选项btksearchentitysortbyoption* sortbyoption =[[btksearchentitysortbyoption alloc] init];sortbyoption.fieldname= @"loc_time";sortbyoption.sorttype=btk_entity_sort_type_desc;// 构造检索请求btkboundsearchentityrequest*request =[[btkboundsearchentityrequest alloc] initwithbounds:bounds inputcoordtype:btk_coordtype_bd09llfilter:filteroption sortby:sortbyoption outputcoordtype:btk_coordtype_bd09llpageindex:1pagesize:10serviceid:100000tag:44];// 发起检索请求[[btkentityaction sharedinstance] boundsearchentitywith:request delegate:self];
通过 -(void)aroundsearchentitywith:(btkaroundsearchentityrequest *)request delegate:(id
以下代码片段表示,在以东经116.312964度、北纬40.047772度为圆心,半径100米的范围内,检索100000这个service下所有在过去7天有轨迹点上传的活跃终端,如果有满足条件的终端实体,则返回其最后一次上传的轨迹点。若有多个终端实体符合以上检索条件,则返回结果按照它们的定位时间戳”loc_time” 字段倒序排列,即离当前时间越近的轨迹点越靠前。
// 设置圆形的圆心cllocationcoordinate2d center =cllocationcoordinate2dmake(40.047772,116.312964);// 设置检索的过滤条件btkqueryentityfilteroption*filteroption =[[btkqueryentityfilteroption alloc] init];filteroption.activetime=[[nsdate date] timeintervalsince1970]-7*24*3600;// 设置检索结果的排序方式btksearchentitysortbyoption* sortbyoption =[[btksearchentitysortbyoption alloc] init];sortbyoption.fieldname= @"loc_time";sortbyoption.sorttype=btk_entity_sort_type_desc;// 构造检索请求对象btkaroundsearchentityrequest*request =[[btkaroundsearchentityrequest alloc] initwithcenter:center inputcoordtype:btk_coordtype_bd09llradius:100filter:filteroption sortby:sortbyoption outputcoordtype:btk_coordtype_bd09llpageindex:1pagesize:10serviceid:100000tag:55];// 发起检索请求[[btkentityaction sharedinstance] aroundsearchentitywith:request delegate:self];
开发者可在轨迹管理台中可视化地创建 entity自定义属性字段,方法详见自定义属性字段。在queryentitylist方法中,通过指定columnkey,来根据属性进行查询,columnkey字段的格式为k1=v1,k2=v2。
例如开发者创建了team和city两个可检索的自定义属性字段,需要查询team=a且city=beijing的entity,示例如下:
[[btraceaction shared] queryentitylist:self serviceid:100001entitynames:nil columnkey:@"team=a,city=beijing"activetime:0returntype:0pagesize:20pageindex:1];
以上例子会返回该service下所有的entity中,属于a队的,城市是beijing的所有entity的实时位置。
支持查询在某个时间之后仍活跃的entity,如查询5分钟之内活跃的,则需将activetime设为当前时间减去5分钟;如查询当天活跃的entity,则将activetime设为当天0点:
如:查询在unix时间戳为1442824667之后仍活跃的所有entity
[[btraceaction shared] queryentitylist:self serviceid:100001entitynames:nil columnkey:nil activetime:1442824667returntype:0pagesize:20pageindex:1];
对于entity以及columnkey和activetime这些字段,可以同时指定一个或多个字段,做联合查询,会返回同时满足这些条件的entity的实时位置。
[[btraceaction shared] queryentitylist:self serviceid:100001entitynames:@"entity1,entity2"columnkey:@"team=a,region=haidian"activetime:1442824667returntype:0pagesize:20pageindex:1];
以上例子就会查询在entity1和entity2这两个entity中,team是a,region是haidian,且在1442824667时间戳后仍有轨迹数据上传的entity的实时位置。
从数据上传到鹰眼服务端,到通过查询接口查询到该数据,在联网正常的情况下延时在毫秒级别,可认为是无延时地同步。 在上传时,受打包周期的限制,会存在一个打包周期的延迟。若开发者对实时性要求较高,可以将打包周期设置成采集周期,但需考虑流量的消耗。
上一篇
下一篇
本篇文章对您是否有帮助?