解决ValueError("EWKT has invalid SRID part.")在django出现报错
报错的原因
这个错误通常是由于你在使用 Django 的 geospatial 模型 (例如 `PointField`) 时,输入的坐标格式不正确导致的。
EWKT (Extended Well-Known Text) 是一种在 SQL 中表示地理对象的文本格式,格式为 `SRID=
如果出现 "EWKT has invalid SRID part" 错误,则表明你输入的 EWKT 中的 SRID 部分无效。可能的原因包括:
- SRID 部分为空
- SRID 部分不是数字
- SRID 部分与坐标系不匹配
解决方案是检查输入的 EWKT 格式是否正确,并确保 SRID 部分是有效的数字,与坐标系相匹配。
例如,如果你想在 Django 中存储 WGS 84 坐标系的坐标,则可以使用以下代码:
from django.contrib.gis.geos import Point
# 创建 WGS 84 坐标系的点对象
point = Point(x=121.473701, y=31.230416, srid=4326)
# 将点对象存储到模型中
model = MyModel.objects.create(name='Shanghai', location=point)
这里的 SRID 为 4326,表示 WGS 84 坐标系。
如何解决
要解决这个问题,您可以做以下几件事:
1. 检查您输入的 EWKT 格式是否正确。它应该是这样的:`SRID=
2. 确保 SRID 部分是有效的数字,并且与坐标系相匹配。您可以使用坐标系查询服务 (例如 http://spatialreference.org/) 来查询有效的 SRID 列表。
3. 如果仍然无法解决问题,请检查您的 Django 应用程序的日志文件,看看是否有其他错误信息可以帮助您诊断问题。
例如,如果您想在 Django 中存储 WGS 84 坐标系的坐标,则可以使用以下代码:
from django.contrib.gis.geos import Point
# 创建 WGS 84 坐标系的点对象
point = Point(x=121.473701, y=31.230416, srid=4326)
# 将点对象存储到模型中
model = MyModel.objects.create(name='Shanghai', location=point)
这里的 SRID 为 4326,表示 WGS 84 坐标系。
使用例子
是的,以下是一个使用 Django 的 geospatial 模型 (例如 `PointField`) 存储坐标的例子:
1. 在您的 Django 应用程序中创建一个模型,该模型具有一个 `PointField` 字段:
from django.db import models
from django.contrib.gis.db import models as gis_models
class Place(models.Model):
name = models.CharField(max_length=255)
location = gis_models.PointField()
2. 在你的 Django 应用程序中创建一个视图,用于接收坐标并存储到数据库中:
from django.shortcuts import render
from .models import Place
from django.contrib.gis.geos import Point
def add_place(request):
if request.method == 'POST':
# 从请求中获取坐标
x = float(request.POST['x'])
y = float(request.POST['y'])
# 创建 WGS 84 坐标系的点对象
point = Point(x=x, y=y, srid=4326)
# 创建新的 Place 对象并存储到数据库中
Place.objects.create(name='New Place', location=point)
return render(request, 'places/add_place.html', {'success': True})
else:
return render(request, 'places/add_place.html')
3. 在你的 Django 应用程序中创建一个模板,用于渲染表单,输入坐标并提交到视图:
{% if success %}
地点已成功添加!
{% endif %}