存储e.q.的最佳方法是什么? Django中的矩形?我在考虑像
这样的东西start_position = models.CommaSeparatedIntegerField(max_length=10,
blank=True,
null=True)
heigh = models.IntegerField(blank=True,
null=True)
width = models.IntegerField(blank=True,
null=True)
在我的模型中,但不知怎的,这看起来不正确。这样做有更好的方法吗?是否还有办法进行碰撞检测?
答案 0 :(得分:3)
您可以将GIS用于数据库,所以在settings.py中:
DATABASES = {
'default' : {
'ENGINE' : 'django.contrib.gis.db.backends.postgis',
'NAME' : 'geodjango',
}
}
对于你的model.py,首先导入GeoDjango:
from django.contrib.gis.db import models
然后制作你的模型,例如:
class Feature(models.Model):
rectangle = models.MultiPolygonField(srid=900913, blank=True, null=True)
答案 1 :(得分:2)
GeoDjango应该做你需要的一切。特别是,矩形是多边形的特殊情况,因此可以使用:
from django.contrib.gis.db.models import Model, GeoManager, PolygonField
class MyModel(Model):
rect = models.PolygonField()
objects = GeoManager()
# the envelope polygon around two points is a rectangle
from django.contrib.gis.geos import Point, GeometryCollection
rect = GeometryCollection(Point(10, 10), Point(20, 20)).envelope
MyModel.objects.create(rect=rect)
可以执行查找directly on the database(可能使用空间索引):
from django.contrib.gis.geos import Point
p = Point(15, 15)
MyModel.objects.filter(rect__contains=p)
请注意,GeoDjango需要额外的库,最重要的是 - 需要支持空间SQL的数据库后端。有关详细信息,请参阅GeoDjango的setup guide,但在没有特殊安装说明的情况下使用sqlite作为spatiallite might not work out of the box的默认设置时要小心。