您的位置:

django报错GDALException("Invalid input type for OGR Geometry construction: %s"% type(geom_input))怎么办

  发布时间:2023-02-26 17:35:40
报错的原因这个异常通常是在使用 Django 的 GeoDjango 功能时出现的。GeoDjango 是 Django 的一个子模块,用于处理地理数据。你也可以使用 try-except 语句来捕获 GDALException 异常,并在发生异常时抛出自定义的异常,例如尝试创建地理数据如果传入的地理数据不合法,就抛出异常这样就可以避免出现这个异常了。如果地理数据不合法,就会抛出 ValidationError 异常。GeoDjango 使用 GDAL 库来实现地理数据的存储、查询和可视化等功能。下面是一些使用 GeoDjango 的示例获取地理数据创建地理数据创建 Location 对象

报错的原因

"GDALException("Invalid input type for OGR Geometry construction: %s"% type(geom_input))" 这个异常通常是在使用 Django 的 GeoDjango 功能时出现的。

GeoDjango 是 Django 的一个子模块,用于处理地理数据。它使用 GDAL 库来实现地理数据的存储、查询和可视化等功能。

"GDALException("Invalid input type for OGR Geometry construction: %s"% type(geom_input))" 这个异常通常表示你在使用 GeoDjango 时,传入了不合法的地理数据(例如非法的坐标)。

为了解决这个问题,你需要检查你的代码,确保你传入的地理数据是合法的。

你也可以使用 try-except 语句来捕获 GDALException 异常,并在发生异常时抛出自定义的异常,例如:


from django.contrib.gis.geos import GEOSGeometry
from django.core.exceptions import GDALException

try:
    # 尝试创建地理数据
    geom = GEOSGeometry("POINT(1 2)")
except GDALException:
    # 如果传入的地理数据不合法,就抛出异常
    raise Exception("Invalid input")

这样就可以避免出现 "GDALException("Invalid input type for OGR Geometry construction: %s"% type(geom_input))" 这个异常了。

如何解决

要解决 "GDALException("Invalid input type for OGR Geometry construction: %s"% type(geom_input))" 这个异常,你需要做的是检查你的代码,确保你传入的地理数据是合法的。

你也可以使用 try-except 语句来捕获 GDALException 异常,并在发生异常时抛出自定义的异常,例如:


from django.contrib.gis.geos import GEOSGeometry
from django.core.exceptions import GDALException

def create_geometry(input_string):
    try:
        # 尝试创建地理数据
        geom = GEOSGeometry(input_string)
    except GDALException:
        # 如果传入的地理数据不合法,就抛出异常
        raise Exception("Invalid input")
    return geom

# 调用函数
geometry = create_geometry("POINT(1 2)")

你还可以使用 Django 的校验功能来验证地理数据的合法性,例如:


from django.contrib.gis.geos import GEOSGeometry
from django.core.exceptions import ValidationError

def create_geometry(input_string):
    # 创建地理数据
    geom = GEOSGeometry(input_string)
    # 校验地理数据
    try:
        geom.validate()
    except ValidationError:
        # 如果地理数据不合法,就抛出异常
        raise Exception("Invalid input")
    return geom

# 调用函数
geometry = create_geometry("POINT(1 2)")

使用校验功能可以在保存地理数据之前,对数据的合法性进行检查,从而避免出现 "GDALException("Invalid input type for OGR Geometry construction: %s"% type(geom_input))" 这个异常。

这些方法都可以帮助你解决 "GDALException("Invalid input type for OGR Geometry construction: %s"% type(geom_input))" 这个异常。

使用例子

以下是使用 Django 的校验功能验证地理数据合法性的示例:


# models.py

from django.contrib.gis.db import models

class Location(models.Model):
    name = models.CharField(max_length=255)
    geometry = models.PointField()

    def clean(self):
        # 校验地理数据
        try:
            self.geometry.validate()
        except ValidationError:
            # 如果地理数据不合法,就抛出异常
            raise ValidationError("Invalid geometry")

# views.py

from django.shortcuts import render, redirect

def create_location(request):
    if request.method == 'POST':
        form = LocationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('locations')
    else:
        form = LocationForm()
    return render(request, 'create.html', {'form': form})

# create.html

{% csrf_token %} {{ form.as_p }}

Django 的校验功能,在保存地理数据之前检查数据的合法性。如果地理数据不合法,就会抛出 ValidationError 异常。

你还可以在表单的 clean 方法中使用校验功能,例如:


# forms.py

from django import forms
from django.contrib.gis.geos import GEOSGeometry
from django.core.exceptions import ValidationError

class LocationForm(forms.ModelForm):
    class Meta:
        model = Location
        fields = ['name', 'geometry']

    def clean_geometry(self):
        # 获取地理数据
        data = self.cleaned_data['geometry']
        # 创建地理数据
        geom = GEOSGeometry(data)
        # 校验地理数据
        try:
            geom.validate()
        except ValidationError:
            # 如果地理数据不合法,就抛出异常
            raise ValidationError("Invalid geometry")
        return geom

# views.py

from django.shortcuts import render, redirect

def create_location(request):
    if request.method == 'POST':
        form = LocationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('locations')
    else:
        form = LocationForm()
    return render(request, 'create.html', {'form': form})

# create.html

{% csrf_token %} {{ form.as_p }}

嗯,你好。在使用 Django 的 GeoDjango 功能时,你可以使用 Django 的校验功能来验证地理数据的合法性。你可以在模型的 clean 方法中使用校验功能,也可以在表单的 clean 方法中使用校验功能。

下面是使用 Django 的校验功能验证地理数据合法性的示例:


# models.py

from django.contrib.gis.db import models

class Location(models.Model):
    name = models.CharField(max_length=255)
    geometry = models.PointField()

    def clean(self):
        # 校验地理数据
        try:
            self.geometry.validate()
        except ValidationError:
            # 如果地理数据不合法,就抛出异常
            raise ValidationError("Invalid geometry")

# forms.py

from django import forms
from django.contrib.gis.geos import GEOSGeometry
from

在 Django 中,你可以使用 GeoDjango 功能来处理地理数据。GeoDjango 使用 GDAL 库来实现地理数据的存储、查询和可视化等功能。

下面是一些使用 GeoDjango 的示例:


# models.py

from django.contrib.gis.db import models

class Location(models.Model):
    name = models.CharField(max_length=255)
    geometry = models.PointField()

# views.py

from django.shortcuts import render
from django.contrib.gis.geos import Point

def create_location(request):
    if request.method == 'POST':
        form = LocationForm(request.POST)
        if form.is_valid():
            # 获取地理数据
            lng = form.cleaned_data['lng']
            lat = form.cleaned_data['lat']
            # 创建地理数据
            geom = Point(lng, lat)
            # 创建 Location 对象
            Location.objects.create(name=form.cleaned_data['name'], geometry=geom)
            return redirect('locations')
    else:
        form = LocationForm()
    return render(request, 'create.html', {'form': form})

# create.html


    {% csrf_token %}
    {{ form.as_p }}