[英]Geodjango Import Shapefile with LayerMapping and 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.