Django:存储几何图形的方法是什么?

时间:2015-12-05 21:42:43

标签: python django geometry

存储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)

在我的模型中,但不知怎的,这看起来不正确。这样做有更好的方法吗?是否还有办法进行碰撞检测?

2 个答案:

答案 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的默认设置时要小心。