Geodjango和分层位置

时间:2018-02-27 19:05:22

标签: django gis postgis hierarchical-data geodjango

几个星期后,我想开始构建一个数据仓库"基于django。数据库应填充可连接到某个位置的数据。例如,与国家或城市相关的人口,或者年降雨量或温度。参数尚未定义,并且会随着时间的推移而变化,但它们通常会有一个数量,时间段(例如每年)和单位(例如:在Y年中国家X的人口数量)。

我的想法是在数据库中创建一个自我引用表,其中包含大陆,国家,地区和城市。一个例子:

ID | parent_id | name
1  | null      | Europe
2  | 1         | France
3  | 2         | Paris

我希望有一个表格可以将数据连接到这样的位置:

ID | location_id | parameter_id | from_date  | to_date    | quantity
1  | 3           | 1            | 01-01-2000 | 31-01-2001 | 3000000

参数:     ID |名字|单元     1 |人口|人

从技术上讲,我还想将位置连接到坐标或多边形,以便我可以在地图上显示它们。

(Geo)Django有可能是这样的吗?我觉得GeoDjango将模型类与特定主题相结合,例如在这种情况下的人群。但是,我还不知道我的科目......

或者我应该将数据库结构设计得完全不同?

最后:我想将pgSQL用于postgis数据库,因为它是开源的,似乎是最合适的。但是如果我在本地对网站进行编程我有SQLite,有没有办法在我的Windows计算机上本地运行带有Postgis的pgSQL(这是相当慢的)用于开发?然后,我可以轻松地将它使用例如GitLab推送到生产地点(例如amazone AWS)吗?

非常感谢有关此主题的提示和帮助。

1 个答案:

答案 0 :(得分:1)

对于使用Django的分层数据,请使用Django MPTT

class Region(MPTTModel):
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)
    name = models.CharField(max_length=50, unique=True)
    geom = models.MultiPolygonField(null=True, blank=True)

class Parameter(models.Model):
    name = models.CharField(max_length=50, unique=True)

class RegionParameter(models.Model):
    region = TreeForeignKey(Region, null=True, blank=True, related_name='children', db_index=True...)
    param = models.ForeignKey(Parameter...)
    from_date = models.DateField()
    to_date = models.DateField()
    value = models.IntegerField()

您只能在叶子上或层次结构中的所有级别添加地理数据。