【问题标题】:filter by polygon draw in geodjango在geodjango中按多边形绘制过滤
【发布时间】:2020-04-01 03:53:08
【问题描述】:

假设用户绘制多边形并向后端请求过滤。因为我可以通过边界框过滤,但 geodjango 查询集可以在绘图区域内过滤吗?

例如,我在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()

【问题讨论】:

    标签: django postgis geodjango


    【解决方案1】:

    我们应该结合给定的(绘制的)Polygon 来考虑我们的数据 (multilinestring) 的 2 种可能性:

    1. Polygonintersects 我们的数据。

      那么查询应该是这样的:

      Datasets.objects.filter(multilinestring__intersects=Polygon)
      
    2. 数据完全是withinPolygon

      那么查询应该是这样的:

      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)
    )
    

    【讨论】:

    • 嘿,@saroj-rai 我正在通过我的答案,我想知道,你觉得这有用吗?
    猜你喜欢
    • 2020-02-23
    • 2012-11-01
    • 1970-01-01
    • 2018-04-15
    • 2016-09-03
    • 1970-01-01
    • 2011-12-30
    • 2012-01-07
    相关资源
    最近更新 更多