gps的定位图,在车的位置去寻找周围20x20的区域,怎么确定周围有多少辆车,使用什么数据结构

记录一下
题目: 给出gps的定位图,在车的位置去寻找周围20x20的区域,怎么确定周围有多少辆车,使用什么数据结构

当时回答的思路把这个问题想成图论的岛屿搜索问题了(基于建好的二维数组)

  1. 把有车的网格设为"1",没有车设为"0",数组result
  2. 设置 visited 二维数组,全部设为 False
  3. 设置四个方向 directions = (0, 1), (1, 0), (0, -1), (-1, 0)
  4. 使用 dfs进行深度优先搜索,与岛屿问题一样,通过判断边界条件和visited数组(访问后设置为True),将有车的坐标添加到 result 中

假设: 当时如果是没有建好该 20 x 20的区域,只是基于当前的车的坐标,怎么设置数据结构?

我当时的回答是直接建数组或者基于该点进行四个方向的建图,发现考察的是采取哪个数据结构比较好?

第一步 :坐标的转换,发现和我的项目里面有关联,GPS的坐标一般是基于WGS84,也就是EPSG4326坐标系,采用CRS的工具包from_crs将经纬度转换为平面坐标系 x 和 y(查询武汉的经度范围,EPSG45xx)

第二步 :选取数据结构,初始我想使用20x20的网格索引,发现不太好动态搜索;

然后我想使用四叉树(四个象限进行建树),发现这样可能会更复杂;最后查了一下,发现使用R树可能在这个问题中比较好,没想到。

python 复制代码
from rtree import index

# 1. 使用 R-Tree 索引构建
# ----------------------------
def build_rtree(cars):
    """构建 R-Tree 索引"""
    idx = index.Index()  # 创建索引对象
    for car in cars:
        # 用 (x, y, x+w, y+h) 来定义车的位置和占用的矩形区域
        idx.insert(car['id'], (car['x'], car['y'], car['x'] + car['w'], car['y'] + car['h']))
    return idx

# ----------------------------
# 2. 使用 R-Tree 进行查询
# ----------------------------
def query_nearby(idx, x, y, width=20, height=20):
    """查询周围 20x20 米范围内的车辆"""
    # 查询范围是以 (x, y) 为中心,宽度和高度分别为 20 和 20
    query_rect = (x - width/2, y - height/2, x + width/2, y + height/2)
    # 查询返回的 ID 列表
    return list(idx.intersection(query_rect))
相关推荐
小诗懂技术3 小时前
linux驱动中断,相关中断的方式与适用场景
linux·arm开发·驱动开发·算法
不会就选b3 小时前
算法日常・每日刷题--<动态规划>25
算法
Keep_Trying_Go3 小时前
分割算法FastSAM论文详解
深度学习·算法·计算机视觉
星夜离尘563 小时前
MATLAB 5 点滑动平均:filter 与 conv 的输出对齐,以及 2 样本延时的含义
开发语言·算法·matlab·滤波·fir
Dovis(誓平步青云)3 小时前
总用电下降了,为什么家庭能源看板仍然提示异常
java·开发语言·数据库·人工智能·算法·电脑·能源
专注API从业者3 小时前
告别手工盯盘:用 Open‑Claw 搭建电商商品自动化监控与数据分析实战
运维·数据结构·数据挖掘·数据分析·自动化
开开心心就好3 小时前
A3的PDF怎么切成A4?拖一下分割线就行
服务器·开发语言·python·算法·pdf·ocr·tornado
闻缺陷则喜何志丹3 小时前
详细设计说明书的内容要求
算法·测试·存储
Logic1014 小时前
C语言/数据结构位运算题解:异或XOR找出糖葫芦派对中的“独一无二山楂果数量“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
和裕4 小时前
定制纸箱刀卡、平卡、隔档分别是什么?结构与适用场景区别全解析
大数据·运维·网络·人工智能·算法