首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GeoHash核心原理解析

(分形),每一个子快也形成Z曲线,这种类型的曲线被称为Peano空间填充曲线。   ...这种类型的空间填充曲线的优点是将二维空间转换成一维曲线(事实上是分形维),对大部分而言,编码相似的距离也相近, 但Peano空间填充曲线最大的缺点就是突变性,有些编码相邻但距离却相差很远,比如0111与...除Peano空间填充曲线外,还有很多空间填充曲线,如图所示,其中效果公认较好是Hilbert空间填充曲线,相较于Peano曲线而言,Hilbert曲线没有较大的突变。...为什么GeoHash不选择Hilbert空间填充曲线呢?可能是Peano曲线思路以及计算上比较简单吧,事实上,Peano曲线就是一种四叉树线性编码方式。 ?...2)我们已经知道现有的GeoHash算法使用的是Peano空间填充曲线,这种曲线会产生突变,造成了编码虽然相似但距离可能相差很大的问题,因此在查询附近餐馆时候,首先筛选GeoHash编码相似的POI点,

1.3K30

Geohash原理

引言 GeoHash本质上是空间索引的一种方式,其基本原理是将地球理解为一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码。...(分形),每一个子快也形成Z曲线,这种类型的曲线被称为Peano空间填充曲线。...这种类型的空间填充曲线的优点是将二维空间转换成一维曲线(事实上是分形维),对大部分而言,编码相似的距离也相近,但Peano空间填充曲线最大的缺点就是突变性,有些编码相邻但距离却相差很远,比如0111与1000...除Peano空间填充曲线外,还有很多空间填充曲线,如图所示,其中效果公认较好是Hilbert空间填充曲线,相较于Peano曲线而言,Hilbert曲线没有较大的突变。...但是由于Peano曲线实现更加简单,在使用的时候配合一定的解决手段,可以很好的满足大部分需求,因此TD内部Geohash算法采用的是Peano空间填充曲线。 6. 使用注意点 a.

3.7K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Redis GeoHash核心原理解析

    (分形),每一个子快也形成Z曲线,这种类型的曲线被称为Peano空间填充曲线。...这种类型的空间填充曲线的优点是将二维空间转换成一维曲线(事实上是分形维),对大部分而言,编码相似的距离也相近, 但Peano空间填充曲线最大的缺点就是突变性,有些编码相邻但距离却相差很远,比如0111与...除Peano空间填充曲线外,还有很多空间填充曲线,如图所示,其中效果公认较好是Hilbert空间填充曲线,相较于Peano曲线而言,Hilbert曲线没有较大的突变。...为什么GeoHash不选择Hilbert空间填充曲线呢?可能是Peano曲线思路以及计算上比较简单吧,事实上,Peano曲线就是一种四叉树线性编码方式。 ? 7. 使用注意点 1....注意点 我们已经知道现有的GeoHash算法使用的是Peano空间填充曲线,这种曲线会产生突变,造成了编码虽然相似但距离可能相差很大的问题,因此在查询附近餐馆时候,首先筛选GeoHash编码相似的POI

    1.6K20

    GeoHash: 二维空间的一维表示

    geohash是一种分层的空间数据结构,将空间网格化.并将二维坐标用一个字符串表示. 一....空间的网格化 先说明下什么是空间的网格化 将区域一分为二,分别用0,1表示,并将划分的区域继续一分为二的划分下去,如此迭代; 如图,绿色区域便可使用字符串[01]表示; 第一位0,代表蓝色区域的上半部分...首先将经度也按一分为二的方式不断迭代划分下去, 按如下图可知,经度116.46可使用字符串[11010 01011]表示 将纬度也按一分为二的方式不断迭代划分下去....可以用一个字符串表示经度和纬度两个坐标 2....Peano空间填充曲线 空间填充曲线是指二维上穿过单位平方的所有点的连续曲线. geohash算法使用的是Peano空间填充曲线,填充过程如下图. 当填充空间变多时,会按下图方式扩展.

    63120

    高效的多维空间点索引算法 — Geohash 和 Google S2

    Geohash 的优缺点 Geohash 的优点很明显,它利用 Z 阶曲线进行编码。而 Z 阶曲线可以将二维或者多维空间里的所有点都转换成一维曲线。在数学上成为分形维。...空间填充曲线 和 分形 在介绍第二种多维空间点索引算法之前,要先谈谈空间填充曲线(Space-filling curve)和分形。...Peano 解决的问题实质就是,是否存在这样一个连续的映射,一条能填充满平面的曲线。上图就是他找到的一条曲线。 一般来说,一维的东西是不可能填满2维的方格的。但是皮亚诺曲线恰恰给出了反例。...除了数学重要性之外,空间填充曲线也可用于降维,数学规划,稀疏多维数据库索引,电子学和生物学。空间填充曲线的现在被用在互联网地图中。 2....支持空间索引,包括将区域近似为离散“S2单元”的集合。此功能可以轻松构建大型分布式空间索引。 最后一点空间索引相信在工业生产中使用的非常广泛。 S2 目前应用比较多,用在和地图相关业务上更多。

    2.7K50

    GeoHash 经纬度坐标编码与解码算法

    关于GeoHash的了解是我在做爬虫时发现一些网站比如美团、饿了么都会把一些地理位置进行编码,在检索时能够更快的进行地理空间上的检索,找到距离相近的位置。...GeoHash 原理 将二维的经纬度坐标点转换为一维的字符串,也就是编码,某一个字符串表示了某一个矩形区域,也就是说在这个矩形区域中的所有经纬度点都共享一套编码也就是字符串。...而二分停止时区间的长度也就决定了编码的长度,也决定了所表示范围的精确程度。 ?...GeoHash编码的好处 查询复杂度高,通过计算位置的距离来查询与当前位置距离近的位置计算成本高,采用GeoHash编码后可以将二维坐标点转换为一维数据,进行排序,实现空间索引来进行查找。...出现这种问题的原因是因为GeoHash采用了Peano空间填充曲线,填充过程 ?

    3.5K20

    redis地理位置GEO的实现原理

    GEO的底层结构 和zset的相似之处 首先我们不妨大胆来猜一猜GEO的底层结构是什么样的?...地理位置二维转一维 上文讲了GeoHash的计算步骤,仅仅说明是什么而没有说明为什么?为什么分别给经度和维度编码?为什么需要将经纬度两串编码交叉组合成一串编码?本节试图回答这一问题。...如下图所示,我们将二进制编码的结果填写到空间中,当将空间划分为四块时候,编码的顺序分别是左下角00,左上角01,右下脚10,右上角11,也就是类似于Z的曲线,当我们递归的将各个块分解成更小的子块时,编码的顺序是自相似的...(分形),每一个子块也形成Z曲线,这种类型的曲线被称为Peano空间填充曲线。...这种类型的空间填充曲线的优点是将二维空间转换成一维曲线(事实上是分形维),对大部分而言,编码相似的距离也相近, 但Peano空间填充曲线最大的缺点就是突变性,有些编码相邻但距离却相差很远,比如0111与

    2.1K40

    高效的多维空间点索引算法 — Geohash 和 Google S2

    Geohash 的优缺点 Geohash 的优点很明显,它利用 Z 阶曲线进行编码。而 Z 阶曲线可以将二维或者多维空间里的所有点都转换成一维曲线。在数学上成为分形维。...空间填充曲线 和 分形 在介绍第二种多维空间点索引算法之前,要先谈谈空间填充曲线(Space-filling curve)和分形。...Peano 解决的问题实质就是,是否存在这样一个连续的映射,一条能填充满平面的曲线。上图就是他找到的一条曲线。 一般来说,一维的东西是不可能填满2维的方格的。但是皮亚诺曲线恰恰给出了反例。...除了数学重要性之外,空间填充曲线也可用于降维,数学规划,稀疏多维数据库索引,电子学和生物学。空间填充曲线的现在被用在互联网地图中。 2....Hilbert Curve 希尔伯特曲线 1. 希尔伯特曲线的定义 ? 希尔伯特曲线一种能填充满一个平面正方形的分形曲线(空间填充曲线),由大卫·希尔伯特在1891年提出。

    3.5K60

    【戴嘉乐 IPFS】基于IPFS和GeoHash构建具有地理位置价值服务的DDApp(理论篇)

    它是一种层次化的空间数据结构,将空间细分为网格形状的桶,是一种被称为z -阶空间填充曲线的应用,下图中就是GeoHash算法中常用的Peano曲线,一种四叉树线性编码方式。...我们已经知道现有的GeoHash算法使用的是Peano空间填充曲线,这种曲线会产生突变,造成了编码虽然相似但距离可能相差很大的问题,因此在基于个人位置查询附近Poi信息时,首先筛选GeoHash编码相似的...当然Geohash只是空间索引的一种方式,特别适合POI点数据,而对线Link、面数据采用R树索引更有优势。...x1 = lat - distance / ( 111.1 / COS(RADIANS(lng))),   y1 = lng - distance / 111.1   //构建一阶空间填充曲线...() 为构建一阶空间填充曲线内置函数。

    71010

    利用ArcGIS快速实现三维建筑和三维地形快速建模

    从栅格 1) 定义数据框坐标系为投影坐标系,同时数据框属性中常规选项卡单位改为m-选中已添加的高程“*.tif”-右键-数据-导出数据-空间坐标系-数据框-确定并自动加载新tif文件(不能用ArcCatalog...右键-属性-坐标系更改为投影坐标系,因为tif的真实坐标系仍然为地理坐标系,不满足下一步的计算,会报错) 2) ArcToolBox-3D Analyst工具-转换-由栅格转出-栅格转TIN-z容差输入...图层转3D要素的工作(以上第8步,分组字段默认或以ObjectID字段分组,不建议添加NoGroup字段,将所有建筑打组(有可能出现无法生成CAD可以识别的dxf/dwg文件)) 转换工具-转为CAD-...也就是说,3D图层转为3D要素-转换为DAE时,需要按照Object_ID进行分组,因为打好组的DAE文件,Sketch不能很好地支持(提示导入失败,或者卡顿) 从Sketch等导入3D建筑(贴图等会保留...3D要素-右键开始编辑-选中要替换的建筑或组-编辑工具条-3D要素下拉-替换为模型 ---- (天哪好长,真的好长一文,又没有图)

    7.1K30

    利用ArcGIS快速实现三维建筑和三维地形快速建模

    从栅格生成TIN,三维地形 1) 定义数据框坐标系为投影坐标系,同时数据框属性中常规选项卡单位改为m-选中已添加的高程“*.tif”-右键-数据-导出数据-空间坐标系-数据框-确定并自动加载新tif文件...) 添加导入数据位置 添加转换器 添加导出数据位置 n 曲线救国 n From Dwg/Dxf To Skp(推荐方法) 完成3D图层转3D要素的工作(以上第8步,分组字段默认或以ObjectID...也就是说,3D图层转为3D要素-转换为DAE时,需要按照Object_ID进行分组,因为打好组的DAE文件,Sketch不能很好地支持(提示导入失败,或者卡顿) 从Sketch等导入3D建筑(贴图等会保留...,应该和Sketch中一致显示效果,目前未测试) 将编辑好的3D建筑保存为DAE格式(打组情况需与ArcScene一致,独栋替换,请在ArcScene中重新生成未打组的3D要素) Arcscene...中选中要编辑的3D要素-右键开始编辑-选中要替换的建筑或组-编辑工具条-3D要素下拉-替换为模型

    4.1K20

    用Three.js建模

    参数化表面由数学函数f(u,v)定义,其中 u和v是数字,该函数的每个值都是空间中的一个点。表面由指定范围内u和v函数值的所有点组成。...该函数返回的值为THREE.Vector2或THREE.Vector3,分别用于2D曲线和3D曲线。对于THREE.Curve对象,其getPoint(t)方法应返回与参数t值相对应的曲线上的点。...要制作管状几何体,需要 3D 曲线。也有几种方法可以从2D曲线上制作表面。一种方法是围绕一个轴线旋转曲线,产生一个旋转的表面。表面由曲线旋转时通过的所有点组成。这叫做lathing。...此功能使用范围从 0.0 到 1.0 的参数值在曲线上创建 128 点的数组。 你可以用 2D 曲线完成的另一件事就是简单地填充曲线内部,从而提供 2D 填充形状。...在挤压中,填充的 2D 形状沿 3D 路径移动。形状经过的点构成 3D 实体。在这种情况下,形状沿着垂直于形状的线条挤压,这是最常见的情况。基本挤压的形状显示在上图的右侧。

    7.5K02

    从弧到多线段:深入解析 Java 中的弧度转多线段算法!

    通过将弧转换为多线段,我们可以:提高绘制性能:大多数图形库和硬件加速仅支持直线绘制,通过弧度转多线段可以充分利用图形加速的优势。...打印结果:循环内,代码每次计算完一个点的坐标后,打印这个点的索引以及对应的坐标。运行结果示例假设圆弧的起始角度是 0 度,终止角度是 90 度,半径为 50,圆心在 (100, 100)。...案例演示:弧转多线段的完整实现为了让大家更直观地理解,下面给出一个完整的示例,通过将任意弧线转换为多线段并可视化输出。import java.awt.*;import javax.swing....CAD 系统中的应用在计算机辅助设计(CAD)中,弧度转多线段算法被广泛应用于曲线模型的近似表示。通过将复杂的曲线表示为多线段,可以提高渲染效率,同时在工程设计中也能进行精确的几何计算。2....游戏开发中的应用在 2D 和 3D 游戏开发中,曲线的表示经常通过多边形或多线段进行近似。将弧线转换为多线段,能够有效地进行碰撞检测、路径规划和角色运动模拟。

    18122

    PostGIS空间数据库简明教程

    然而,与光栅不同的是,它没有分辨率或密度,因此点可以位于 3D 空间中的任何位置。 将点云与矢量类型进行比较——它类似于 3D 矢量点的集合。...每当我们有不匹配的 SRID 时,我们可以将一个空间对象转换为另一个对象的 SRID。...更重要的是,我们将无法使用空间索引来提高 ST_Intersects 操作的性能,因为空间索引适用于原始 SRID 中的几何图形,而不适用于目标 SRID 中的转换几何图形。...查询执行计划将需要在第一个表上执行表扫描,以确定哪些对象与第二个表中的对象相交,在转换为目标 SRID 之后。...希望它有助于攀登陡峭的学习曲线进入 GIS 世界。----原文链接:PostGIS快速教程 - BimAnt

    3.1K30

    地理空间索引实现:z 曲线、希尔伯特曲线、四叉树, 最邻近几何特征查询、范围查询

    、四叉树索引,空间填充曲线索引,以及最用于地理空间数据库的R树索引以及相关变体等等。...网格索引 网格索引的基本思想是将研究区域用横竖线划分大小相等和不等的网格,每个网格可视为一个桶(bucket),构建时记录落入每一个网格区域内的空间实体编号。...空间填充曲线索引 常用的空间索引曲线有z曲线、希尔伯特曲线,其目的是在空间网格的基础上降低空间维度,以便于在顺序读取的磁盘上存取信息。...空间填充曲线(space-filling curve)是一条连续曲线,自身没有任何交叉;通过访问所有单元格来填充包含均匀网格的四边形。...z曲线 希尔伯特曲线 Z曲线和Hilbert曲线共同特点: 填充曲线值临近的网格,其空间位置通常也相对临近; 任何一种空间排列都不能完全保证二维数据空间关系的维护(编号相邻,空间位置可能很远

    1.7K10

    图形编辑器基于Paper.js教程03:认识Paper.js中的所有类

    方法非常的多,了解它你基本就能了解Paper.js一半的功能 http://paperjs.org/reference/item/ Point 点对象表示 Paper.js 项目二维空间中的一个点。...可以使用它来将一段复杂的路径,拆分成几个直线和曲线。每一段都是一个Curve对象。...如果曲线是路径项的一部分,则还要提供其在 path.curves 数组中的索引。...这个矩阵将源坐标(x, y)转换为目的坐标(x’,y’),方法是将它们视为一个列向量,并按照以下过程将坐标向量乘以矩阵: 注意 b 和 c 的位置。...Raster Raster代表 Paper.js 项目中的图像。可以使用它来导入图片,jpg 目前没看到图片转路径或者矢量的方法。后续详细研究。

    46810

    【专业技术】OpenGL操作技巧介绍

    参数化曲线和表面最初可能是通过控制点以及成为基函 数(Basic function)的多项式函数进行描述的。求职器提供了一种方法。根据控制点计算表示表面的顶点。...这种方法是一种多项式映射,它可以根据控制点产生表面 法线、纹理坐标、颜色以及空间坐标。...有些类型的 顶点数据(例如空间坐标)是通过一个4*4 的浮点矩阵进行变换的。空间坐标从3D世界的一个位置投影到屏幕上的一个位置。如果启用了高级特性,这个阶段将更为忙碌。...把顶点连接起来形成直线或者计算填充多边形的内部像素时,需要考虑直线和多边形的点画模式,直线的宽度,点的大小,着色模型以及 用于支持抗锯齿处理的覆盖计算。每个片断方块都将具有各自的颜色和深度值。...转自:http://blog.csdn.net/lxdfigo/article/details/8457850----

    1.4K20
    领券