В моей модели у меня есть полигональное поле. В моем запросе я хотел бы вычислить площадь пересечения между этим полем и предварительно определенным кругом, чтобы найти долю площади круга, которая восстанавливается моим полем модели 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'
Я также пытался использовать объект пересечения, но я не могу назвать эту область и в своем аннотации.
Кто-нибудь, как решение, пожалуйста? Заранее спасибо