LBS应用的兴趣点与名称搜索

目前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(兴趣点)为基础,以名称搜索为表现形式,以推荐系统为核心技术(我们将在下一期介绍推荐技术www.120xh.cn/)。

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

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

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

FTS

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

自动提示

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

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

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

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

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

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

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

图3 NVC的结构

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

图4 自动提示

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

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

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

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

作者简介

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

时间: 2024-10-11 17:23:56

LBS应用的兴趣点与名称搜索的相关文章

Action 名称搜索顺序&Action配置中的各项默认值

Action 名称的搜索顺序  一级一级往上,若命名空间包存在,但Action不存在,则跑到默认命名空间. Action 配置中的各项默认值    默认类class:ActionSupport    默认方法method:action的 execute    默认result name :success

Find 名称 搜索文件/文件夹 Linux/Mac

Find 命令 根据文件名称模糊查询 `find ./ -iname '*.txt'` 同理 包含任何一个字符(a或b或c) `find /Users/lim/Documents/ -iname '[abc].sh'` 查找属主文件 find /Users/lim/Documents/ -user lim // 查找属主文件 同理: -user username:查找属主是xx的文件 -group group:查找属组的xx文件 -uid useruid:查找uid号的文件 -gid group

南沙政府应急系统之GIS一张图(arcgis api for flex)讲解(六)地图搜索模块

config.xml文件的配置如下: 1 <widget label="地图搜索" icon="assets/images/emergency_resource_over.png" 2 config="widgets/Search/SearchWidget.xml" url="widgets/Search/SearchWidget.swf" /> 源代码目录如下: 地图搜索模块的源代码原理解析,详细的代码在下载的开

高德地图-搜索服务-POI搜索

高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围.类型之类的设置的不一样.后来搜索了下,也的确是这样,,现在记录下来,留给自己也留给大家. 关键字搜索 周边搜索 区域搜索 高德地图 Android SDK 提供了千万级别的POI(Point Of Interesting,兴趣点)的搜索. 目前支持关键字搜索.周边搜索.指定区域搜索的同步.异步方法.搜索返回 PO

Android studio 百度地图开发(8)地图已标记POI点和搜索POI点的获取和利用

一简要描述 二地图中已标记POI点 1接口 2MapPoi 类 3获取POI 三搜索关键词获取POI点 描述 1combaidumapapisearchpoi 接口OnGetPoiSearchResultListener PoiResult类 PoiInfo类 搜索POI 2combaidumapapisearchsug 接口 SuggestionResultseggestionInfo 联想搜索 四搜索效果 1联想搜索效果 2直接搜索效果 3选择一条联想搜索结果 五总结 一.简要描述 百度地图

(四)文件搜索命令

=========================================================================================================================== locate命令 locate   文件名 含义:在后台数据库中按文件名搜索,搜索速度很快. 注意:(1)locate的搜索方式是在“/var/lib/mlocate”这个数据库中进行搜索的(不同的Linux可能数据库的名字不一样). 但是mlocat

MVC3.0搜索实例

今天是举行大阅兵的日子,为庆祝抗日战争胜利70周年.为祖国的繁荣昌盛感到无比的自豪和骄傲,祖国万岁. 在msdn上看了大半天的的 getting-started-with-aspnet-mvc3.感觉官网的教程就是不一样.图文并茂,精简,且可以和作者探讨问题在评论那,看到Examining the Edit       Methods and Edit View (C#)这里的时候有了些新的实践.决定结合那个mvc demo继续练习.在@Recluse_Xpy的帮助下实现了我要的扩展搜索功能.和

Yii CGridView 基本使用(三)关联表相关字段搜索

添加 关联表 相关字段的搜索: 先说一句,我们在这里只谈 "一对多" 的关联搜索,首先,不要忘了我们的数据库,忘记的同学请戳这里:这里,可以看到在 tbl_post 中是有一个外键关联到 tbl_user 表的,用以查找作者的相关信息.建了数据库之后,看看我们生成的 Yii 代码的 POST 的 Model, 里面的 realtion 如下(忽略 comment 的): /** * @return array relational rules. */ public function r

ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第三章:搜索、高级过滤和视图模型

在这一章中,我们首先添加一个搜索产品的模块以增强站点的功能,然后使用视图模型而不是ViewBag向视图传递复杂数据. 注意:如果你想按照本章的代码编写示例,你必须完成第二章或者直接从www.apress.com下载第二章的源代码. 3.1 添加产品搜索 为了执行产品搜索,我们将添加一些功能使其能够按照产品名称.描述和分类进行搜索,从而让用户有一个更好的选择来查找相关结果. 之所以将分类也包含在内,是因为如果用户输入的是"clothes",而不是一件特定的衣服,那么所有的衣服都会被搜索到