12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193 |
- .. _ref-gis-install:
- ======================
- GeoDjango Installation
- ======================
- Overview
- ========
- In general, GeoDjango installation requires:
- 1. :ref:`python24` and :ref:`django`
- 2. :ref:`spatial_database`
- 3. :ref:`geospatial_libs`
- Details for each of the requirements and installation instructions
- are provided in the sections below. In addition, platform-specific
- instructions are available for:
- * :ref:`macosx`
- * :ref:`ubuntudebian`
- * :ref:`windows`
- .. admonition:: Use the Source
- Because GeoDjango takes advantage of the latest in the open source geospatial
- software technology, recent versions of the libraries are necessary.
- If binary packages aren't available for your platform,
- :ref:`installation from source <build_from_source>`
- may be required. When compiling the libraries from source, please follow the
- directions closely, especially if you're a beginner.
- Requirements
- ============
- .. _python24:
- Python 2.4+
- -----------
- Because of heavy use of the decorator syntax, Python 2.4 is minimum
- version supported by GeoDjango. Python 2.5+ is recommended because the
- `ctypes`__ module comes included; otherwise, 2.4 users will need to
- `download and install ctypes`__.
- __ http://docs.python.org/lib/module-ctypes.html
- __ http://sourceforge.net/projects/ctypes/files/
- .. _django:
- Django
- ------
- Because GeoDjango is included with Django, please refer to Django's
- :ref:`installation instructions <intro-install>` for details on how to install.
- .. _spatial_database:
- Spatial Database
- ----------------
- PostgreSQL (with PostGIS), MySQL, Oracle, and SQLite (with SpatiaLite) are
- the spatial databases currently supported.
- .. note::
- PostGIS is recommended, because it is the most mature and feature-rich
- open source spatial database.
- The geospatial libraries required for a GeoDjango installation depends
- on the spatial database used. The following lists the library requirements,
- supported versions, and any notes for each of the supported database backends:
- ================== ============================== ================== ==========================================================
- Database Library Requirements Supported Versions Notes
- ================== ============================== ================== ==========================================================
- PostgreSQL GEOS, PROJ.4, PostGIS 8.1+ Requires PostGIS.
- MySQL GEOS 5.x Not OGC-compliant; limited functionality.
- Oracle GEOS 10.2, 11 XE not supported; not tested with 9.
- SQLite GEOS, GDAL, PROJ.4, SpatiaLite 3.6.+ Requires SpatiaLite 2.3+, pysqlite2 2.5+, and Django 1.1.
- ================== ============================== ================== ==========================================================
- .. _geospatial_libs:
- Geospatial Libraries
- --------------------
- GeoDjango uses and/or provides interfaces for the the following open source
- geospatial libraries:
- ======================== ==================================== ================================ ==========================
- Program Description Required Supported Versions
- ======================== ==================================== ================================ ==========================
- :ref:`GEOS <ref-geos>` Geometry Engine Open Source Yes 3.2, 3.1, 3.0
- `PROJ.4`_ Cartographic Projections library Yes (PostgreSQL and SQLite only) 4.7, 4.6, 4.5, 4.4
- :ref:`GDAL <ref-gdal>` Geospatial Data Abstraction Library No (but, required for SQLite) 1.7, 1.6, 1.5, 1.4
- :ref:`GeoIP <ref-geoip>` IP-based geolocation library No 1.4
- `PostGIS`__ Spatial extensions for PostgreSQL Yes (PostgreSQL only) 1.5, 1.4, 1.3
- `SpatiaLite`__ Spatial extensions for SQLite Yes (SQLite only) 2.4, 2.3
- ======================== ==================================== ================================ ==========================
- .. admonition:: Install GDAL
- While :ref:`gdalbuild` is technically not required, it is *recommended*.
- Some features of GeoDjango (including the :ref:`ref-layermapping` and the geographic
- admin) depend on its functionality.
- .. note::
- The GeoDjango interfaces to GEOS, GDAL, and GeoIP may be used
- independently of Django. In other words, no database or settings file
- required -- just import them as normal from :mod:`django.contrib.gis`.
- .. _PROJ.4: http://trac.osgeo.org/proj/
- __ http://postgis.refractions.net/
- __ http://www.gaia-gis.it/spatialite/index.html
- .. _build_from_source:
- Building from Source
- ====================
- When installing from source on UNIX and GNU/Linux systems, please follow
- the installation instructions carefully, and install the libraries in the
- given order. If using MySQL or Oracle as the spatial database, only GEOS
- is required.
- .. note::
- On Linux platforms, it may be necessarry to run the ``ldconfig``
- command after installing each library. For example::
- $ sudo make install
- $ sudo ldconfig
- .. note::
- OS X users are required to install `Apple Developer Tools`_ in order
- to compile software from source. This is typically included on your
- OS X installation DVDs.
- .. _Apple Developer Tools: http://developer.apple.com/tools/xcode/
- .. _geosbuild:
- GEOS
- ----
- GEOS is a C++ library for performing geometric operations, and is the default
- internal geometry representation used by GeoDjango (it's behind the "lazy"
- geometries). Specifically, the C API library is called (e.g., ``libgeos_c.so``)
- directly from Python using ctypes.
- First, download GEOS 3.2 from the refractions website and untar the source
- archive::
- $ wget http://download.osgeo.org/geos/geos-3.2.1.tar.bz2
- $ tar xjf geos-3.2.1.tar.bz2
- Next, change into the directory where GEOS was unpacked, run the configure
- script, compile, and install::
- $ cd geos-3.2.1
- $ ./configure
- $ make
- $ sudo make install
- $ cd ..
- Troubleshooting
- ^^^^^^^^^^^^^^^
- Can't find GEOS Library
- ~~~~~~~~~~~~~~~~~~~~~~~
- When GeoDjango can't find GEOS, this error is raised::
- ImportError: Could not find the GEOS library (tried "geos_c"). Try setting GEOS_LIBRARY_PATH in your settings.
- The most common solution is to properly configure your :ref:`libsettings` *or* set
- :ref:`geoslibrarypath` in your settings.
- If using a binary package of GEOS (e.g., on Ubuntu 8.10), you may need to :ref:`binutils`.
- .. _geoslibrarypath:
- ``GEOS_LIBRARY_PATH``
- ~~~~~~~~~~~~~~~~~~~~~
- If your GEOS library is in a non-standard location, or you don't want to
- modify the system's library path then the :setting:`GEOS_LIBRARY_PATH` setting
- may be added to your Django settings file with the full path to the GEOS
- C library. For example::
- GEOS_LIBRARY_PATH = '/home/bob/local/lib/libgeos_c.so'
- .. note::
- The setting must be the *full* path to the **C** shared library; in
- other words you want to use ``libgeos_c.so``, not ``libgeos.so``.
- .. _proj4:
- PROJ.4
- ------
- `PROJ.4`_ is a library for converting geospatial data to different coordinate
- reference systems.
- First, download the PROJ.4 source code and datum shifting files [#]_::
- $ wget http://download.osgeo.org/proj/proj-4.7.0.tar.gz
- $ wget http://download.osgeo.org/proj/proj-datumgrid-1.5.zip
- Next, untar the source code archive, and extract the datum shifting files in the
- ``nad`` subdirectory. This must be done *prior* to configuration::
- $ tar xzf proj-4.7.0.tar.gz
- $ cd proj-4.7.0/nad
- $ unzip ../../proj-datumgrid-1.5.zip
- $ cd ..
- Finally, configure, make and install PROJ.4::
- $ ./configure
- $ make
- $ sudo make install
- $ cd ..
- .. _postgis:
- PostGIS
- -------
- `PostGIS`__ adds geographic object support to PostgreSQL, turning it
- into a spatial database. :ref:`geosbuild` and :ref:`proj4` should be
- installed prior to building PostGIS.
- .. note::
- The `psycopg2`_ module is required for use as the database adaptor
- when using GeoDjango with PostGIS.
- .. _psycopg2: http://initd.org/projects/psycopg2
- First download the source archive, and extract::
- $ wget http://postgis.refractions.net/download/postgis-1.5.1.tar.gz
- $ tar xzf postgis-1.5.1.tar.gz
- $ cd postgis-1.5.1
- Next, configure, make and install PostGIS::
- $ ./configure
- Finally, make and install::
- $ make
- $ sudo make install
- $ cd ..
- .. note::
- GeoDjango does not automatically create a spatial database. Please
- consult the section on :ref:`spatialdb_template` for more information.
- __ http://postgis.refractions.net/
- .. _gdalbuild:
- GDAL
- ----
- `GDAL`__ is an excellent open source geospatial library that has support for
- reading most vector and raster spatial data formats. Currently, GeoDjango only
- supports :ref:`GDAL's vector data <ref-gdal>` capabilities [#]_.
- :ref:`geosbuild` and :ref:`proj4` should be installed prior to building GDAL.
- First download the latest GDAL release version and untar the archive::
- $ wget http://download.osgeo.org/gdal/gdal-1.7.1.tar.gz
- $ tar xzf gdal-1.7.1.tar.gz
- $ cd gdal-1.7.1
- Configure, make and install::
- $ ./configure
- $ make # Go get some coffee, this takes a while.
- $ sudo make install
- $ cd ..
- .. note::
- Because GeoDjango has it's own Python interface, the preceding instructions
- do not build GDAL's own Python bindings. The bindings may be built by
- adding the ``--with-python`` flag when running ``configure``. See
- `GDAL/OGR In Python`__ for more information on GDAL's bindings.
- If you have any problems, please see the troubleshooting section below for
- suggestions and solutions.
- __ http://trac.osgeo.org/gdal/
- __ http://trac.osgeo.org/gdal/wiki/GdalOgrInPython
- .. _gdaltrouble:
- Troubleshooting
- ^^^^^^^^^^^^^^^
- Can't find GDAL Library
- ~~~~~~~~~~~~~~~~~~~~~~~
- When GeoDjango can't find the GDAL library, the ``HAS_GDAL`` flag
- will be false::
- >>> from django.contrib.gis import gdal
- >>> gdal.HAS_GDAL
- False
- The solution is to properly configure your :ref:`libsettings` *or* set
- :ref:`gdallibrarypath` in your settings.
- .. _gdallibrarypath:
- ``GDAL_LIBRARY_PATH``
- ~~~~~~~~~~~~~~~~~~~~~
- If your GDAL library is in a non-standard location, or you don't want to
- modify the system's library path then the :setting:`GDAL_LIBRARY_PATH`
- setting may be added to your Django settings file with the full path to
- the GDAL library. For example::
- GDAL_LIBRARY_PATH = '/home/sue/local/lib/libgdal.so'
- .. _gdaldata:
- Can't find GDAL data files (``GDAL_DATA``)
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- When installed from source, GDAL versions 1.5.1 and below have an autoconf bug
- that places data in the wrong location. [#]_ This can lead to error messages
- like this::
- ERROR 4: Unable to open EPSG support file gcs.csv.
- ...
- OGRException: OGR failure.
- The solution is to set the ``GDAL_DATA`` environment variable to the location of the
- GDAL data files before invoking Python (typically ``/usr/local/share``; use
- ``gdal-config --datadir`` to find out). For example::
- $ export GDAL_DATA=`gdal-config --datadir`
- $ python manage.py shell
- If using Apache, you may need to add this environment variable to your configuration
- file::
- SetEnv GDAL_DATA /usr/local/share
- .. _spatialite:
- SpatiaLite
- ----------
- .. versionadded:: 1.1
- .. note::
- Mac OS X users should follow the instructions in the :ref:`kyngchaos` section,
- as it is much easier than building from source.
- `SpatiaLite`__ adds spatial support to SQLite, turning it into a full-featured
- spatial database. Because SpatiaLite has special requirements, it typically
- requires SQLite and pysqlite2 (the Python SQLite DB-API adaptor) to be built from
- source. :ref:`geosbuild` and :ref:`proj4` should be installed prior to building
- SpatiaLite.
- After installation is complete, don't forget to read the post-installation
- docs on :ref:`create_spatialite_db`.
- __ http://www.gaia-gis.it/spatialite/index.html
- .. _sqlite:
- SQLite
- ^^^^^^
- Typically, SQLite packages are not compiled to include the `R*Tree module`__ --
- thus it must be compiled from source. First download the latest amalgamation
- source archive from the `SQLite download page`__, and extract::
- $ wget http://www.sqlite.org/sqlite-amalgamation-3.6.22.tar.gz
- $ tar xzf sqlite-amalgamation-3.6.22.tar.gz
- $ cd sqlite-3.6.22
- Next, run the ``configure`` script -- however the ``CFLAGS`` environment variable
- needs to be customized so that SQLite knows to build the R*Tree module::
- $ CFLAGS="-DSQLITE_ENABLE_RTREE=1" ./configure
- $ make
- $ sudo make install
- $ cd ..
- .. note::
- If using Ubuntu, installing a newer SQLite from source can be very difficult
- because it links to the existing ``libsqlite3.so`` in ``/usr/lib`` which
- many other packages depend on. Unfortunately, the best solution at this time
- is to overwrite the existing library by adding ``--prefix=/usr`` to the
- ``configure`` command.
- __ http://www.sqlite.org/rtree.html
- __ http://www.sqlite.org/download.html
- .. _spatialitebuild :
- SpatiaLite Library (``libspatialite``) and Tools (``spatialite``)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- After SQLite has been built with the R*Tree module enabled, get the latest
- SpatiaLite library source and tools bundle from the `download page`__::
- $ wget http://www.gaia-gis.it/spatialite/libspatialite-amalgamation-2.3.1.tar.gz
- $ wget http://www.gaia-gis.it/spatialite/spatialite-tools-2.3.1.tar.gz
- $ tar xzf libspatialite-amalgamation-2.3.1.tar.gz
- $ tar xzf spatialite-tools-2.3.1.tar.gz
- Prior to attempting to build, please read the important notes below to see if
- customization of the ``configure`` command is necessary. If not, then run the
- ``configure`` script, make, and install for the SpatiaLite library::
- $ cd libspatialite-amalgamation-2.3.1
- $ ./configure # May need to modified, see notes below.
- $ make
- $ sudo make install
- $ cd ..
- Finally, do the same for the SpatiaLite tools::
- $ cd spatialite-tools-2.3.1
- $ ./configure # May need to modified, see notes below.
- $ make
- $ sudo make install
- $ cd ..
- .. note::
- If you've installed GEOS and PROJ.4 from binary packages, you will have to specify
- their paths when running the ``configure`` scripts for *both* the library and the
- tools (the configure scripts look, by default, in ``/usr/local``). For example,
- on Debian/Ubuntu distributions that have GEOS and PROJ.4 packages, the command would be::
-
- $ ./configure --with-proj-include=/usr/include --with-proj-lib=/usr/lib --with-geos-include=/usr/include --with-geos-lib=/usr/lib
- .. note::
- For Mac OS X users building from source, the SpatiaLite library *and* tools
- need to be linked into the existing ``iconv`` library. While this happens
- automatically on Linux, the ``configure`` scripts need to know about the
- specific location on Mac OS X (via modification of the ``CFLAGS`` and
- ``LDFLAGS`` environment variables prior to configuration)::
- $ CFLAGS=-I/usr/include LDFLAGS="-L/usr/lib -liconv" ./configure
- __ http://www.gaia-gis.it/spatialite/sources.html
- .. _pysqlite2:
- pysqlite2
- ^^^^^^^^^
- Because SpatiaLite must be loaded as an external extension, it requires the
- ``enable_load_extension`` method, which is only available in versions 2.5+.
- Thus, download pysqlite2 2.6, and untar::
-
- $ wget http://pysqlite.googlecode.com/files/pysqlite-2.6.0.tar.gz
- $ tar xzf pysqlite-2.6.0.tar.gz
- $ cd pysqlite-2.6.0
- Next, use a text editor (e.g., ``emacs`` or ``vi``) to edit the ``setup.cfg`` file
- to look like the following::
- [build_ext]
- #define=
- include_dirs=/usr/local/include
- library_dirs=/usr/local/lib
- libraries=sqlite3
- #define=SQLITE_OMIT_LOAD_EXTENSION
- .. note::
- The important thing here is to make sure you comment out the the
- ``define=SQLITE_OMIT_LOAD_EXTENSION`` flag and that the ``include_dirs``
- and ``library_dirs`` settings are uncommented and set to the appropriate
- path if the SQLite header files and libraries are not in ``/usr/include``
- and ``/usr/lib``, respectively.
- After modifying ``setup.cfg`` appropriately, then run the ``setup.py`` script
- to build and install::
- $ sudo python setup.py install
- Post-Installation
- =================
- .. _spatialdb_template:
- Creating a Spatial Database Template for PostGIS
- ------------------------------------------------
- Creating a spatial database with PostGIS is different than normal because
- additional SQL must be loaded to enable spatial functionality. Because of
- the steps in this process, it's better to create a database template that
- can be reused later.
- First, you need to be able to execute the commands as a privileged database
- user. For example, you can use the following to become the ``postgres`` user::
- $ sudo su - postgres
- .. note::
- The location *and* name of the PostGIS SQL files (e.g., from
- ``POSTGIS_SQL_PATH`` below) depends on the version of PostGIS.
- PostGIS versions 1.3 and below use ``<sharedir>/contrib/lwpostgis.sql``, whereas
- versions 1.4 and 1.5 use ``<sharedir>/contrib/postgis-1.4/postgis.sql`` and
- ``<sharedir>/contrib/postgis-1.5/postgis.sql``, respectively.
- The example below assumes PostGIS 1.5, thus you may need to modify
- ``POSTGIS_SQL_PATH`` and the name of the SQL file for the specific
- version of PostGIS you are using.
- Once you're a database super user, then you may execute the following commands
- to create a PostGIS spatial database template. If running Ubuntu :ref:`ibex`
- or Debian :ref:`lenny`, please refer to their specific documentation for
- modifications to these commands::
- $ POSTGIS_SQL_PATH=`pg_config --sharedir`/contrib/postgis-1.5
- # Creating the template spatial database.
- $ createdb -E UTF8 template_postgis
- $ createlang -d template_postgis plpgsql # Adding PLPGSQL language support.
- # Allows non-superusers the ability to create from this template
- $ psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';"
- # Loading the PostGIS SQL routines
- $ psql -d template_postgis -f $POSTGIS_SQL_PATH/postgis.sql
- $ psql -d template_postgis -f $POSTGIS_SQL_PATH/spatial_ref_sys.sql
- # Enabling users to alter spatial tables.
- $ 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;"
- These commands may be placed in a shell script for later use; for convenience
- the following scripts are available:
- =============== ==========================================
- PostGIS Version Shell Script
- =============== ==========================================
- 1.3 `create_template_postgis-1.3.sh`_
- 1.4 `create_template_postgis-1.4.sh`_
- 1.5 `create_template_postgis-1.5.sh`_
- =============== ==========================================
- Afterwards, you may create a spatial database by simply specifying
- ``template_postgis`` as the template to use (via the ``-T`` option)::
- $ createdb -T template_postgis <db name>
- .. note::
- While the ``createdb`` command does not require database super-user privileges,
- it must be executed by a database user that has permissions to create databases.
- You can create such a user with the following command::
- $ createuser --createdb <user>
- .. _create_template_postgis-1.3.sh: http://geodjango.org/docs/create_template_postgis-1.3.sh
- .. _create_template_postgis-1.4.sh: http://geodjango.org/docs/create_template_postgis-1.4.sh
- .. _create_template_postgis-1.5.sh: http://geodjango.org/docs/create_template_postgis-1.5.sh
- .. _create_template_postgis-debian.sh: http://geodjango.org/docs/create_template_postgis-debian.sh
- .. _create_spatialite_db:
- Creating a Spatial Database for SpatiaLite
- -------------------------------------------
- After the SpatiaLite library and tools have been installed, it is now possible
- to create spatial database for use with GeoDjango. In order to do this, download
- the spatial database initialization SQL from the `SpatiaLite Resources`__ page::
- $ wget http://www.gaia-gis.it/spatialite/init_spatialite-2.3.sql.gz
- $ gunzip init_spatialite-2.3.sql.gz
- Now, the ``spatialite`` command can be used to initialize a spatial database::
- $ spatialite geodjango.db < init_spatialite-2.3.sql
- .. note::
- The parameter ``geodjango.db`` is the *filename* of the SQLite database
- you want to use. Use the same in the :setting:`DATABASE_NAME`
- inside your ``settings.py``.
- __ http://www.gaia-gis.it/spatialite/resources.html
- Add ``django.contrib.gis`` to ``INSTALLED_APPS``
- ------------------------------------------------
- Like other Django contrib applications, you will *only* need to add
- :mod:`django.contrib.gis` to :setting:`INSTALLED_APPS` in your settings.
- This is the so that ``gis`` templates can be located -- if not done, then
- features such as the geographic admin or KML sitemaps will not function properly.
- .. _addgoogleprojection:
- Add Google Projection to ``spatial_ref_sys`` table
- --------------------------------------------------
- .. versionchanged:: 1.2
- .. note::
- If running PostGIS 1.4 and above, the entry is already included in the
- default ``spatial_ref_sys`` table. You can skip this step.
- In order to conduct database transformations to the so-called "Google"
- projection (a spherical mercator projection used by Google Maps),
- an entry must be added to your spatial database's ``spatial_ref_sys`` table.
- Invoke the Django shell from your project and execute the
- ``add_srs_entry`` function::
- $ python manage shell
- >>> from django.contrib.gis.utils import add_srs_entry
- >>> add_srs_entry(900913)
- .. note::
- In Django 1.1 the name of this function is ``add_postgis_srs``.
- This adds an entry for the 900913 SRID to the ``spatial_ref_sys`` (or equivalent)
- table, making it possible for the spatial database to transform coordinates in
- this projection. You only need to execute this command *once* per spatial database.
- Troubleshooting
- ===============
- If you can't find the solution to your problem here then participate in the
- community! You can:
- * Join the ``#geodjango`` IRC channel on FreeNode (may be accessed on the
- web via `Mibbit`__). Please be patient and polite -- while you may not
- get an immediate response, someone will attempt to answer your question
- as soon as they see it.
- * Ask your question on the `GeoDjango`__ mailing list.
- * File a ticket on the `Django trac`__ if you think there's a bug. Make
- sure to provide a complete description of the problem, versions used,
- and specify the component as "GIS".
- __ http://www.mibbit.com/?server=irc.freenode.net&channel=%23geodjango
- __ http://groups.google.com/group/geodjango
- __ http://code.djangoproject.com/simpleticket
- .. _libsettings:
- Library Environment Settings
- ----------------------------
- By far, the most common problem when installing GeoDjango is that the
- external shared libraries (e.g., for GEOS and GDAL) cannot be located. [#]_
- Typically, the cause of this problem is that the operating system isn't aware
- of the directory where the libraries built from source were installed.
- In general, the library path may be set on a per-user basis by setting
- an environment variable, or by configuring the library path for the entire
- system.
- ``LD_LIBRARY_PATH`` environment variable
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- A user may set this environment variable to customize the library paths
- they want to use. The typical library directory for software
- built from source is ``/usr/local/lib``. Thus, ``/usr/local/lib`` needs
- to be included in the ``LD_LIBRARY_PATH`` variable. For example, the user
- could place the following in their bash profile::
- export LD_LIBRARY_PATH=/usr/local/lib
- Setting System Library Path
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- On GNU/Linux systems, there is typically a file in ``/etc/ld.so.conf``, which may include
- additional paths from files in another directory, such as ``/etc/ld.so.conf.d``.
- As the root user, add the custom library path (like ``/usr/local/lib``) on a
- new line in ``ld.so.conf``. This is *one* example of how to do so::
- $ sudo echo /usr/local/lib >> /etc/ld.so.conf
- $ sudo ldconfig
- For OpenSolaris users, the system library path may be modified using the
- ``crle`` utility. Run ``crle`` with no options to see the current configuration
- and use ``crle -l`` to set with the new library path. Be *very* careful when
- modifying the system library path::
- # crle -l $OLD_PATH:/usr/local/lib
- .. _binutils:
- Install ``binutils``
- ^^^^^^^^^^^^^^^^^^^^
- GeoDjango uses the ``find_library`` function (from the ``ctypes.util`` Python
- module) to discover libraries. The ``find_library`` routine uses a program
- called ``objdump`` (part of the ``binutils`` package) to verify a shared
- library on GNU/Linux systems. Thus, if ``binutils`` is not installed on your
- Linux system then Python's ctypes may not be able to find your library even if
- your library path is set correctly and geospatial libraries were built perfectly.
- The ``binutils`` package may be installed on Debian and Ubuntu systems using the
- following command::
- $ sudo apt-get install binutils
- Similarly, on Red Hat and CentOS systems::
- $ sudo yum install binutils
- Platform Specific Instructions
- ==============================
- .. _macosx:
- Mac OS X
- --------
- Because of the variety of packaging systems available for OS X, users have
- several different options for installing GeoDjango. These options are:
- * :ref:`kyngchaos`
- * :ref:`fink`
- * :ref:`macports`
- * :ref:`build_from_source`
- .. note::
- Currently, the easiest and recommended approach for installing GeoDjango
- on OS X is to use the KyngChaos packages.
- This section also includes instructions for installing an upgraded version
- of :ref:`macosx_python` from packages provided by the Python Software
- Foundation, however, this is not required.
- .. _macosx_python:
- Python
- ^^^^^^
- Although OS X comes with Python installed, users can use framework
- installers (`2.5`__ and `2.6`__ are available) provided by
- the Python Software Foundation. An advantage to using the installer is
- that OS X's Python will remain "pristine" for internal operating system
- use.
- __ http://python.org/ftp/python/2.5.4/python-2.5.4-macosx.dmg
- __ http://python.org/ftp/python/2.6.2/python-2.6.2-macosx2009-04-16.dmg
- .. note::
-
- You will need to modify the ``PATH`` environment variable in your
- ``.profile`` file so that the new version of Python is used when
- ``python`` is entered at the command-line::
- export PATH=/Library/Frameworks/Python.framework/Versions/Current/bin:$PATH
- .. _kyngchaos:
- KyngChaos Packages
- ^^^^^^^^^^^^^^^^^^
- William Kyngesburye provides a number of `geospatial library binary packages`__
- that make it simple to get GeoDjango installed on OS X without compiling
- them from source. However, the `Apple Developer Tools`_ are still necessary
- for compiling the Python database adapters :ref:`psycopg2_kyngchaos` (for PostGIS)
- and :ref:`pysqlite2_kyngchaos` (for SpatiaLite).
- .. note::
- SpatiaLite users should consult the :ref:`spatialite_kyngchaos` section
- after installing the packages for additional instructions.
- Download the framework packages for:
- * UnixImageIO
- * PROJ
- * GEOS
- * SQLite3 (includes the SpatiaLite library)
- * GDAL
- Install the packages in the order they are listed above, as the GDAL and SQLite
- packages require the packages listed before them. Afterwards, you can also
- install the KyngChaos binary packages for `PostgreSQL and PostGIS`__.
- After installing the binary packages, you'll want to add the following to
- your ``.profile`` to be able to run the package programs from the command-line::
- export PATH=/Library/Frameworks/UnixImageIO.framework/Programs:$PATH
- export PATH=/Library/Frameworks/PROJ.framework/Programs:$PATH
- export PATH=/Library/Frameworks/GEOS.framework/Programs:$PATH
- export PATH=/Library/Frameworks/SQLite3.framework/Programs:$PATH
- export PATH=/Library/Frameworks/GDAL.framework/Programs:$PATH
- export PATH=/usr/local/pgsql/bin:$PATH
- __ http://www.kyngchaos.com/wiki/software:frameworks
- __ http://www.kyngchaos.com/wiki/software:postgres
- .. note::
- Use of these binaries requires Django 1.0.3 and above. If you are
- using a previous version of Django (like 1.0.2), then you will have
- to add the the following in your settings::
- GEOS_LIBRARY_PATH='/Library/Frameworks/GEOS.framework/GEOS'
- GDAL_LIBRARY_PATH='/Library/Frameworks/GDAL.framework/GDAL'
- .. _psycopg2_kyngchaos:
- psycopg2
- ~~~~~~~~
- After you've installed the KyngChaos binaries and modified your ``PATH``, as
- described above, ``psycopg2`` may be installed using the following command::
- $ sudo python easy_install psycopg2
- .. note::
- To use ``easy_install`` you'll need to install Python's `setuptools`_.
- .. _setuptools: http://pypi.python.org/pypi/setuptools
- .. _pysqlite2_kyngchaos:
- pysqlite2
- ~~~~~~~~~
- Follow the :ref:`pysqlite2` source install instructions, however,
- when editing the ``setup.cfg`` use the following instead::
- [build_ext]
- #define=
- include_dirs=/Library/Frameworks/SQLite3.framework/unix/include
- library_dirs=/Library/Frameworks/SQLite3.framework/unix/lib
- libraries=sqlite3
- #define=SQLITE_OMIT_LOAD_EXTENSION
- .. _spatialite_kyngchaos:
- SpatiaLite
- ~~~~~~~~~~
- When :ref:`create_spatialite_db`, the ``spatialite`` program is required.
- However, instead of attempting to compile the SpatiaLite tools from source,
- download the `SpatiaLite Binaries`__ for OS X, and install ``spatialite`` in a
- location available in your ``PATH``. For example::
- $ curl -O http://www.gaia-gis.it/spatialite/spatialite-tools-osx-x86-2.3.1.tar.gz
- $ tar xzf spatialite-tools-osx-x86-2.3.1.tar.gz
- $ cd spatialite-tools-osx-x86-2.3.1/bin
- $ sudo cp spatialite /Library/Frameworks/SQLite3.framework/Programs
- Finally, for GeoDjango to be able to find the KyngChaos SpatiaLite library,
- add the following to your ``settings.py``::
- SPATIALITE_LIBRARY_PATH='/Library/Frameworks/SQLite3.framework/SQLite3'
- __ http://www.gaia-gis.it/spatialite/binaries.html
- .. _fink:
- Fink
- ^^^^
- `Kurt Schwehr`__ has been gracious enough to create GeoDjango packages for users
- of the `Fink`__ package system. The following packages are available, depending
- on which version of Python you want to use:
- * ``django-gis-py26``
- * ``django-gis-py25``
- * ``django-gis-py24``
- __ http://schwehr.org/blog/
- __ http://www.finkproject.org/
- .. _macports:
- MacPorts
- ^^^^^^^^
- `MacPorts`__ may be used to install GeoDjango prerequisites on Macintosh
- computers running OS X. Because MacPorts still builds the software from source,
- the `Apple Developer Tools`_ are required.
- Summary::
- $ sudo port install postgresql83-server
- $ sudo port install geos
- $ sudo port install proj
- $ sudo port install postgis
- $ sudo port install gdal
- $ sudo port install libgeoip
- .. note::
- You will also have to modify the ``PATH`` in your ``.profile`` so
- that the MacPorts programs are accessible from the command-line::
- export PATH=/opt/local/bin:/opt/local/lib/postgresql83/bin
- In addition, add the ``FALLBACK_DYLD_LIBRARY_PATH`` setting so that
- the libraries can be found by Python::
- export FALLBACK_DYLD_LIBRARY_PATH=/opt/local/lib:/opt/local/lib/postgresql83
- __ http://www.macports.org/
- .. _ubuntudebian:
- Ubuntu & Debian GNU/Linux
- -------------------------
- .. _ubuntu:
- Ubuntu
- ^^^^^^
- .. _heron:
- 8.04 and lower
- ~~~~~~~~~~~~~~
- The 8.04 (and lower) versions of Ubuntu use GEOS v2.2.3 in their binary packages,
- which is incompatible with GeoDjango. Thus, do *not* use the binary packages
- for GEOS or PostGIS and build some prerequisites from source, per the instructions
- in this document; however, it is okay to use the PostgreSQL binary packages.
- For more details, please see the Debian instructions for :ref:`etch` below.
- .. _ibex:
- 8.10
- ~~~~
- Use the synaptic package manager to install the following packages::
- $ sudo apt-get install binutils libgdal1-1.5.0 postgresql-8.3-postgis postgresql-server-dev-8.3 python-psycopg2 python-setuptools
- Afterwards, you may install Django with Python's ``easy_install`` script (the
- Ubuntu package ``python-django`` uses an older version missing several
- important bug fixes for GeoDjango)::
- $ sudo easy_install Django
- That's it! For the curious, the required binary prerequisites packages are:
- * ``binutils``: for ctypes to find libraries
- * ``postgresql-8.3``
- * ``postgresql-server-dev-8.3``: for ``pg_config``
- * ``postgresql-8.3-postgis``: for PostGIS 1.3.3
- * ``libgeos-3.0.0``, and ``libgeos-c1``: for GEOS 3.0.0
- * ``libgdal1-1.5.0``: for GDAL 1.5.0 library
- * ``proj``: for PROJ 4.6.0 -- but no datum shifting files, see note below
- * ``python-psycopg2``
- * ``python-setuptools``: for ``easy_install``
- Optional packages to consider:
- * ``libgeoip1``: for :ref:`GeoIP <ref-geoip>` support
- * ``gdal-bin``: for GDAL command line programs like ``ogr2ogr``
- * ``python-gdal`` for GDAL's own Python bindings -- includes interfaces for raster manipulation
- .. note::
-
- The Ubuntu ``proj`` package does not come with the datum shifting files
- installed, which will cause problems with the geographic admin because
- the ``null`` datum grid is not available for transforming geometries to the
- spherical mercator projection. A solution is to download the
- datum-shifting files, create the grid file, and install it yourself::
- $ wget http://download.osgeo.org/proj/proj-datumgrid-1.4.tar.gz
- $ mkdir nad
- $ cd nad
- $ tar xzf ../proj-datumgrid-1.4.tar.gz
- $ nad2bin null < null.lla
- $ sudo cp null /usr/share/proj
- Otherwise, the Ubuntu ``proj`` package is fine for general use as long as you
- do not plan on doing any database transformation of geometries to the
- Google projection (900913).
- .. note::
- The PostGIS SQL files are not placed the PostgreSQL share directory in the
- Ubuntu packages. Use the `create_template_postgis-debian.sh`_ script
- instead when :ref:`spatialdb_template`.
- .. _debian:
- Debian
- ------
- .. _etch:
- 4.0 (Etch)
- ^^^^^^^^^^
- The situation here is the same as that of Ubuntu :ref:`heron` -- in other words,
- some packages must be built from source to work properly with GeoDjango.
- Binary Packages
- ~~~~~~~~~~~~~~~
- The following command will install acceptable binary packages, as well as
- the development tools necessary to build the rest of the requirements::
- $ sudo apt-get install binutils bzip2 gcc g++ flex make postgresql-8.1 postgresql-server-dev-8.1 python-ctypes python-psycopg2 python-setuptools
- Required package information:
- * ``binutils``: for ctypes to find libraries
- * ``bzip2``: for decompressing the source packages
- * ``gcc``, ``g++``, ``make``: GNU developer tools used to compile the libraries
- * ``flex``: required to build PostGIS
- * ``postgresql-8.1``
- * ``postgresql-server-dev-8.1``: for ``pg_config``
- * ``python-ctypes``: Python 2.4 needs to have ctypes installed separately
- * ``python-psycopg2``
- * ``python-setuptools``: for ``easy_install``
- Optional packages:
- * ``libgeoip``: for :ref:`GeoIP <ref-geoip>` support
- Source Packages
- ~~~~~~~~~~~~~~~
- You will still have to install :ref:`geosbuild`, :ref:`proj4`,
- :ref:`postgis`, and :ref:`gdalbuild` from source. Please follow the
- directions carefully.
- .. _lenny:
- 5.0 (Lenny)
- ^^^^^^^^^^^
- This version is comparable to Ubuntu :ref:`ibex`, so the command
- is very similar::
- $ sudo apt-get install binutils libgdal1-1.5.0 postgresql-8.3 postgresql-8.3-postgis postgresql-server-dev-8.3 python-psycopg2 python-setuptools
- This assumes that you are using PostgreSQL version 8.3. Else, replace ``8.3``
- in the above command with the appropriate PostgreSQL version.
- .. note::
- Please read the note in the Ubuntu :ref:`ibex` install documentation
- about the ``proj`` package -- it also applies here because the package does
- not include the datum shifting files.
- .. _post_install:
- Post-installation Notes
- ~~~~~~~~~~~~~~~~~~~~~~~
- If the PostgreSQL database cluster was not initiated after installing, then it
- can be created (and started) with the following command::
- $ sudo pg_createcluster --start 8.3 main
- Afterwards, the ``/etc/init.d/postgresql-8.3`` script should be used to manage
- the starting and stopping of PostgreSQL.
- In addition, the SQL files for PostGIS are placed in a different location on
- Debian 5.0 . Thus when :ref:`spatialdb_template` either:
- * Create a symbolic link to these files::
- $ sudo ln -s /usr/share/postgresql-8.3-postgis/{lwpostgis,spatial_ref_sys}.sql /usr/share/postgresql/8.3
- If not running PostgreSQL 8.3, then replace ``8.3`` in the command above with the correct version.
- * Or use the `create_template_postgis-debian.sh`_ to create the spatial database.
- .. _windows:
- Windows XP
- ----------
- Python
- ^^^^^^
- First, download the `Python 2.6 installer`__ from the Python website. Next,
- execute the installer and use defaults, e.g., keep 'Install for all users'
- checked and the installation path set as ``C:\Python26``.
- .. note::
- You may already have a version of Python installed in ``C:\python`` as ESRI
- products sometimes install a copy there. *You should still install a
- fresh version of Python 2.6.*
- __ http://python.org/ftp/python/2.6.2/python-2.6.2.msi
- PostgreSQL
- ^^^^^^^^^^
- First, select a mirror and download the latest `PostgreSQL 8.3 installer`__ from
- the EnterpriseDB website.
- .. note::
- PostgreSQL 8.3 is required because PostGIS is not available yet for 8.4.
- After downloading, simply click on the installer, follow the
- on-screen directions, and keep the default options (e.g., keep the installation
- path as ``C:\Program Files\PostgreSQL\8.3``).
- .. note::
- This PostgreSQL installation process will create both a new windows user to be the
- 'postgres service account' and a special 'postgres superuser' to own the database
- cluster. You will be prompted to set a password for both users (make sure to write
- them down!). To see basic details on the 'service user' account right click on
- 'My Computer' and select 'Manage' or go to: Control Panel -> Administrative Tools ->
- Computer Management -> System Tools -> Local Users and Groups.
- If installed successfully, the PostgreSQL server will run in the background each time
- the system as started as a Windows service. When finished, the installer should launch
- the Application Stack Builder (ASB) -- use this to install PostGIS, see instructions
- below for more details. A 'PostgreSQL 8.3' start menu group should be created that
- contains shortcuts for the ASB and 'Command Prompt', which launches a terminal window
- in the PostgreSQL directory.
- __ http://www.enterprisedb.com/products/pgdownload.do#windows
- PostGIS
- ^^^^^^^
- From the Application Stack Builder (Programs -> PostgreSQL 8.3), select
- 'PostgreSQL Database Server 8.3 on port 5432' from the drop down menu. Next,
- select 'PostGIS 1.3.6 for PostgreSQL 8.3' from the 'Spatial Extensions' tree
- in the list. Select only the default options during install (do not uncheck
- the option to create a default PostGIS database).
- .. note::
- You will be prompted to enter your 'postgres superuser' password in the
- 'Database Connection Information' dialog.
- psycopg2
- ^^^^^^^^
- The ``psycopg2`` Python module provides the interface between Python and the
- PostgreSQL database. Download the `Windows installer`__ (v2.0.10) and run
- using the default settings. [#]_
- __ http://www.stickpeople.com/projects/python/win-psycopg/psycopg2-2.0.10.win32-py2.6-pg8.3.7-release.exe
- GeoDjango Installer
- ^^^^^^^^^^^^^^^^^^^
- Download the `GeoDjango Installer`__; this was created [#]_ to simplify the rest
- of the process for installing GeoDjango on Windows platforms. The installer
- automatically installs Django 1.1, GDAL 1.6.0, PROJ 4.6.1 (including datum grid
- files), and configures the necessary environment variables.
- Once the installer has completed, log out and log back in so that the
- modifications to the system environment variables take effect, and you
- should be good to go.
- .. note::
- The installer modifies the system ``Path`` environment variable to
- include ``C:\Program Files\PostgreSQL\8.3\bin`` and
- ``C:\Program Files\GeoDjango\bin``. This is required so that Python
- may find the GEOS DLL provided by PostGIS and the GDAL DLL provided
- by the installer. The installer also sets the ``GDAL_DATA`` and
- ``PROJ_LIB`` environment variables.
- __ http://geodjango.org/windows/GeoDjango_Installer.exe
- .. rubric:: Footnotes
- .. [#] The datum shifting files are needed for converting data to and from certain projections.
- For example, the PROJ.4 string for the `Google projection (900913) <http://spatialreference.org/ref/epsg/900913/proj4>`_
- requires the ``null`` grid file only included in the extra datum shifting files.
- It is easier to install the shifting files now, then to have debug a problem caused by their absence later.
- .. [#] Specifically, GeoDjango provides support for the `OGR <http://gdal.org/ogr>`_ library, a component of GDAL.
- .. [#] See `GDAL ticket #2382 <http://trac.osgeo.org/gdal/ticket/2382>`_.
- .. [#] GeoDjango uses the `find_library <http://docs.python.org/library/ctypes.html#finding-shared-libraries>`_
- routine from ``ctypes.util`` to locate shared libraries.
- .. [#] The ``psycopg2`` Windows installers are packaged and maintained by
- `Jason Erickson <http://www.stickpeople.com/projects/python/win-psycopg/>`_.
- .. [#] The source code for the installer is available in the `nsis_installer <http://geodjango.org/hg/nsis_installer/>`_
- GeoDjango mercurial repository.
|