(swLat、swLon、neLat、neLon) で指定された境界ボックス内に含まれるすべての UserProfile オブジェクトを検索する境界ボックス クエリを実行する方法がわかりません。ポイントを境界ボックス内の中央に配置するように設定しているにもかかわらず、空の配列が返されています。以下は私のモデルとクエリコードです。
from django.contrib.gis.db import models
from django.contrib.gis.geos import GEOSGeometry
class UserProfile(models.Model):
location = models.PointField(srid=4326, blank=True, null=True)
objects = models.GeoManager()
def setLocation(self, lat, lon):
if not self.location:
self.location = GEOSGeometry('POINT(%s %s)' % (lat, lon))
else:
self.location.set_x(float(lat))
self.location.set_y(float(lon))
self.save()
from models import UserProfile
from django.contrib.gis.geos import Polygon
class SomeView:
def getUserProfilesWithinBBox(swMapBoundsLat, swMapBoundsLon, neMapBoundsLat, neMapBoundsLon, userProfileLocationLat, userProfileLocationLon, userProfile):
'''neMapBoundsLat=38.908254,neMapBoundsLon=-77.002034
swMapBoundsLat=38.888515,seMapBoundsLon-77.070698
userProfileLocationLat=38.89838500999149, userProfileLocationLon=-77.03636580000001
'''
userProfile.setLocation(userProfileLat, userProfileLon)
geom = Polygon.from_bbox((swMapBoundsLat, swMapBoundsLon, neMapBoundsLat, neMapBoundsLon))
matchingUserProfiles = UserProfile.objects.filter(location__bbcontains=geom)
# matchingUserProfiles should contain the userProfile that was just saved, but is always an empty list. what am I doing wrong?
return matchingUserProfiles
背景情報:
- データベース バックエンド: Postgresql-8.4 & PostGIS 1.5.8
- ジャンゴ 1.4.3
- OS: Ubuntu 12.04x32
どんな助けでも大歓迎です。
みんなありがとう、マット