Amb*_*ise 5 python mysql django orm geospatial
我有一个包含纬度和经度信息作为FloatFields的模型。
class Trader(models.Model):
latitude = models.FloatField()
longitude = models.FloatField()
Run Code Online (Sandbox Code Playgroud)
我想通过距给定位置(纬度,经度)越来越远的距离来订购此模型,但似乎无法使用F()表达式来做到这一点(使用Haversine库,我没有成功将其转换为浮点数)
Trader.objects.all().annotate(distance=haversine((lat, lon), (float(F('latitude')), float(F('longitude'))))).order_by('distance')
Run Code Online (Sandbox Code Playgroud)
该查询引发以下TypeError:
float() argument must be a string or a number
Run Code Online (Sandbox Code Playgroud)
我也尝试过将ExpressionWrapper与FloatField()用作output_field参数,但没有成功。
我该如何实现?
预先感谢您的任何帮助 !
Func是 Django 1.8 中的新增功能。
from django.db.models import Func, F
class Sin(Func):
function = 'SIN'
class Cos(Func):
function = 'COS'
class Acos(Func):
function = 'ACOS'
class Radians(Func):
function = 'RADIANS'
radlat = Radians(latitude) # given latitude
radlong = Radians(longitude) # given longitude
radflat = Radians(F('latitude'))
radflong = Radians(F('longitude'))
Expression = 3959.0 * Acos(Cos(radlat) * Cos(radflat) *
Cos(radflong - radlong) +
Sin(radlat) * Sin(radflat))
Trader.objects.annotate(distance=Expression).order_by('distance')
Run Code Online (Sandbox Code Playgroud)
基于这篇文章。
| 归档时间: |
|
| 查看次数: |
563 次 |
| 最近记录: |