gpt4 book ai didi

postgresql - Geodjango/postgres 外键关系,如空间索引

转载 作者:行者123 更新时间:2023-11-29 12:25:25 25 4
gpt4 key购买 nike

我实际上正在寻找最好和最简单的方法来使用 4 个表创建空间索引,其中数据结构已经到位。

作为picture展示一下,层被覆盖并且完美贴合。空间操作可以完成查询中的工作,但对于在 geodjango 上进行大量地理处理的 web GIS,它可能太重而无法友好使用。因此,添加 ForeignKey 关系可能会更快。

结构是:

  • L1有很多L2
  • L2有很多L3
  • L3有很多L4

命名不寻常,所有ID和FID都是字符串,如:

  • L1 : A,B,C, ... B 为例
  • L2 : B01, B02, B03, ... B03 示例
  • L3:B0301,B0302,B0303,... B0302 示例
  • L4:B030201、B030202、B030203……

许多动态地理处理将通过此结构进行。这就是为什么外键关系可能是最好的选择。最后,它是一个与字段一起工作的空间索引。但是要怎么做呢?

我能否将 L1 与 L2 关联为如下规则:where L2_FK LIKE selected_L1_ID%"而不是 where L2_FK == selected_L1_ID%?

感谢

亚历克斯

最佳答案

我们以这种形式使用了空间索引数据,而没有遇到仅使用一个模型/表和 django-mptt 的问题。 :

from django.contrib.gis.db import models
from django.utils.translation import ugettext_lazy as _
from mptt.models import MPTTModel, TreeForeignKey


class Region(MPTTModel):
class Level:
L1 = 1
L2 = 2
L3 = 3
L4 = 4
L5 = 5

choices = (
(L1, _("L1")),
(L2, _("L2")),
(L3, _("L3")),
(L4, _("L4")),
(L5, _("L5")),
)

parent = TreeForeignKey('self', null=True, blank=True,
related_name='children')
layer = models.IntegerField(_('layer'), choices=Level.choices,
db_index=True)
code = models.CharField(_("name"), db_index=True, max_length=100)
geom = models.MultiPolygonField(_('polygon'))

def __str__(self):
return self.code

(在数据导入的时候,我们已经手动将所有子节点的geoms的并集添加到了父节点)

关于postgresql - Geodjango/postgres 外键关系,如空间索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41696210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com