【问题标题】:Django: What is the way to store geometric figures?Django:存储几何图形的方法是什么?
【发布时间】:2016-03-10 17:42:53
【问题描述】:

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

在我的模型中,但不知何故这看起来不正确。有没有更好的方法来做到这一点?有没有办法也可以进行碰撞检测?

【问题讨论】:

  • 啊,链接错了……你可以自己做一个由多个字段组成的字段(查找链接)
  • Here's a small example of one 正在制作答案的版本,但我现在无法对其进行测试,它需要进行一些调试才能为您的领域工作..
  • 我不确定我是否真的在寻找像 MultiWidget 功能这样毫无疑问很酷的东西。我想我想到了一个类似 Django 应用程序的东西,它可能还提供两个区域之间的碰撞检测。

标签: python django geometry


【解决方案1】:

您可以将 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)

【讨论】:

    【解决方案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 的默认设置时要小心。

    【讨论】:

      猜你喜欢
      • 2014-12-13
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2023-04-08
      • 2014-02-14
      • 2017-02-01
      相关资源
      最近更新 更多