您的位置:

解决ValueError("EWKT has invalid SRID part.")在django出现报错

  发布时间:2023-03-27 09:34:24
如果出现错误,则表明你输入的 EWKT 中的 SRID 部分无效。它应该是这样的其中 SRID 是一个数字,表示坐标系的标识符,WKT 是表示地理对象的文本。确保 SRID 部分是有效的数字,并且与坐标系相匹配。如果仍然无法解决问题,请检查您的 Django 应用程序的日志文件,看看是否有其他错误信息可以帮助您诊断问题。例如,如果您想在 Django 中存储 WGS 坐标系的坐标,则可以使用以下代码创建 WGS 坐标系的点对象将点对象存储到模型中这里的 SRID 为 4326,表示 WGS 坐标系。

报错的原因

这个错误通常是由于你在使用 Django 的 geospatial 模型 (例如 `PointField`) 时,输入的坐标格式不正确导致的。

EWKT (Extended Well-Known Text) 是一种在 SQL 中表示地理对象的文本格式,格式为 `SRID=;`。其中,SRID (Spatial Reference ID) 是一个数字,表示地理坐标系的标识符,而 WKT (Well-Known Text) 是表示地理对象的文本。

如果出现 "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=;`,其中 SRID 是一个数字,表示坐标系的标识符,WKT 是表示地理对象的文本。

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 %}
{% csrf_token %}