Link to home
Start Free TrialLog in
Avatar of cshore12
cshore12

asked on

Can't import GEOMETRY-BACKEND geos package in geoDjango

When trying to create a geospatially-enabled table using the python sqlall command, I'm receiving problem that is apparently fairly common:


  File "c:\Python26\lib\site-packages\django\contrib\gis\db\backends\postgis\ope
rations.py", line 8, in <module>
    from django.contrib.gis.geometry.backend import Geometry
  File "c:\Python26\lib\site-packages\django\contrib\gis\geometry\backend\__init
__.py", line 14, in <module>
    '"%s".' % geom_backend)
django.core.exceptions.ImproperlyConfigured: Could not import user-defined GEOME
TRY_BACKEND "geos".

Please note that I'm working in a Windows XP environment.

From what I've read, the most common reason for this issue is the failure of the system to recognize the GEOS library path, which apparently ends at libgeos_c.so.  I've searched for this file on my system, and the closest I could find was libgeos_c-1.dll.  

The available documentation indicates how to correct this for Linux and Unix systems, but not for Windows.  I think I may have to set the GEOS_LIBRARY_PATH system variable, or maybe reconfigure GEOS, but I'm not sure how.

Here's my settings file:

                                                       ************************

# Django settings for osp1a project.

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    # ('Your Name', 'your_email@domain.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'rw_vector',                      # Or path to database file if using sqlite3.
        'USER': 'cshore11',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# On Unix systems, a value of None will cause Django to use the same
# timezone as the operating system.
# If running in a Windows environment this must be set to the same as your
# system time zone.
TIME_ZONE = 'America/Chicago'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale
USE_L10N = True

# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrence.com/"
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = ''

# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
# trailing slash.
# Examples: "http://foo.com/media/", "/media/".
ADMIN_MEDIA_PREFIX = '/media/'

# Make this unique, and don't share it with anybody.
SECRET_KEY = '_$82wxh2pq)vn@(esm7h2sz$xlilwsgkyb660l#1yq2bm726&u'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    #'django.contrib.messages.middleware.MessageMiddleware',
)

ROOT_URLCONF = 'osp1a.urls'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    'django.contrib.gis',
    'osp1a.osp1a_app',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)                      
                                                        ************************

and the models file:

                                                         ************************

from django.contrib.gis.db import models

# Create your models here.

class Read_Write_Vector(models.Model):
    id = models.IntegerField('ID')
    cvr = models.CharField('COVER', max_length=20)

    objects = models.GeoManager()

# Returns the string representation of the model.
    def __unicode__(self):
        return self.name

                                                         ************************

 
Avatar of mish33
mish33
Flag of United States of America image

Python 'DLL' should be *.pyd and named like the module imported, ie. geos.pyd.
Avatar of cshore12
cshore12

ASKER

mish33,

Can you please elaborate?  I searched for *g*.pyd on my hard drive, and came up empty.  Also, the find_library() utility came up empty.  All this makes me think that GEOS has not been configured correctly.
when you do 'import geos'
there can be 3 options:
(A) file geos.py
(B) dir geos/ having __init__.py inside
(C) file geos.pyd (which is C-compiled extension module)
somewhere in python path (accessible as sys.path. Try import sys; print sys.path)

So either you don't have geos module or it's not in your path.
It's all pretty confusing.  I downloaded and installed from OSGeo4W.  Yet when I type 'import geos', the reply is 'No module named geos'.

My directory structure contains about half a dozen 'geos' folder and the compiled geos.pyc in \contrib\gis\geometry\backend.  Is this the path I need to include?  If so, do I also need to define the GEOS_LIBRARY_PATH system variable?
Try to reinstall osgeo4w/pkg-geos. This package is not user configurable and any problems should be reported as bugs to FrankWarmerdam (see http://trac.osgeo.org/osgeo4w/wiki/pkg-geos)
The reinstall did nothing.  I provided Frank with a copy of the current transcript, and will report back to you once I hear something.
ASKER CERTIFIED SOLUTION
Avatar of cshore12
cshore12

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
mish33 tried to explain it, but his responses were too cryptic.