Geodjango/postgres 类似于空间索引的外键关系
Geodjango/postgres ForeignKey relationship like a spatial index
我实际上正在寻找最好和最简单的方法来使用 4 个表创建空间索引,其中数据结构已经到位。
如 picture 所示,层已叠加且完美贴合。空间操作可以完成查询中的工作,但对于在 geodjango 上进行大量地理处理的 web GIS,它可能过于繁重而不适合友好使用。因此,添加 ForeignKey 关系可能会更快。
结构是:
- L1有很多L2
- L2有很多L3
- L3有很多L4
命名不规范,所有ID和FID都是字符串,如:
- L1 : A,B,C, ...
B as exemple
- L2 : B01, B02, B03, ...
B03 exemple
- L3 : B0301, B0302, B0303, ...
B0302 exemple
- L4:B030201、B030202、B030203、...
许多动态地理处理将通过此结构进行。这就是为什么外键关系可能是最好的选择。最后,它是一个与字段一起工作的空间索引。但是要怎么做呢?
我可以将 L1 与 L2 关联为规则,例如:where L2_FK LIKE selected_L1_ID%" 而不是 where L2_FK == selected_L1_ID%?
感谢
亚历克斯
我们已经使用了这种形式的空间索引数据而没有遇到仅使用一个 model/table 和 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
(在导入数据时,我们已经手动将所有子节点的geom联合到父节点)
我实际上正在寻找最好和最简单的方法来使用 4 个表创建空间索引,其中数据结构已经到位。
如 picture 所示,层已叠加且完美贴合。空间操作可以完成查询中的工作,但对于在 geodjango 上进行大量地理处理的 web GIS,它可能过于繁重而不适合友好使用。因此,添加 ForeignKey 关系可能会更快。
结构是:
- L1有很多L2
- L2有很多L3
- L3有很多L4
命名不规范,所有ID和FID都是字符串,如:
- L1 : A,B,C, ...
B as exemple
- L2 : B01, B02, B03, ...
B03 exemple
- L3 : B0301, B0302, B0303, ...
B0302 exemple
- L4:B030201、B030202、B030203、...
许多动态地理处理将通过此结构进行。这就是为什么外键关系可能是最好的选择。最后,它是一个与字段一起工作的空间索引。但是要怎么做呢?
我可以将 L1 与 L2 关联为规则,例如:where L2_FK LIKE selected_L1_ID%" 而不是 where L2_FK == selected_L1_ID%?
感谢
亚历克斯
我们已经使用了这种形式的空间索引数据而没有遇到仅使用一个 model/table 和 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
(在导入数据时,我们已经手动将所有子节点的geom联合到父节点)