Python,SQLAlchemy:如何为GPS坐标创建边界圆?
我想要一个功能,可以把一个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
卡尔在评论里留的链接中的一个回答,实际上就是我选择的解决方案: