您的位置:

最佳方案处理django ValueError("W3C Geo only supports Point geometries.")

  发布时间:2023-03-26 15:07:37
报错的原因这个错误通常是由于你试图将一个不是 "Point" 类型的几何体传递给 Django 的 `GEOSGeometry` 函数。例如,下面的代码将导致此错误要解决此错误,请确保传递给 `GEOSGeometry` 的参数是 "Point" 类型的几何体。确保你的数据库引擎是正确的,并且你的 Django 设置文件中的 `DATABASES` 设置是正确的。尝试使用 Django 的 `Point` 对象来创建几何体,而不是直接使用字符串创建。

报错的原因

这个错误通常是由于你试图将一个不是 "Point" 类型的几何体(如 "LineString" 或 "Polygon")传递给 Django 的 `GEOSGeometry` 函数。

例如,下面的代码将导致此错误:


from django.contrib.gis.geos import GEOSGeometry

polygon = GEOSGeometry('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))')
wkt = polygon.wkt
geo = GEOSGeometry(wkt)

要解决此错误,请确保传递给 `GEOSGeometry` 的参数是 "Point" 类型的几何体。

例如,您可以使用以下代码来正确处理 "Point" 类型的几何体:


from django.contrib.gis.geos import GEOSGeometry

point = GEOSGeometry('POINT(0 0)')
wkt = point.wkt
geo = GEOSGeometry(wkt)

如何解决

为了解决 "ValueError('W3C Geo only supports Point geometries.')" 这个错误,你应该做以下事情:

1. 确保你的 Django 版本与你使用的 GEOS 和 GDAL 库兼容。

2. 确保你的数据库引擎是正确的,并且你的 Django 设置文件中的 `DATABASES` 设置是正确的。

3. 尝试使用 Django 的 `Point` 对象来创建几何体,而不是直接使用字符串创建。 例如:


from django.contrib.gis.geos import Point

point = Point(x=0, y=0)

4. 如果仍然无法解决问题,建议检查你的代码以确保你没有意外地将错误的几何体类型传递给 `GEOSGeometry` 函数。

使用例子

是的,我可以给出一个使用 Django 的 `Point` 对象来创建几何体的例子。

首先,假设你有一个模型如下:


from django.contrib.gis.db import models

class Place(models.Model):
    name = models.CharField(max_length=255)
    location = models.PointField()

然后,你可以使用 `Point` 对象来创建一个新的 `Place` 对象,如下所示:


from django.contrib.gis.geos import Point

place = Place(name='My Place', location=Point(x=0, y=0))
place.save()

这将创建一个名为 "My Place" 的新地点,并将其位置设置为坐标 (0, 0)。