我的数据库中有一组带有纬度和经度坐标的记录。是否有一种直接的方法来过滤给定对象的某个指定半径内的其他对象?
用于方法place.get_nearby(rad_km=1.3) -> "QuerySet[Place]"
或函数find_nearby(place: Place, rad_km: float) -> "QuerySet[Place]"
就可以了。
如果有大量涉及的解决方案(需要大量新库和重构),我将声明它超出范围。我目前在我的地方有一种方法来计算它们之间的距离(以弧度和公里为单位),但无法过滤附近的地方。
最后的用例是生成信息表,如下所示:
+-------------------------+-----------------------+-----------------------------+
| Northwest Plaza (1.1km) | | NE Corner (0.04km) |
+-------------------------+-----------------------+-----------------------------+
| West Street (0.789km) | You are here™ | |
+-------------------------+-----------------------+-----------------------------+
| | South Avenue (1.17km) | SW Sunset Building (0.43km) |
+-------------------------+-----------------------+-----------------------------+
此外,确定将对象放入哪个方格的最佳方法是arctan((lat2-lat1)/(lon2-lon1))
(假设它们相当接近)?