参考网上计算距离的方法,用orm实现,代码如下
from django.db.models.functions import ACos, Sin, Cos
# lat,long,km 是接口传进来的参数,经纬度和距离
# PI_VALUE是python math.pi, 由于数据库存的经纬度是decimal,所以PI_VALUE=decimal.Decimal(pi)
# REDIUS = decimal.Decimal(180)
# F('lat') F('long') 是使用数据库的值进行计算
XXModel.objects.annotate(
distant=ACos(
Sin((lat * PI_VALUE) / REDIUS) * Sin((F('lat') * PI_VALUE) / REDIUS)
+ Cos((lat * PI_VALUE) / REDIUS) * Cos((F('lat') * PI_VALUE) / REDIUS) * Cos(
(long * PI_VALUE) / REDIUS - F('long') * PI_VALUE / REDIUS
)) * 6380
).filter(distant__lte=km)