您的位置:

解决方案:django GEOSException("Invalid Geometry loaded from pickled state.")

  发布时间:2023-03-21 20:33:23
报错的原因这个错误通常是由于使用了无效的几何图形导致的。这可能是由于从数据库中加载了无效的几何图形,或者是在尝试将几何图形序列化为字符串并将其存储在数据库中时发生了错误。要解决此问题,您需要查找并修正源头上的无效几何图形。如果您无法找到并修正无效的几何图形,您可能需要考虑使用方法来检测并修复无效的几何图形。

报错的原因

GEOSException("Invalid Geometry loaded from pickled state.") 这个错误通常是由于使用了无效的几何图形导致的。这可能是由于从数据库中加载了无效的几何图形,或者是在尝试将几何图形序列化为字符串并将其存储在数据库中时发生了错误。

要解决此问题,您需要查找并修正源头上的无效几何图形。这可能需要检查您的数据模型,以确保您的几何图形字段具有正确的类型,并检查您的数据来确保没有无效几何图形。

如果您无法找到并修正无效的几何图形,您可能需要考虑使用 django.contrib.gis.geos.GEOSGeometry.validate() 方法来检测并修复无效的几何图形。

如何解决

为了解决 GEOSException("Invalid Geometry loaded from pickled state.") 错误,您需要找到并修正源头上的无效几何图形。

这可能需要您检查您的数据模型,以确保您的几何图形字段具有正确的类型,并检查您的数据来确保没有无效几何图形。

如果您无法找到并修正无效的几何图形,您可能需要考虑使用 django.contrib.gis.geos.GEOSGeometry.validate() 方法来检测并修复无效的几何图形。

具体来说,您可以使用以下代码来检查并修复无效的几何图形:


from django.contrib.gis.geos import GEOSGeometry

def fix_invalid_geometry(geometry):
    if not geometry.valid:
        fixed_geometry = GEOSGeometry(geometry.wkt)
        if fixed_geometry.valid:
            return fixed_geometry
    return geometry

然后,您可以使用这个函数来修复无效的几何图形:


fixed_geometry = fix_invalid_geometry(geometry)

使用例子

是的,下面是一个示例,它展示了如何使用 `fix_invalid_geometry()` 函数来修复无效的几何图形:


from django.contrib.gis.geos import GEOSGeometry

def fix_invalid_geometry(geometry):
    if not geometry.valid:
        fixed_geometry = GEOSGeometry(geometry.wkt)
        if fixed_geometry.valid:
            return fixed_geometry
    return geometry

# 从数据库中加载无效的几何图形
invalid_geometry = MyModel.objects.get(id=1).geometry

# 使用 fix_invalid_geometry() 函数修复无效的几何图形
fixed_geometry = fix_invalid_geometry(invalid_geometry)

# 将修复后的几何图形保存回数据库
MyModel.objects.filter(id=1).update(geometry=fixed_geometry)