您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
LBS应用的兴趣点与名称搜索
 
作者:贾双成 来源:《程序员》电子刊 发布于: 2015-12-30
   次浏览      
 

摘要:目前LBS应用已在智能手机中占据了主导地位,但LBS技术覆盖范围太广,很少有能深入描述LBS技术的资料。所以作者在《程序员》杂志开辟专栏来描述LBS核心技术,本文为该专栏的第五篇。

目前LBS应用已在智能手机中占据了主导地位,但LBS技术覆盖范围太广,很少有能深入描述LBS技术的资料。所以作者在《程序员》杂志开辟专栏来描述LBS核心技术,本文为该专栏的第五篇。

我们知道,美团与大众点评的涉及30亿美金的重量级合并是非常的吸引眼球的。在这一场合并中,美团主要看重的是大众点评的门店POI(Point of Interest,用户感兴趣的点的统称)数据。大众点评拥有1700万门店POI数据,比美团POI数据多2倍。在美团的800万POI数据中,有团购交易的商户接近150万左右,POI到交易的转化率很高。而大众点评的POI的转化率虽然没有美团高,但也是美团眼中的香饽饽。成了这场合并的重要筹码。

既然POI这么重要,那么,POI如何设计?又如何用于检索呢?

POI系统的设计

大众点评当年得到POI的方法是很笨的,是派人去“扫街”来采集POI,即:外业人员到商铺门口去采集,并利用GPS确定位置,内业人员将外业采集得到的数据更新到地理数据库。这种方法和高德/四维图新等图商的POI采集方法是相同的。

在采集POI完成后,下一步是设计POI系统。POI系统设计的核心就是加快POI数据的检索。为了实现POI的快速检索,可以对POI系统建立精细设计的存储及获取的架构,也可以对数据进行线性排序,也可以建立空间索引(参见本系列第一期《LBS数据的空间索引方法》(《程序员》10月B刊))。

【POI系统的存储及获取】

POI的名称由于可以重复,所以为了减少存储的容量,提高检索的速度,可以对所有的名称进行统一存储。这样,可以许多的POI对应一个名称,就减小了POI名称的存储容量。

与名称相同,由于POI的图标也可以重复,所以为了减少存储的容量,提高检索的速度,可以对所有的图标进行统一存储。一幅地图数据存储不到100个图标就满了,而POI只需要有一个对图标的引用即可。

POI除了一般信息外,就是其深度信息了。一般信息就是商铺的名称或者电话等常见信息。深度信息如:店铺的评价、店铺的营业时间,或者地图中需要更新的数据(如从网络得到的POI数据)等。可以想象,未来的地图数据必然是互动的地图,也必然是联网的地图。所以,未来的地图数据中有可能很大一部分是互动的深度数据,比如从其他网站(淘宝、天猫)得到的深度信息。这一点实际上百度和高德等已经在实施,百度的很多数据是靠爬虫从网页中爬来的。高德的很多POI的数据也是从淘宝/天猫得到的。

【线性排序】

如果把所有的几何类型归结为:点、线、面数据。那么,POI显然属于点类型。

点的设计可以非常简单,比如:可以只考虑做一个有经纬度的点到地图上就可以,也可以进行更精细的设计,除了建立更好的空间索引来检索外,也可以对点进行排序,以便能更快速地对点进行检索。

对点进行排序的方法主要有两种:希尔伯特曲线排序和Z排序。这两种排序方法都可以用来对POI进行排序,从而缩短名称搜索所需的时间。

希尔伯特曲线排序

希尔伯特曲线是一种能填充满一个平面正方形的分形曲线(空间填充曲线),由数学牛人大卫·希尔伯特在1891年提出。

由于它能填满平面,它的豪斯多夫维(Hausdorff-Becikovich Dimesion,目前主流的拓扑维度的度量)是2。

希尔伯特曲线本质上显现了一种排序,这种排序的L系统记法如下。

变量:L、R

常数:F、+、?

规则为:

L → + RF? LFL? FR+

R → LF+RFR+FL

其中,F表示向前;?表示右转90°;+表示左转90°。

排序的步骤如图1所示。


图1 希尔伯特排序

Z排序(莫顿排序)

与希尔伯特曲线排序一样,Z排序也是一种将多维空间利用曲线进行填满(实际上是一种点排序)的方法。

Z排序是一种很重要的方法,我们曾在《LBS数据的空间索引方法》一文中描述其原理。下面展现一下其排序效果,如图2所示。

图2 Z排序


图2 Z排序

这两种排序方法都是将二维空间化为一维的方法,从而可以将二维空间进行排序,可以很快地进行POI名称检索。

【POI系统的检索】

搜索是用户和LBS交互的主要渠道。各种LBS应用有所不同,但是搜索技术大致可归纳为以POI(兴趣点)为基础,以名称搜索为表现形式,以推荐系统为核心技术(我们将在下一期介绍推荐技术)。

实际上,推荐技术就是搜索技术,因为推荐技术往往是进行网页排名(谷歌发明的一种网页排名技术)的,所以推荐技术就是最核心的搜索技术。

但是,搜索技术除了出现用户最感兴趣的内容(推荐系统)外,还有效率的需求。提高搜索技术的效率往往有两种技术:大规模的哈希(Hash)技术(如Hadoop中所用到的海量数据存储技术)和构建树的技术。其中大规模的哈希技术在大型的搜索引擎(比如搜狗输入法/百度搜索)中使用比较普遍,往往是先对文本建立分词库,然后建立一些大规模的哈希化的倒排索引等,这种技术实现起来有一定的难度。

而构建树的技术相对于大规模的哈希技术而言,简单且易行。最常见的构建树的技术就是FTS(利用B-树的全文搜索)或自动提示。

FTS

FTS往往是利用与SQLITE的FTS3或FTS4类似的技术来建立的,本质上是一种利用B-树的技术,使用起来比较简单,比如:可以在sqlite3种利用一两句sql语句,就可以实现FTS搜索。

自动提示

自动提示技术大概有如下4种。

在线式技术(利用分词):这种技术往往有一个庞大的分词数据库,利用庞大的服务器的运算能力,以单词(中文或英文)为单位生成自动提示的词汇。这种技术一般用于搜索引擎,比如谷歌/百度。

离线式技术(利用分词库):这种技术与在线式分词技术类似,一般是利用预先生成的或用户操作生成的词库。利用词库间单词的关系来自动提示下一个单词。由于这种技术所生成的词汇并非一一对应网页或文本地址。所以,这种技术往往应用于输入法。如果应用于离线式引擎,则需要将分词对应多个网页或文本。

离线(不利用分词库)这种情况下,往往使用NVC(next valid character,下一有效字符)技术。

NVC技术是在国外应用很普遍的一种技术,先于分词技术而产生,最早应用在车载引擎上,并一直在车载引擎上占据统治地位。这是因为NVC技术可以在查找到单词的同时,同步生成唯一对应的POI或道路的索引。所以,方法(3)相比于方法(1)、(2)来说,具有精确、技术实现简单、维护简单的特点。

进行道路或兴趣点名称的NVC的方法如下:

通过在数据库中预先存储所有的道路或兴趣点的名称,并预先存储NVC的数据内容,实现预先判断用户输入的下一个有效字符,从而可以在很短的时间内实现下一字符的自动提示。各名称字符间的关系如图3所示:


图3 NVC的结构

名称的全文提示。这种方法近似自动补全功能,这种自动提示方法通过用户输入的前几个字符,在名称的下拉框中提示1个或多个道路或兴趣点的名称字符串。比如:


图4 自动提示

总的来说,第(1)、(2)种技术所用的方法是非常好的,并且已经普遍应用在大型搜索引擎中,比如百度、谷歌或搜狗输入法。但由于这种方法的开发成本比较高,且对硬件或网络的要求也较高,所以并没有普遍应用于高端车载导航产品及低端的LBS产品。

没有用于低端的LBS产品的原因主要在于开发成本的关系。没有在高端的车载导航中成为主流是因为,高端车载导航需要精确、快速更甚于界面的友好,比如,用第①、②种方法,如果不花费巨额的研发成本,往往不能满足“用户的输入词汇与对应的网页/文本地址一一对应”的要求。比如,用户要查找:望京商业楼,所寻找到符合要求的POI可能有多条,而用户真正希望寻找的那个POI因是冷门的POI,如果采用第①、②种做法,可能被放在第一页之后,或者被忽视。这种情况是高端汽车导航所无法接受的,特别是在目前的车厂的思维仍然比较原始的情况下。

所以,以上四种方法在实现LBS应用时各有优点,开发者需要根据自身的研发实力和需求来制定相应的技术方案。

综上所述,我们已经把POI的设计和名称搜索讲完了。由于这两者都是为了搜索而服务的,推荐系统才是搜索的核心技术。所以,我们将在下一期讲述推荐系统。

作者简介

贾双成,阿里巴巴资深工程师,擅长于数据编译、数据挖掘的系统分析和架构设计,主持研发过多个高端车载导航及adas数据编译器。曾发表发明专利、论文四十余篇,著有《LBS核心技术揭秘》、《数据挖掘核心技术揭秘》。

 

   
次浏览       
 
相关文章

手机软件测试用例设计实践
手机客户端UI测试分析
iPhone消息推送机制实现与探讨
Android手机开发(一)
 
相关文档

Android_UI官方设计教程
手机开发平台介绍
android拍照及上传功能
Android讲义智能手机开发
相关课程

Android高级移动应用程序
Android系统开发
Android应用开发
手机软件测试
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]

android人机界面指南
Android手机开发(一)
Android手机开发(二)
Android手机开发(三)
Android手机开发(四)
iPhone消息推送机制实现探讨
手机软件测试用例设计实践
手机客户端UI测试分析
手机软件自动化测试研究报告
更多...   


Android高级移动应用程序
Android应用开发
Android系统开发
手机软件测试
嵌入式软件测试
Android软、硬、云整合


领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...