2

Я на самом деле ищу лучший и самый простой способ сделать пространственный индекс с 4 таблицами, где структура данных уже на месте.Geodjango/postgres ForeignKey отношения как пространственный индекс

As picture показать это, слой наложен и идеально подходит. Пространственная операция могла выполнять работу в запросе, но для веб-ГИС с тяжелой геообработкой на geodjango это может быть слишком тяжело для дружественного использования. Таким образом, добавление отношений 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 в качестве правил, как: где L2_FK LIKE selected_L1_ID%»вместо того, где L2_FK == selected_L1_ID%

Спасибо

Alex

ответ

0

Мы использовали пространственно проиндексированы данные? в этой форме без возникновения проблем с использованием только одна модель/таблица и 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 

(во время импорта данных, мы вручную добавили объединение всех дочерних узлов в родительский узел)

 Смежные вопросы

  • Нет связанных вопросов^_^