在geodjango中按多边形过滤

时间:2020-04-01 03:53:08

标签: django postgis geodjango

比方说,用户绘制多边形并请求到后端进行过滤。因为我可以通过边界框进行过滤,但是geodjango queryset可以在绘图区域内进行过滤吗?

例如,我在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 :(得分:0)

我们应该结合给定(绘制)的select mso_device , 100 max_value , coalesce(mso_oee, 0) value from (select mso_device , mso_oee from mes_oee where mso_device = :p5_device and mso_date = to_date(:p5_date, :APP_NLS_DATE_FORMAT) union all select null , null from dual where :p5_device is null or :p5_date is null) ORDER BY 2 DESC; 考虑数据(multilinestring的两种可能性:

  1. Polygon intersects我们的数据。

    然后查询应如下所示:

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

    然后查询应如下所示:

    Polygon

我们甚至可以将2结合起来并搜索给定Datasets.objects.filter(multilinestring__within=Polygon) 的{​​{1}} within的数据。为此,我们可以使用Django的Q() objectintersect运算符,如下所示:

Polygon