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".
более подробная информация