您的位置:

对于django错误ValueError("Only numeric values of degree units are allowed on ""geodetic distance queries.")的解决

  发布时间:2023-03-04 10:27:51
报错的原因这个错误通常是因为你在使用 Django 的 `Distance` 对象时传入了一个非数值的角度单位。例如,要正确指定 公里,应该这样写如何解决为了解决这个错误,你需要确保传递给 `Distance` 对象的参数是数值,而不是字符串。使用例子以下是一个简单的例子,展示了如何使用 Django 的 `Distance` 对象来计算地理坐标之间的距离。首先,我们需要安装 Django 的地理信息库。

报错的原因

这个错误通常是因为你在使用 Django 的 `Distance` 对象时传入了一个非数值的角度单位。

例如,下面的代码会引发这个错误:


from django.contrib.gis.measure import Distance

distance = Distance(km='1')  # This will raise the ValueError

这是因为 `Distance` 对象只支持数值角度单位,所以你需要使用数值而不是字符串来指定角度单位。例如,要正确指定 1 公里,应该这样写:


distance = Distance(km=1)  # This is correct

如何解决

为了解决这个错误,你需要确保传递给 `Distance` 对象的参数是数值,而不是字符串。

例如,如果你正在从外部数据源获取角度单位的值,并且该值是字符串,你需要使用 Python 的内置函数 `float()` 将其转换为浮点数。例如:


# Assuming distance_str is a string obtained from an external data source
distance_str = '1.5'
distance = Distance(km=float(distance_str))

但是,如果你正在手动指定角度单位,你应该直接使用数值,而不是字符串。例如:


distance = Distance(km=1.5)  # Correct
distance = Distance(km='1.5')  # Incorrect, this will raise the ValueError

希望这对你有帮助。

使用例子

以下是一个简单的例子,展示了如何使用 Django 的 `Distance` 对象来计算地理坐标之间的距离。

首先,我们需要安装 Django 的地理信息库。在你的项目的 `requirements.txt` 文件中加入以下行:


django[gis]

然后,在你的 Django 项目的 `settings.py` 文件中启用地理信息库:


INSTALLED_APPS = [
    ...
    'django.contrib.gis',
]

接下来,我们可以使用 Django 的 `Distance` 对象来计算两个地理坐标之间的距离。例如:


from django.contrib.gis.measure import Distance
from django.contrib.gis.geos import Point

point1 = Point(x=1.0, y=1.0)
point2 = Point(x=2.0, y=2.0)

distance = point1.distance(point2)  # Calculates the distance between the two points
print(distance)  # Outputs the distance in meters

# You can also specify the distance units
distance_in_km = point1.distance(point2, Distance.KILOMETERS)
print(distance_in_km)  # Outputs the distance in kilometers