如何找到多边形交集区域以注释GeoDjango查询?

时间:2019-10-02 10:31:48

标签: django gis django-queryset intersection geodjango

在我的模型中,我有一个多边形字段。 在我的查询中,我想计算此字段与预定圆之间的交点面积,以便找到可通过我的Polygon模型字段恢复的圆面积的比例。

这是我的模型定义:

class WDPA(models.Model):
    site_code = models.CharField(max_length=200, primary_key=True)
    site_name = models.CharField(max_length=300)
    iucn = models.IntegerField(default=0)

    geom = models.MultiPolygonField()

这是我的查询:

tile = Tiles.objects.filter(start_long__gte=float(form.cleaned_data.get("latitude")), 
                                        end_long__lte=float(form.cleaned_data.get("latitude")),
                                        start_lat__lte=float(form.cleaned_data.get("longitude")),
                                        end_lat__gte=float(form.cleaned_data.get("longitude"))
            )[0]

            tiles = [tile.tile_id, tile.near_0, tile.near_1, tile.near_2, tile.near_3, tile.near_4, tile.near_5, tile.near_6, tile.near_7]

            center = Point(float(form.cleaned_data.get("longitude")), float(form.cleaned_data.get("latitude")), srid=4326)
            circle = center.buffer(0.01802)

            zones = WDPA.objects.filter(tiles__in=tiles).annotate(
                    distance=Distance('geom', center)
            ).order_by('distance').filter(distance__lte=2000).annotate(
                intersection=ExpressionWrapper(F('geom'), output_field=PolygonField()).intersection(circle).area
            )

但是我无法调用.intersection()方法,它会导致此错误:

AttributeError: 'ExpressionWrapper' object has no attribute 'intersection'

我也尝试使用Intersection对象,但是在注释中也无法调用该区域。

请问作为一种解决方案吗? 预先感谢

0 个答案:

没有答案