性能 - 按纬度/经度查找特定距离内的所有点
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
【讨论】:
以上是关于性能 - 按纬度/经度查找特定距离内的所有点的主要内容,如果未能解决你的问题,请参考以下文章
如何在不同的数据帧中选择特定时间段内的点,然后根据纬度/经度选择这两个点之间的距离