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

检查任意两个对象之间的距离是否在指定网格内的算法

要检查任意两个对象之间的距离是否在指定的网格内,可以使用以下算法:

基础概念

  1. 网格(Grid):一个二维平面被划分为多个相等的小方块,每个小方块称为一个单元格。
  2. 距离(Distance):通常使用欧几里得距离来计算两点之间的直线距离。

算法步骤

  1. 计算两点之间的欧几里得距离: [ d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} ] 其中 ((x_1, y_1)) 和 ((x_2, y_2)) 是两个对象的坐标。
  2. 确定网格的大小: 假设网格的单元格边长为 (s)。
  3. 计算两个对象所在的网格单元格
    • 对象1所在的单元格坐标为 ((\lfloor \frac{x_1}{s} \rfloor, \lfloor \frac{y_1}{s} \rfloor))
    • 对象2所在的单元格坐标为 ((\lfloor \frac{x_2}{s} \rfloor, \lfloor \frac{y_2}{s} \rfloor))
  • 计算两个单元格之间的最大距离: 单元格之间的距离可以通过曼哈顿距离来估算: [ d_{\text{cell}} = \sqrt{(x_{\text{cell2}} - x_{\text{cell1}})^2 + (y_{\text{cell2}} - y_{\text{cell1}})^2} \times s ] 其中 ((x_{\text{cell1}}, y_{\text{cell1}})) 和 ((x_{\text{cell2}}, y_{\text{cell2}})) 是两个单元格的坐标。
  • 比较实际距离和单元格距离: 如果 (d \leq d_{\text{cell}}),则两个对象在同一个网格内;否则不在。

示例代码

以下是一个Python示例代码:

代码语言:txt
复制
import math

def is_within_grid(obj1, obj2, grid_size):
    x1, y1 = obj1
    x2, y2 = obj2
    
    # 计算欧几里得距离
    distance = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
    
    # 计算单元格坐标
    cell_x1 = x1 // grid_size
    cell_y1 = y1 // grid_size
    cell_x2 = x2 // grid_size
    cell_y2 = y2 // grid_size
    
    # 计算单元格之间的最大距离
    cell_distance = math.sqrt((cell_x2 - cell_x1)**2 + (cell_y2 - cell_y1)**2) * grid_size
    
    # 比较距离
    return distance <= cell_distance

# 示例使用
obj1 = (3, 4)
obj2 = (6, 8)
grid_size = 3

print(is_within_grid(obj1, obj2, grid_size))  # 输出: True 或 False

应用场景

  • 游戏开发:用于快速判断两个游戏对象是否在同一个区域。
  • 地理信息系统(GIS):用于空间数据的管理和分析。
  • 机器人路径规划:用于确定机器人是否需要跨越多个网格单元。

可能遇到的问题及解决方法

  1. 浮点数精度问题:使用整数运算可以避免浮点数精度误差。
  2. 网格大小选择:网格大小应根据具体应用场景进行调整,过大可能导致精度下降,过小可能导致计算量增加。

通过上述方法,可以有效地检查两个对象之间的距离是否在指定的网格内。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【算法设计题】判断无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径,第8题(CC++)

第8题 判断无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径 编写算法,判断无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径(简单路径指的是其顶点序列中不含有重复出现的顶点)。...exist_path_len(ALGraph G, int i, int j, int k): 判断在无向图 G 中,是否存在一条从顶点 i 到顶点 j 长度为 k 的简单路径。...解释:首先,将当前顶点 i 标记为已访问 (visited[i] = 1),防止在路径中重复访问此顶点。...p 是当前弧的指针,p->adjvex 是邻接点的编号。 检查邻接点:int temp = p->adjvex 取得当前邻接点的编号。 递归调用:if (!...visited[temp] && exist_path_len(G, temp, j, k - 1)) 检查邻接点 temp 是否未被访问且从 temp 到 j 是否存在一条长度为 k-1 的路径。

16610

机器学习:基于网格的聚类算法

STING算法的两个参数: • 网格的步长——确定空间网格划分 • 密度阈值——网格中对象数量大于等于该阈值表示该网格为稠密网格 STING网格建立流程 1 .首先我们先划分一些层次...[1497412999075_3899_1497412999367.jpg] CLIQUE算法的两个参数: • 网格的步长——确定空间网格划分 • 密度阈值——网格中对象数量大于等于该阈值表示该网格为稠密网格...如果数据在某一k-1维空间中不密集,那么数据在k维空间中也是不密集 3、 遍历所有网格,判断当前网格是否为“未处理”,若不是“未处理”状态,则处理下一个网格;若是“未处理”状态,则进行步骤4~8处理,...WaveCluster算法需要两个参数: • 网格的步长——确定空间网格划分 • 密度阈值——网格中对象数量大于等于该阈值表示该网格为稠密网格 WaveCluster算法流程...(3)发现任意形状的类簇:许多聚类算法基于距离(欧式距离或曼哈顿距离)来量化对象之间的相似度。基于这种方式,我们往往只能发现相似尺寸和密度的球状类簇或者凸型类簇。

14.5K60
  • 各种聚类算法的介绍和比较「建议收藏」

    具体如下: 1、算法的处理能力:处理大的数据集的能力(即算法复杂度);处理数据噪声的能力;处理任意形状,包括有间隙的嵌套的数据的能力; 2、算法是否需要预设条件:是否需要预先知道聚类个数,是否需要用户给出领域知识...1.2算法流程 以下流程以自下向上为例。 1. 将每个对象看作一类,计算两两之间的最小距离; 2. 将距离最小的两个类合并成一个新类; 3. 重新计算新类与所有类之间的距离; 4....重复2、3,直到所有点都被处理 DBSCAN聚类算法原理的基本要点:确定半径eps的值 ①DBSCAN算法需要选择一种距离度量,对于待聚类的数据集中,任意两个点之间的距离,反映了点之间的密度,说明了点与点是否能够聚到同一类中...4.2算法流程 这些算法用不同的网格划分方法,将数据空间划分成为有限个单元(cell)的网格结构,并对网格数据结构进行了不同的处理,但核心步骤是相同的: 1、 划分网格 2、 使用网格单元内数据的统计信息对数据进行压缩表达...这是一种非常特殊的距离算法,它可以计算两个不同长度的向量的距离,也可以对两对向量中不同时间段内的数据做匹配。DTW主要用在时间序列的部分场合里。

    6.4K25

    【独家】一文读懂聚类算法

    聚类的基本概念 1.1 定义 聚类是数据挖掘中的概念,就是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大...1.4 衡量聚类算法优劣的标准 处理大的数据集的能力; 处理任意形状,包括有间隙的嵌套的数据的能力; 算法处理的结果与数据输入的顺序是否相关,也就是说算法是否独立于数据输入顺序; 处理数据噪声的能力;...算法流程: 将每个对象看作一类,计算两两之间的最小距离; 将距离最小的两个类合并成一个新类; 重新计算新类与所有类之间的距离; 重复1、2,直到所有类最后合并成一类。...输入层对应一个高维的输入向量,输出层由一系列组织在2维网格上的有序节点构成,输入节点与输出节点通过权重向量连接。学习过程中,找到与之距离最短的输出层单元,即获胜单元,对其更新。...2.5 基于网格的聚类算法 基于网格的方法把对象空间量化为有限数目的单元,形成一个网格结构。所有的聚类操作都在这个网格结构(即量化空间)上进行。

    2.6K80

    【非监督学习 | 聚类】聚类算法类别大全 & 距离度量单位大全

    其目标划分的原则是组内(内部)距离最小化,而组间(外部)距离最大化。在商业上,聚类可以帮助市场分析人员从消费者数据库中区分出不同的消费群体,并且概括出每一类消费者的消费模式或消费习惯。...层次分析方法 BIRCH算法(平衡迭代规约和聚类),CURE算法(代表点聚类)和CHAMELEON算法(动态模型)。 优点:可以自动发现任意形状和大小的聚类,不需要预先指定聚类个数。...层次聚类(Hierarchical Clustering) 距离或相似度的度量方法 数值型或类别型数据 可选多种距离度量方法,如欧几里德距离、曼哈顿距离等 优点:不需要预先指定簇的数量,可用于发现任意形状的簇...曼哈顿距离(Manhattan Distance) 曼哈顿距离衡量两个向量之间沿坐标轴的总距离。在二维空间中,曼哈顿距离等于两个点横坐标差的绝对值加上纵坐标差的绝对值。...在二维空间中,切比雪夫距离等于两个点横坐标差的最大绝对值和纵坐标差的最大绝对值中的较大值。 优点:对异常值不敏感,适用于稀疏数据。缺点:不考虑维度之间的相关性。

    26520

    【非监督学习 | 聚类】聚类算法类别大全 & 距离度量单位大全

    其目标划分的原则是组内(内部)距离最小化,而组间(外部)距离最大化。在商业上,聚类可以帮助市场分析人员从消费者数据库中区分出不同的消费群体,并且概括出每一类消费者的消费模式或消费习惯。...层次分析方法 BIRCH算法(平衡迭代规约和聚类),CURE算法(代表点聚类)和CHAMELEON算法(动态模型)。优点:可以自动发现任意形状和大小的聚类,不需要预先指定聚类个数。...) 距离或相似度的度量方法 数值型或类别型数据可选多种距离度量方法,如欧几里德距离、曼哈顿距离等优点:不需要预先指定簇的数量,可用于发现任意形状的簇...曼哈顿距离(Manhattan Distance) 曼哈顿距离衡量两个向量之间沿坐标轴的总距离。在二维空间中,曼哈顿距离等于两个点横坐标差的绝对值加上纵坐标差的绝对值。...在二维空间中,切比雪夫距离等于两个点横坐标差的最大绝对值和纵坐标差的最大绝对值中的较大值。优点:对异常值不敏感,适用于稀疏数据。缺点:不考虑维度之间的相关性。

    28410

    【非监督学习 | 聚类】聚类算法类别大全 & 距离度量单位大全

    其目标划分的原则是组内(内部)距离最小化,而组间(外部)距离最大化。在商业上,聚类可以帮助市场分析人员从消费者数据库中区分出不同的消费群体,并且概括出每一类消费者的消费模式或消费习惯。...层次分析方法 BIRCH算法(平衡迭代规约和聚类),CURE算法(代表点聚类)和CHAMELEON算法(动态模型)。优点:可以自动发现任意形状和大小的聚类,不需要预先指定聚类个数。...) 距离或相似度的度量方法 数值型或类别型数据可选多种距离度量方法,如欧几里德距离、曼哈顿距离等优点:不需要预先指定簇的数量,可用于发现任意形状的簇...曼哈顿距离(Manhattan Distance) 曼哈顿距离衡量两个向量之间沿坐标轴的总距离。在二维空间中,曼哈顿距离等于两个点横坐标差的绝对值加上纵坐标差的绝对值。...在二维空间中,切比雪夫距离等于两个点横坐标差的最大绝对值和纵坐标差的最大绝对值中的较大值。优点:对异常值不敏感,适用于稀疏数据。缺点:不考虑维度之间的相关性。

    46910

    IM里“附近的人”功能实现原理是什么?如何高效率地实现它?

    具体在产品技术上的实现原理,也很容易理解: 1)现在移动端(ios、android等),通过系统的API很容易抓到用户当前的位置(即经纬度数据); 2)根据第1步中的经纬度数据,很容易计算出两个点之间的距离...)GEODIST:返回两个给定位置之间的距离; 4)GEOHASH:返回一个或多个位置对象的Geohash表示; 5)GEORADIUS:以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象...范围单位:m | km | ft | mi --> 米 | 千米 | 英尺 | 英里 额外参数: - WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。...两个参数选项,在调用georadius时是否真的只查询了主实例,还是进行了只读封装。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点

    1.9K00

    【算法】聚类算法

    1 定义 聚类是数据挖掘中的概念,就是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。...算法流程: 将每个对象看作一类,计算两两之间的最小距离; 将距离最小的两个类合并成一个新类; 重新计算新类与所有类之间的距离; 重复1、2,直到所有类最后合并成一类。...输入层对应一个高维的输入向量,输出层由一系列组织在2维网格上的有序节点构成,输入节点与输出节点通过权重向量连接。学习过程中,找到与之距离最短的输出层单元,即获胜单元,对其更新。...3.5 基于网格的聚类算法 基于网格的方法把对象空间量化为有限数目的单元,形成一个网格结构。所有的聚类操作都在这个网格结构(即量化空间)上进行。...COD (Clustering with Ob2structed Distance) 就是处理这类问题的典型算法 , 其主要思想是用两点之间的障碍距离取代了一般的欧氏距离来计算其间的最小距离。

    1.7K130

    Redis 到底是怎么实现“附近的人”这个功能的呢?

    : 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象;...范围单位:m | km | ft | mi --> 米 | 千米 | 英尺 | 英里 额外参数: WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。...两个参数选项,在调用georadius时是否真的只查询了主实例,还是进行了只读封装。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)),其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。

    1.2K10

    集成聚类系列(一):基础聚类算法简介

    聚类分析就是在无监督学习下数据对象的探索合适的簇的过程,在探索过程中,簇与簇之间的数据对象差异越来越明显,簇内的数据对象之间差异越来越小。...聚类算法的相似度量 聚类的最终目标就是在已知无标签的数据集上找到合适的簇,将这些无标签的数据合理的划分到合适的簇中。其中簇内的样本的相似度很高,不同簇的样本间相似度很低。...基于层次的聚类算法通常会用平均距离,最大距离,最小距离作为衡量距离的方法,算法如果使用最大距离来度量类与类的距离时,称为最远邻聚类算法;当使用最小距离作为衡量类与类之间的距离时,称为邻聚类算法。...如果一个点p的邻域内所包含密度可达对象点数目大于指定个数,则需要创建一个以点p为核心的新类。...算法的优点: 比传统的kmeans聚类算法普适性更强,不仅可以用于凸数据,对于任意形状的数据空间也能得到很好的聚类。 算法的缺点: 在进行聚类之前需要设置具体应用的尺度参数,通常需要一些经验。

    1.6K50

    Redis 到底是怎么实现“附近的人”这个功能的?

    : 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象...范围单位:m | km | ft | mi --> 米 | 千米 | 英尺 | 英里 额外参数: - WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。...两个参数选项,在调用georadius时是否真的只查询了主实例,还是进行了只读封装。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。

    79620

    利用 Redis 实现“附近的人”功能!

    GEODIST:返回两个给定位置之间的距离。 GEOHASH:返回一个或多个位置对象的 GeoHASH 表示。...范围单位:m | km | ft | mi --> 米 | 千米 | 英尺 | 英里 额外参数: WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。...在调用 GEORADIUS 时是否真的只查询了主实例,还是进行了只读封装。感兴趣的朋友可以自己研究下。...再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点(红点)。 算法分析 为什么要用这种算法策略进行查询,或者说这种策略的优势在哪,让我们以问答的方式进行分析说明。...其中 N 为指定半径范围内的位置元素数量,而 M 则是被九宫格圈住计算距离的元素的数量。 结合 Redis 本身基于内存的存储特性,在实际使用过程中有非常高的运行效率。

    1K20

    揭开Redis“附近的人”的神秘面纱

    : 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象...范围单位:m | km | ft | mi --> 米 | 千米 | 英尺 | 英里 额外参数: - WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。...两个参数选项,在调用georadius时是否真的只查询了主实例,还是进行了只读封装。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。

    98120

    Redis 实现「附近的人」

    : 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象;...范围单位:m | km | ft | mi --> 米 | 千米 | 英尺 | 英里 额外参数: - WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。...两个参数选项,在调用georadius时是否真的只查询了主实例,还是进行了只读封装。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...其中N为九宫格范围内的位置元素数量(要算距离);M是指定层级格子的数量,log(M)是跳表结构中找到每个格子首元素的时间复杂度(这个过程一般会进行9次)。

    72720

    Redis 到底是怎么实现“附近的人”这个功能的呢?

    : 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象;...范围单位:m | km | ft | mi --> 米 | 千米 | 英尺 | 英里 额外参数: WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。...两个参数选项,在调用georadius时是否真的只查询了主实例,还是进行了只读封装。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)),其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。

    1.9K20

    看用 Redis 如何实现微信「​附近的人」​功能?

    : 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象;...范围单位:m | km | ft | mi --> 米 | 千米 | 英尺 | 英里 额外参数: - WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。...两个参数选项,在调用georadius时是否真的只查询了主实例,还是进行了只读封装。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。

    92850

    Redis 到底是怎么实现“附近的人”这个功能的?

    : 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象;...范围单位:m | km | ft | mi --> 米 | 千米 | 英尺 | 英里 额外参数: - WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。...两个参数选项,在调用georadius时是否真的只查询了主实例,还是进行了只读封装。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。

    94230

    Redis 是怎么实现 “附近的人” 的?

    : 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象...范围单位:m | km | ft | mi --> 米 | 千米 | 英尺 | 英里 额外参数: - WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。...两个参数选项,在调用georadius时是否真的只查询了主实例,还是进行了只读封装。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。

    1.4K10

    用 Redis 查询 “附近的人” !妙啊!

    : 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象;...范围单位:m | km | ft | mi --> 米 | 千米 | 英尺 | 英里 额外参数: WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。...两个参数选项,在调用georadius时是否真的只查询了主实例,还是进行了只读封装。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...其中N为九宫格范围内的位置元素数量(要算距离);M是指定层级格子的数量,log(M)是跳表结构中找到每个格子首元素的时间复杂度(这个过程一般会进行9次)。

    26840
    领券