Как найти область пересечения полигонов для аннотирования запроса GeoDjango? - PullRequest
0 голосов
/ 02 октября 2019

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

Я также пытался использовать объект пересечения, но я не могу назвать эту область и в своем аннотации.

Кто-нибудь, как решение, пожалуйста? Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...