多维空间中的高效索引算法

多维空间中的高效索引算法

我们每天使用的百度地图、美团等等导航、搜索附近的餐厅、美食、POI、共享单车等APP被统称为基于位置的服务,LBS,这些都是依赖于强大的地图数据库。

我们每次点开地图的时候,比如打开滴滴app的时候,附近的车辆能够很快的呈现出来。很常见,但是很不普通。

假设地图上会显示以自己为圆心1000米以内的车辆,如何实现呢?最直观的想法就是去数据库里面查表,计算并查询车距离用户小于等于5公里的,筛选出来,把数据返回给客户端。这种做法比较笨,一般也不会这么做。为什么呢?因为这种做法需要对整个表里面的每一项都计算一次相对距离。这样的穷举算法,是非常耗时的。因为这是以你为中心,对整个表内的点计算一遍距离,试想如果表格存储的是整个地球表面的所有的点,点的精度是0.0001度,1度大约111公里。

自然而然的,我们会想到把地图分块。这样即使每一块里面的每条数据都计算一次相对距离,也比之前全表都计算一次要快很多。如果你是刚学地图学,还没接触数据结构、数据库,那么剩下的内容可能有点难度。

更进一步,为离散的点建立拓扑关系。大家都知道栅格图像数据具有规则的格网加持,它是自带拓扑关系的,可以随意的查询最近邻的栅格,但是空间中的离散的点没有。像arcgis这一类的地理信息软件能够支持高效的空间分析、查询,是因为其数据库管理系统 (DBMS)具备空间索引功能。空间索引的建立通常依赖于树形数据结构,如KD树、八叉树,搜索相邻的Node就可以找到近邻的Point。

以三维空间中八叉树为例,一个空间内的盒子要用2^3个子节点划分,当点的数量很大,八叉树建立、遍历和维护的难度大。

GIS中的空间索引方法对比

树形的空间索引,不是最优的解决办法。

更好的办法:

把高维空间映射到一维空间。每一个高维空间中的点都有一个身份证,用二分法。

这个方法,我曾经用到过 图像分割、区域合并中,把提取的区域特征、映射、压缩,可以更快的进行比较分析。

直线-二维-三维 ,Space-filling curve和分形

如今这一类方法已经用到了LBS大厂商的地图产品中。。。

我也得到一些新的启发。

未完待续。

资讯网制作一个企业网站大概多少钱设计网站排行榜庭院设计有哪些网站公司网站制作和建设室内设计常用网站周易店铺名字测吉凶测试贞观战神安顺网站设计安康烈士陵园观后感黄精种植赚钱为什么用生辰八字算命特别准防水材料起名大全好听的qq签名霸气周易测名字算命元宵节的故事头发可以培植种植吗周易起名打分免费的给仓鼠起名字薛姓女孩起名三字怎样给商贸有限公司起名字关于猪的搞笑网名商贸公司免费起名大全生辰八字三藏算命seo五五站长网起名 周易卦象注册水果商标起名大全安吉丽娜最新电影姓高的男孩起名字啊优秀设计联盟网站招牌起什么名字比较好呢少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

资讯网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化