TypeError: Неправильный тип ввода геометрии: <класс 'dict'>

У меня есть такая модель django:

from django.contrib.gis.db import models
from django.contrib.gis.forms import PolygonField


class Field(models.Model):
    boundary = PolygonField(srid=4326)
    asset_id = models.CharField(max_length=255, unique=True)

Задав многоугольник, мне нужно проверить его пересечения с тем, что есть в базе данных. Поэтому я делаю так:

from django.contrib.gis.geos import GEOSGeometry

polygon = {
    'type': 'Polygon',
    'coordinates': [
        [-72.35720634789077, 47.72858763003908],
        [-71.86027854004486, 47.52764829163817],
        [-72.37075892446839, 47.539848426151735],
        [-72.35720634789077, 47.72858763003908],
    ],
}
Field.objects.filter(boundary__intersects=GEOSGeometry(polygon))

и я получаю:

GEOSGeometry(polygon)
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/IPython/core/interactiveshell.py", line 3508, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-16-a799be749a02>", line 1, in <module>
    GEOSGeometry(polygon)
  File "/usr/local/lib/python3.12/site-packages/django/contrib/gis/geos/geometry.py", line 767, in __init__
    raise TypeError("Improper geometry input type: %s" % type(geo_input))
TypeError: Improper geometry input type: <class 'dict'>

Каков правильный способ достижения этого? Я также пробовал следующее:

    >>> Field.objects.filter(boundary__intersects=GEOSGeometry(json.dumps(polygon)))
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/IPython/core/interactiveshell.py", line 3508, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-3-155b1b25302f>", line 1, in <module>
    Field.objects.filter(boundary__intersects=GEOSGeometry(json.dumps(polygon)))
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/contrib/gis/geos/geometry.py", line 753, in __init__
    ogr = gdal.OGRGeometry.from_json(geo_input)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/contrib/gis/gdal/geometries.py", line 167, in from_json
    return OGRGeometry(OGRGeometry._from_json(force_bytes(geom_input)))
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/contrib/gis/gdal/geometries.py", line 154, in _from_json
    return capi.from_json(geom_input)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/contrib/gis/gdal/prototypes/errcheck.py", line 83, in check_geom
    raise GDALException(
django.contrib.gis.gdal.error.GDALException: Invalid geometry pointer returned from "OGR_G_CreateGeometryFromJson".

более подробная информация

Вернуться на верх