地理索引(Uber h3)

动态空间划分(R-tree)

静态空间划分(GeoHash、S2、H3)

    空间划分知识:http://www.cocoachina.com/cms/wap.php?action=article&id=20309

    GeoHash

        四叉树

                    经度、纬度的二分来分块,逻辑最简单。

        Z-行空间遍历

        编码方式

                所在层级经纬度二分下标(0、1),先经后纬,逐层排列。

    Google S2

        正方体投影

            以正方体投影作为基准,六个面逐级纬度二分。


        希尔伯特曲线

                相邻相近

                等距连续?

        编码方式

                六面ID+ 所在层级经纬度二分下标(0、1),受曲线旋转影响,逐层排列。

        映射修正

                使面积差距小

                线性变换:s = 0.5 * (1 + u)

                tan变换:s = 2 / pi * (atan(u) + pi / 4) = 2 * atan(u) / pi + 0.5

                二次变换(Uber选择):u >= 0,s = 0.5 * sqrt(1 + 3*u) 

                                                            u < 0, s = 1 - 0.5 * sqrt(1 - 3*u)

    Uber H3

        官网

                https://uber.github.io/h3/#/documentation/overview/introduction

        怎么划分空间

                假设正x多边形,y个顶点相接:360 / y = ((x-2)*180) / x 

y = 2x / (x-2)

                        正整数解只有(3,6、4,4、6,3)

                正六多边形优点

                        相邻单元距离相等

                        近似圆

                                自身近似圆形,贴合密度概念,很适合大多数的汇总分析场景。

                                周围相近近似圆形且等距,方便附近查找,阶梯分析等

                Uber怎么做?

                         想要的一个优点,分割后面积相同。

                        面积相同的正六边形不能构建成球形。

                        正二十面体

 正二十面体

                        基本单元

H3基本块

                                正二十面体,交点有五个边。每一个基本单元做上图图示的分割。

                                全球被划分为12个正五边形和110个正六边形的基本单元。

                        Dymaxion map

                                戴美克森氏地图(Dymaxion map)或称富勒地图(Fuller map),Richard Buckminster Fuller发明。建筑师。

                                dymaxion(最大限度利用能源的,以最少结构提供最大强度的),这个词来源于三个单词:Dynamic,意思是动力,Maximum,意思是最多、最大,还有ion,是一个原子或是一个电极中一组原子。

                                选择二十面体的顶点在水中,尽量避免常规应用中同时使用五边形和六边形。

                        逐级等分

                                可支持16级拆分

                                第一层基础单元格,15级(编码方式决定)的等面积拆分。

        基本元素

            单元格(cell)

                    普通的各级分裂的结果

            有向格

                    单元格增加一个以六条边为基础的维度,可以表示从一个单元格到另一个共边单元格的意向,相当于记录两个有共边的单元格,当需要时,可以将边缘转换回原始索引或目标索引。

                    分为单向格(Unidirectional Edge)和双向格(bidirectional edge)。

            IJK坐标系

                    一种平面六边形网络中的三轴坐标系。为六边形网络中的每一个元素提供唯一路径。

            FaceIJK坐标系

                    H3 核心运算使用的坐标系。

                    由二十面体基本单元ID + IJK坐标系构成。有两种类型(R. Buckminster Fuller定义):

                    0层使用ClassII;逐层摇摆,交替使用。

            其他坐标系

                    https://uber.github.io/h3/#/documentation/core-library/coordinate-systems

        编码方式

                使用64位,一个Long值的长度来记录一个基本类型。

                ·· 前4位表示索引模式:0:无效;1:单元格;2:单向格;3:双向格。

                ·· 3位表示共边ID(模式2和模式3有效)。

                ·· 4位表示当前索引级别(0-15)。

                ·· 7位表示基本单元格ID(0-121)。

                ·· 每3位一个层级,逐层排列(3*15)。

                ·· 队尾未被使用的位置1。

                拆分编码:( 五边形拆分中废弃下标1)

            应用场景

                    普通索引

                            高精度的数据,模糊到选定的H3粒度,作为数据的索引使用。

                    附近搜

                            K环(kRing):

                                    根据指定中心点,得到指定单位距离内(K)的其他单元格,非常方便的实现附近的需要。发挥近似圆的优势。

                    多边形索引

                            指定粒度切分指定多边形,得到多边形覆盖的单元格,并且提供压缩功能。

        jar使用

                groupId:com.uber

                artifactId:h3

                version:

                H3Core h3 = H3Core.newInstance();

                h3.xxx();

        性能

                普通应用场景和geohash的使用场景并无实质性的区别,但是等面积、近圆的特性,在一些场景,会降低实现算法的难度。

                多边形索引的场景,需要围栏预处理工作,然后做两个Btree的关联运算,具体性能对比,待测试。

        缺点

                上下级的不完全覆盖(蓝色区域举例),一些应用场景要注意。

            编码方式对普通索引不友好

如下:同一个经纬度,在不同层级的索引值

000100000000011000111111111111111111111111111111111111111111111

8031fffffffffff

000100000010011000110111111111111111111111111111111111111111111

8131bffffffffff

000100000100011000110011111111111111111111111111111111111111111

82319ffffffffff

000100010010011000110011101101010101001110000111111111111111111

89319daa9c3ffff

000100011110011000110011101101010101001110000011101000000110011

8f319daa9c1d033

如果使用压缩算法,上级(压缩后)的索引值和下级(压缩前)的索引值,没有办法命中普通数据库之类的的普通索引,大大的限制了压缩算法的使用场景。

解决方式:

擦除索引层级标记

000100000100011000110011111111111111111111111111111111111111111&111111100001111111111111111111111111111111111111111111111111111

000100010010011000110011101101010101001110000111111111111111111&111111100001111111111111111111111111111111111111111111111111111

-->

000100000000011000110011111111111111111111111111111111111111111

000100000000011000110011101101010101001110000111111111111111111

截断后面无效的1

000100000000011000110011111111111111111111111111111111111111111

000100000000011000110011101101010101001110000111111111111111111

-->

000100000000011000110011

000100000000011000110011101101010101001110000

base8编码?

就可以在使用压缩算法节省存储空间的同时,又可以命中普通Btree索引。

跨Base区怎么办?

        分割(投影)算法不完美

不只有概念描述中的五边形、六边形;   

会有七边形,甚至十边形(出现在正二十面体的交线上);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,171评论 0 9
  • ORA-13000: 维数超出范围 ORA-13001: 维数不匹配错误 ORA-13002: 指定的级别超出范围...
    thinkact阅读 18,967评论 1 5
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,019评论 4 62
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 3,828评论 0 0
  • 泰国:不可错失的十大特色水果! 去泰国旅游除了欣赏美丽的风景和古老的泰国寺庙泰国水果也是不可错过的,泰国有“水果王...
    环球美食盛宴阅读 413评论 0 0