Python,SQLAlchemy:如何为GPS坐标创建边界圆?

3 投票
4 回答
2489 浏览
提问于 2025-04-16 22:20

我想要一个功能,可以把一个GPS坐标(包括纬度和经度)放进一个Python函数里,然后这个函数能返回在某个距离范围内的所有纬度和经度。

我最终想做的是,拿一个GPS坐标,然后通过SQLAlchemy这个工具去我的GPS坐标数据库里查找,找出那些在一定范围内的坐标,比如说在1英里之内。

有没有什么框架可以做到这一点,或者你有什么建议可以帮助我解决这个问题吗?

4 个回答

1

你还可以使用“边界框”的方法。这个方法基本上是在一个给定的点周围画一个(大约是方形的)框,然后找到这个框内的所有点。

对于你想要的最大距离(以英里为单位)和一个包含经纬度的点z,你可以使用:

dist_range = max_distance / 69.172

lat_range = (z.latitude-dist_range, z.latitude+dist_range)
lon_range = (z.longitude-dist_range, z.longitude+dist_range)

这样你的查询就可以包括那些坐标在这个范围内的条目。

不过,这种方法的准确性不是很高,最大距离越大,准确性就越低。不过,对于简单的地理查询来说,这个方法效果很好,而且不需要使用任何特定于位置的扩展。

2

你可以使用 PostGIS,它为 PostgreSQL 数据库增加了地理信息的支持。ST_DWithin 这个函数可以帮助你找到距离某个点在一定范围内的其他点。

SELECT name
FROM some_table
WHERE ST_DWithin(
    geography_1,
    geography_2,
    distance_in_meters
);

GeoAlchemy 是一个为 SQLAlchemy 增加空间数据库功能的扩展库。你可以考虑把它和 PostGIS 一起使用。

0

卡尔在评论里留的链接中的一个回答,实际上就是我选择的解决方案:

MySQL大圆距离(哈弗辛公式)

撰写回答