想要协调范围内的GeoDjango [-180 -90,180 90]?

时间:2013-12-02 21:58:02

标签: python geodjango

这是我的模特:

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]的范围内?这对我没有任何意义......

1 个答案:

答案 0 :(得分:1)

考虑一个球体(假设地球像球一样圆),使用球面坐标(r,phi,tau),给定的范围足以识别球体上的每个点。有关坐标系的详细说明请咨询维基百科http://en.wikipedia.org/wiki/Spherical_coordinate_system

如果您有更大的角度,您只需将它们调整到间隔,例如

if (phi > 180):
    phi -= 360
elseif (phi < -180):
    phi += 360

和tau类似。