фильтр по многоугольникам в геоджанго - PullRequest
0 голосов
/ 01 апреля 2020

Допустим, пользователь нарисовал полигон и запросил к бэкэнду фильтрацию. Как я могу фильтровать по ограничивающей рамке, но может ли фильтр гео django в пределах области рисования?

Например, у меня есть объект с данными в поле multilinestring.

class Datasets(models.Model):
    name = models.CharField(max_length=100)
    multipoint = models.MultiPointField(blank=True, null=True, srid=4326)
    multilinestring = models.MultiLineStringField(srid=4326, blank=True, null=True)
    multipoly = models.MultiPolygonField(blank=True, null=True, srid=4326)
    objects = GeoManager()

1 Ответ

0 голосов
/ 07 апреля 2020

Мы должны рассмотреть 2 возможности для наших данных (multilinestring) вместе с данными (нарисованными) Polygon:

  1. Polygon intersects наши данные.

    Тогда запрос должен выглядеть следующим образом:

    Datasets.objects.filter(multilinestring__intersects=Polygon)
    
  2. Данные полностью within the Polygon.

    Тогда запрос должен выглядеть следующим образом:

    Datasets.objects.filter(multilinestring__within=Polygon)
    

Мы можем даже объединить 2 и искать данные, которые либо within или intersect данный Polygon. Для этого мы можем использовать Django Q() object и оператор | (OR) следующим образом:

Datasets.objects.filter(
    Q(multilinestring__intersects=Polygon) |
    Q(multilinestring__within=Polygon)
)
...