性能 - 按纬度/经度查找特定距离内的所有点

Posted

技术标签:

【中文标题】性能 - 按纬度/经度查找特定距离内的所有点【英文标题】:performance - finding all points within certain distance by lat/long 【发布时间】:2013-08-09 19:32:29 【问题描述】:

我有一个 CSV 文件,其中的点由 lat/long(约 10K 点)标记。我想搜索用户/指定纬度/经度坐标的给定距离内的所有点 - 例如,曼哈顿的质心。

我对编程和数据库还很陌生,所以这可能是一个基本问题。如果是这样,我道歉。在不使用数据库的情况下在纯 Python 中执行此搜索是否高效?例如,我可以简单地将 CSV 读入内存并使用 Python 脚本进行搜索吗?如果它是高性能的,它会随着点数的增加而很好地扩展吗?

或者这在 Python 中根本不可行,我需要使用支持地理空间查询的数据库进行调查?

此外,我该如何理解这些类型的计算的性能,以便我能对此形成良好的直觉?

【问题讨论】:

【参考方案1】:

这在没有任何数据库的 python 中绝对是可能的。我肯定会推荐使用 numpy。我会做以下事情:

    将所有点从 csv 读取到一个 numpy 数组中 计算每个点到给定点的距离 对距离进行排序或使用 argmin 找到距离最小的距离

因为所有计算都是矢量化的,它们以接近 C 的速度发生。

使用一台正常的计算机,I/O 大约需要 2-3 秒,而计算需要不到 100-200 毫秒。

数学方面,可以试试http://en.wikipedia.org/wiki/Haversine_formula

【讨论】:

以上是关于性能 - 按纬度/经度查找特定距离内的所有点的主要内容,如果未能解决你的问题,请参考以下文章

C#查找一英里内的所有纬度和经度

如何在不同的数据帧中选择特定时间段内的点,然后根据纬度/经度选择这两个点之间的距离

检索给定区域 x 距离内的所有经纬度点

给定初始纬度 lng,距离和方位角,在 php 中查找纬度经度点

使用 MySQL 查找距离内的点

从R中的已知中心点查找半径内的纬度/经度