这是我的模特:
import datetime
from django.contrib.gis.db import models
class UserLocation(models.Model):
user = models.ForeignKey('auth.User')
coords = models.PointField()
date_created = models.DateTimeField(default=datetime.datetime.now)
objects = models.GeoManager()
@classmethod
def get_latest_location(cls, user):
return cls.objects.filter(user=user).latest()
class Meta:
get_latest_by = 'date_created'
当我尝试查询时:
coords = Point(x=34.4208305, y=-119.6981901) # in california
UserLocation.objects.distance(coords)
我收到此错误:
DatabaseError: Coordinate values are out of range [-180 -90, 180 90] for GEOGRAPHY type
CONTEXT: SQL function "st_distance_sphere" during inlining
为什么它们要在[-180 -90,180 90]的范围内?这对我没有任何意义......
答案 0 :(得分:1)
考虑一个球体(假设地球像球一样圆),使用球面坐标(r,phi,tau),给定的范围足以识别球体上的每个点。有关坐标系的详细说明请咨询维基百科http://en.wikipedia.org/wiki/Spherical_coordinate_system。
如果您有更大的角度,您只需将它们调整到间隔,例如
if (phi > 180):
phi -= 360
elseif (phi < -180):
phi += 360
和tau类似。