I have been struggling now for about two days to get a GeoDjango/PostGIS project started. Sorry to say, I am fairly new to both Django and Linux, but I will do my best to explain what I have tried thus far.
First, my assumption: This self contained bitnami djangostack package already has everything internally to do a basic Geodjango/PostGIS project (I have looked through directories and see them all, but maybe they still must be installed?? hmm). Please let me know if this is incorrect.
I am following https://docs.djangoproject.com/en/1.4/ref/contrib/gis/tutorial/ My steps:
-Installed DjangoStack on Ubunutu 12.4 via the GUI, with all 3 DBs, no initial project set up
-Open up and exclusively work from “use_djangostack” terminal
-followed the link for “spatial database template” to https://docs.djangoproject.com/en/1.4/ref/contrib/gis/install/#spatialdb-template, followed directions there:
-was
NOT able to execute the command “$ sudo su – postgres”
(“unknown id”) to switch to being a “privileged database user,”
BUT I could still (mostly) successfully execute:
$
POSTGIS_SQL_PATH=/home/jstratman/djangostack-1.4-1/postgresql/share/contrib/postgis- 2.0
$ createdb -E UTF8 template_postgis
$ createlang -d template_postgis plpgsql # Adding PLPGSQL language support.(^this command was unsuccessful, stating it already had this language support)
$ psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';"
$ psql -d template_postgis -f $POSTGIS_SQL_PATH/postgis.sql
$ psql -d template_postgis -f $POSTGIS_SQL_PATH/spatial_ref_sys.sql
$ psql -d template_postgis -c "GRANT ALL ON geometry_columns TO PUBLIC;"
$ psql -d template_postgis -c "GRANT ALL ON geography_columns TO PUBLIC;"
$ psql -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"
-Moved back to main tutorial page, executed:
$ createdb -T template_postgis mysitedatabase
$ sudo su – postgres (tried again, NOT SUCCESSFUL! “unknown id”)
$ createuser --createdb mysiteuser
$ django-admin.py startproject mysite (I stayed in the main directory, did not create this in “Apps>Django>Django_Projects”)
$ cd mysite
$ python manage.py startapp world
-I then set up the settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'mysitedatabase',
'USER': 'mysiteuser',}}
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.gis',
'world')
-I did try adding 'PASSWORD' to the settings.py on my second try but that made no difference once I got to the syncdb (see below)
-Installed world borders shp files in world/data
-Used both ogrinfo commands and got proper results
-exactly copied and pasted into world/models.py from the “Defining a Geographic Model” section, to include the very top line of “from django.contrib.gis.db import models“
The Error:
-Attempted to run “$ python manage.py sqlall world” but got:
----------------------------------------------------------------------
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
utility.execute()
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/core/management/__init__.py", line 261, in fetch_command
klass = load_command_class(app_name, subcommand)
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/core/management/__init__.py", line 69, in load_command_class
module = import_module('%s.management.commands.%s' % (app_name, name))
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/core/management/commands/sqlall.py", line 4, in <module>
from django.core.management.sql import sql_all
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/core/management/sql.py", line 6, in <module>
from django.db import models
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/db/__init__.py", line 40, in <module>
backend = load_backend(connection.settings_dict['ENGINE'])
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/db/__init__.py", line 34, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/db/utils.py", line 92, in __getitem__
backend = load_backend(db['ENGINE'])
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/db/utils.py", line 24, in load_backend
return import_module('.base', backend_name)
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/contrib/gis/db/backends/postgis/base.py", line 5, in <module>
from django.contrib.gis.db.backends.postgis.operations import PostGISOperations
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/site-packages/django/contrib/gis/db/backends/postgis/operations.py", line 8, in <module>
from django.contrib.gis.geometry.backend import Geometry
File "/home/jstratman/djangostack-1.4-1/apps/django/lib/python2.7/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 GEOMETRY_BACKEND "geos".
----------------------------------------------------------------------
Sorry this is so long, but I wanted full disclosure to perhaps highlight simple, new user errors. Any ideas as to why it can't utilize the geos backend or whatever the problem is?
Final note: thanks to Bitnami folks for including PostGIS, I am excited to dive into the django world with GIS and I am pretty confident that these problems are of my own creation due to lack of linux/django experience! If only I could get past this first step and start developing...