繁体   English   中英

GeoDjango GDALException - OGR 失败

[英]GeoDjango GDALException - OGR failure

安装 GeoDjango 后,我想在管理面板中创建一个“位置”对象,它使用地图上的地址和点。 提交表单后,我收到这样的错误...

GDALException at /admin/maps/location/add/
OGR failure.

我曾尝试查看类似的问题, 例如 here ,但没有一个解决方案有效。 此外,搜索“无法加载 PROJ.4 库”(第一个回溯行)也没有成功。

任何帮助将不胜感激! - 让我知道我是否应该用我的 settings.py 或其他相关文件更新这个问题。

完整追溯:

GDAL_ERROR 6: Unable to load PROJ.4 library (libproj.dylib), creation of OGRCoordinateTransformation failed.
Internal Server Error: /admin/maps/location/add/
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Library/Python/2.7/site-packages/django/contrib/admin/options.py", line 551, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/Library/Python/2.7/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/Library/Python/2.7/site-packages/django/contrib/admin/sites.py", line 224, in inner
    return view(request, *args, **kwargs)
  File "/Library/Python/2.7/site-packages/django/contrib/admin/options.py", line 1508, in add_view
    return self.changeform_view(request, None, form_url, extra_context)
  File "/Library/Python/2.7/site-packages/django/utils/decorators.py", line 67, in _wrapper
    return bound_func(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/Library/Python/2.7/site-packages/django/utils/decorators.py", line 63, in bound_func
    return func.__get__(self, type(self))(*args2, **kwargs2)
  File "/Library/Python/2.7/site-packages/django/contrib/admin/options.py", line 1408, in changeform_view
    return self._changeform_view(request, object_id, form_url, extra_context)
  File "/Library/Python/2.7/site-packages/django/contrib/admin/options.py", line 1440, in _changeform_view
    if form.is_valid():
  File "/Library/Python/2.7/site-packages/django/forms/forms.py", line 183, in is_valid
    return self.is_bound and not self.errors
  File "/Library/Python/2.7/site-packages/django/forms/forms.py", line 175, in errors
    self.full_clean()
  File "/Library/Python/2.7/site-packages/django/forms/forms.py", line 384, in full_clean
    self._clean_fields()
  File "/Library/Python/2.7/site-packages/django/forms/forms.py", line 402, in _clean_fields
    value = field.clean(value)
  File "/Library/Python/2.7/site-packages/django/contrib/gis/forms/fields.py", line 75, in clean
    geom.transform(self.srid)
  File "/Library/Python/2.7/site-packages/django/contrib/gis/geos/geometry.py", line 527, in transform
    g.transform(ct)
  File "/Library/Python/2.7/site-packages/django/contrib/gis/gdal/geometries.py", line 408, in transform
    capi.geom_transform_to(self.ptr, sr.ptr)
  File "/Library/Python/2.7/site-packages/django/contrib/gis/gdal/prototypes/errcheck.py", line 119, in check_errcode
    check_err(result, cpl=cpl)
  File "/Library/Python/2.7/site-packages/django/contrib/gis/gdal/error.py", line 73, in check_err
    raise e(msg)
GDALException: OGR failure.

编辑:为位置添加了我的 models.py 和 admin.py

模型.py:

from __future__ import unicode_literals
from django.contrib.gis.db import models
from django.contrib.gis.geos import Point
from django.core.exceptions import ObjectDoesNotExist
from django.conf import settings
from . import utils

COUNTRIES=((0,'UK'),(1,'USA'),(2,'CA'),(3,'AUS'),(4,'JP'),(5,'FR'))
class Location(models.Model):
    name=models.CharField(max_length=120,verbose_name='House name/number',blank=True)
    first_addr=models.CharField(max_length=45,verbose_name='Address line 1',blank=False)
    second_addr=models.CharField(max_length=45,verbose_name='Address line 2',blank=True)
    town=models.CharField(max_length=45,verbose_name='Town/City',blank=False)
    state=models.CharField(max_length=45,verbose_name='State/Province',blank=False)
    zip_code=models.CharField(max_length=12,verbose_name='Postal/Zip Code',blank=False)
    country=models.IntegerField(verbose_name='Country',blank=False,null=False,choices=COUNTRIES)
    point=models.PointField(default='POINT (0 0)',srid=4326)
    dt_created=models.DateTimeField(auto_now_add=True)
    dt_updated=models.DateTimeField(auto_now=True)
    class Meta:
        verbose_name = 'Location'
    def __unicode__(self):
        return self.name
    def __str__(self):
        return self.name
    @property
    def longitude(self):
        return self.point[0]
    @property
    def latitude(self):
        return self.point[1]

管理.py:

from __future__ import unicode_literals
from django.contrib.gis import admin
from django.contrib.gis.geos import GEOSGeometry
from django.contrib.auth.admin import UserAdmin
from maps.models import *

class LocationAdmin(admin.OSMGeoAdmin):
    model = Location
    list_display = ['name','first_addr','second_addr','town','state','zip_code','country','longitude','latitude','dt_created','dt_updated']
    search_fields = ['first_addr','second_addr','town','state','zip_code']

admin.site.register(Location,LocationAdmin)
import os
if os.name == 'nt':
    import platform
    OSGEO4W = r"C:\OSGeo4W"
    if '64' in platform.architecture()[0]:
        OSGEO4W += "64"
    assert os.path.isdir(OSGEO4W), "Directory does not exist: " + OSGEO4W
    os.environ['OSGEO4W_ROOT'] = OSGEO4W
    os.environ['GDAL_DATA'] = "C:\Program Files\GDAL\gdal-data" 
    os.environ['PROJ_LIB'] = OSGEO4W + r"\share\proj"
    GDAL_LIBRARY_PATH = r'C:\OSGeo4W64\bin\gdal204'
    os.environ['PATH'] = OSGEO4W + r"\bin;" + os.environ['PATH']

将这些行添加到 setting.py 中对我有用。 但是,当您添加 GDAL_LIBRARY_PATH 时,请检查您拥有的 gdal 库是什么,并添加 gdal 库之一,例如“gdal204”

如果您在 setting.py 文件的顶部添加以下命令,将修复此错误

    if os.name == 'nt':
    import platform
    OSGEO4W = r"C:\OSGeo4W"
    if '64' in platform.architecture()[0]:
        OSGEO4W += "64"
    assert os.path.isdir(OSGEO4W), "Directory does not exist: " + OSGEO4W
    os.environ['OSGEO4W_ROOT'] = OSGEO4W
    os.environ['GDAL_DATA'] = OSGEO4W + r"\share\gdal"
    os.environ['PROJ_LIB'] = OSGEO4W + r"\share\proj"
    os.environ['PATH'] = OSGEO4W + r"\bin;" + os.environ['PATH']

如果您使用的是 Windows 操作系统和一些设置文件,请使用以下行:

GDAL_LIBRARY_PATH = r'C:\\OSGeo4W64\\bin\\gdal300'

我将它用于我的基于 Django 的应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM