123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311 |
- .. _ref-gis-install:
- ======================
- GeoDjango Installation
- ======================
- .. highlight:: console
- Overview
- ========
- In general, GeoDjango installation requires:
- 1. :ref:`Python and Django <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
- ============
- .. _django:
- Python and Django
- -----------------
- Because GeoDjango is included with Django, please refer to Django's
- :ref:`installation instructions <installing-official-release>` 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.2+ 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+
- ================== ============================== ================== =========================================
- See also `this comparison matrix`__ on the OSGeo Wiki for
- PostgreSQL/PostGIS/GEOS/GDAL possible combinations.
- __ http://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS
- .. _geospatial_libs:
- Geospatial libraries
- --------------------
- GeoDjango uses and/or provides interfaces for the following open source
- geospatial libraries:
- ======================== ==================================== ================================ ==========================
- Program Description Required Supported Versions
- ======================== ==================================== ================================ ==========================
- :ref:`GEOS <ref-geos>` Geometry Engine Open Source Yes 3.3, 3.2, 3.1, 3.0
- `PROJ.4`_ Cartographic Projections library Yes (PostgreSQL and SQLite only) 4.8, 4.7, 4.6, 4.5, 4.4
- :ref:`GDAL <ref-gdal>` Geospatial Data Abstraction Library No (but, required for SQLite) 1.9, 1.8, 1.7, 1.6, 1.5
- :ref:`GeoIP <ref-geoip>` IP-based geolocation library No 1.4
- `PostGIS`__ Spatial extensions for PostgreSQL Yes (PostgreSQL only) 2.0, 1.5, 1.4, 1.3
- `SpatiaLite`__ Spatial extensions for SQLite Yes (SQLite only) 3.0, 2.4, 2.3
- ======================== ==================================== ================================ ==========================
- .. admonition:: Install GDAL
- While :ref:`gdalbuild` is technically not required, it is *recommended*.
- Important features of GeoDjango (including the :ref:`ref-layermapping`,
- geometry reprojection, 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/gaia-sins/
- .. _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 necessary 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: https://developer.apple.com/technologies/tools/
- .. _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.3.5 from the refractions Web site and untar the source
- archive::
- $ wget http://download.osgeo.org/geos/geos-3.3.5.tar.bz2
- $ tar xjf geos-3.3.5.tar.bz2
- Next, change into the directory where GEOS was unpacked, run the configure
- script, compile, and install::
- $ cd geos-3.3.5
- $ ./configure
- $ make
- $ sudo make install
- $ cd ..
- Troubleshooting
- ^^^^^^^^^^^^^^^
- Can't find GEOS library
- ~~~~~~~~~~~~~~~~~~~~~~~
- When GeoDjango can't find GEOS, this error is raised:
- .. code-block:: text
- 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), 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:
- .. code-block:: python
- 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``.
- See also :ref:`My logs are filled with GEOS-related errors <geos-exceptions-in-logfile>`.
- .. _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.8.0.tar.gz
- $ wget http://download.osgeo.org/proj/proj-datumgrid-1.5.tar.gz
- 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.8.0.tar.gz
- $ cd proj-4.8.0/nad
- $ tar xzf ../../proj-datumgrid-1.5.tar.gz
- $ cd ..
- Finally, configure, make and install PROJ.4::
- $ ./configure
- $ make
- $ sudo make install
- $ cd ..
- .. _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.9.1.tar.gz
- $ tar xzf gdal-1.9.1.tar.gz
- $ cd gdal-1.9.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:
- .. code-block:: pycon
- >>> 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:
- .. code-block:: python
- 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:
- .. code-block:: text
- 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:
- .. code-block:: apache
- SetEnv GDAL_DATA /usr/local/share
- .. _postgis:
- PostGIS
- -------
- `PostGIS`__ adds geographic object support to PostgreSQL, turning it
- into a spatial database. :ref:`geosbuild`, :ref:`proj4` and
- :ref:`gdalbuild` should be installed prior to building PostGIS. You
- might also need additional libraries, see `PostGIS requirements`_.
- .. note::
- The `psycopg2`_ module is required for use as the database adaptor
- when using GeoDjango with PostGIS.
- .. _psycopg2: http://initd.org/psycopg/
- .. _PostGIS requirements: http://www.postgis.org/documentation/manual-2.0/postgis_installation.html#id2711662
- First download the source archive, and extract::
- $ wget http://postgis.refractions.net/download/postgis-2.0.1.tar.gz
- $ tar xzf postgis-2.0.1.tar.gz
- $ cd postgis-2.0.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_template91` or
- :ref:`spatialdb_template_earlier` for more information.
- __ http://postgis.refractions.net/
- .. _spatialite:
- SpatiaLite
- ----------
- .. 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/gaia-sins/
- .. _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://sqlite.org/sqlite-amalgamation-3.6.23.1.tar.gz
- $ tar xzf sqlite-amalgamation-3.6.23.1.tar.gz
- $ cd sqlite-3.6.23.1
- 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/gaia-sins/libspatialite-sources/libspatialite-amalgamation-2.3.1.tar.gz
- $ wget http://www.gaia-gis.it/gaia-sins/spatialite-tools-sources/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 have their ``target`` configured::
- $ ./configure --target=macosx
- __ http://www.gaia-gis.it/gaia-sins/libspatialite-sources/
- .. _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+ of
- pysqlite2. 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:
- .. code-block:: ini
- [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
- ``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:
- .. _spatialdb_template91:
- Creating a spatial database with PostGIS 2.0 and PostgreSQL 9.1
- ---------------------------------------------------------------
- PostGIS 2 includes an extension for Postgres 9.1 that can be used to enable
- spatial functionality::
- $ createdb <db name>
- $ psql <db name>
- > CREATE EXTENSION postgis;
- > CREATE EXTENSION postgis_topology;
- No PostGIS topology functionalities are yet available from GeoDjango, so the
- creation of the ``postgis_topology`` extension is entirely optional.
- .. _spatialdb_template_earlier:
- Creating a spatial database template for earlier versions
- ---------------------------------------------------------
- If you have an earlier version of PostGIS or PostgreSQL, the CREATE
- EXTENSION isn't available and you need to create the spatial database
- using the following instructions.
- 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 ``<pg_sharedir>/contrib/lwpostgis.sql``;
- whereas version 1.4 uses ``<sharedir>/contrib/postgis.sql`` and
- version 1.5 uses ``<sharedir>/contrib/postgis-1.5/postgis.sql``.
- To complicate matters, :ref:`ubuntudebian` distributions have their
- own separate directory naming system that changes each release.
- 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::
- $ POSTGIS_SQL_PATH=`pg_config --sharedir`/contrib/postgis-2.0
- # 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 Bash shell script
- =============== =============================================
- 1.3 :download:`create_template_postgis-1.3.sh`
- 1.4 :download:`create_template_postgis-1.4.sh`
- 1.5 :download:`create_template_postgis-1.5.sh`
- Debian/Ubuntu :download:`create_template_postgis-debian.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_spatialite_db:
- Creating a spatial database for SpatiaLite
- ------------------------------------------
- After you've installed SpatiaLite, you'll need to create a number of spatial
- metadata tables in your database in order to perform spatial queries.
- If you're using SpatiaLite 2.4 or newer, use the ``spatialite`` utility to
- call the ``InitSpatialMetaData()`` function, like this::
- $ spatialite geodjango.db "SELECT InitSpatialMetaData();"
- the SPATIAL_REF_SYS table already contains some row(s)
- InitSpatiaMetaData ()error:"table spatial_ref_sys already exists"
- 0
- You can safely ignore the error messages shown. When you've done this, you can
- skip the rest of this section.
- If you're using SpatiaLite 2.3, you'll need to download a
- database-initialization file and execute its SQL queries in your database.
- First, get it from the `SpatiaLite Resources`__ page::
- $ wget http://www.gaia-gis.it/spatialite-2.3.1/init_spatialite-2.3.sql.gz
- $ gunzip init_spatialite-2.3.sql.gz
- Then, use the ``spatialite`` command 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:`DATABASES` ``"name"`` key
- inside your ``settings.py``.
- __ http://www.gaia-gis.it/spatialite-2.3.1/resources.html
- Add ``django.contrib.gis`` to :setting:`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
- --------------------------------------------------
- .. note::
- If you're running PostGIS 1.4 or above, you can skip this step. The entry
- is already included in the default ``spatial_ref_sys`` table.
- 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:
- .. code-block:: pycon
- $ python manage shell
- >>> from django.contrib.gis.utils import add_srs_entry
- >>> add_srs_entry(900913)
- 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. 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://groups.google.com/group/geodjango
- __ https://code.djangoproject.com/newticket
- .. _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
- PostgreSQL's createdb fails
- ---------------------------
- When the PostgreSQL cluster uses a non-UTF8 encoding, the
- :file:`create_template_postgis-*.sh` script will fail when executing
- ``createdb``::
- createdb: database creation failed: ERROR: new encoding (UTF8) is incompatible
- with the encoding of the template database (SQL_ASCII)
- The `current workaround`__ is to re-create the cluster using UTF8 (back up any
- databases before dropping the cluster).
- __ http://jacobian.org/writing/pg-encoding-ubuntu/
- 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:`homebrew`
- * :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.6`__ and `2.7`__ 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.6.6/python-2.6.6-macosx10.3.dmg
- __ http://python.org/ftp/python/2.7.3/
- .. 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
- .. _homebrew:
- Homebrew
- ^^^^^^^^
- `Homebrew`__ provides "recipes" for building binaries and packages from source.
- It provides recipes for the GeoDjango prerequisites on Macintosh computers
- running OS X. Because Homebrew still builds the software from source, the
- `Apple Developer Tools`_ are required.
- Summary::
- $ brew install postgresql
- $ brew install postgis
- $ brew install gdal
- $ brew install libgeoip
- __ http://mxcl.github.com/homebrew/
- .. _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/software/frameworks
- __ http://www.kyngchaos.com/software/postgres
- .. _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 pip install psycopg2
- .. note::
- If you don't have ``pip``, follow the the :ref:`installation instructions
- <installing-official-release>` to install it.
- .. _pysqlite2_kyngchaos:
- pysqlite2
- ~~~~~~~~~
- Follow the :ref:`pysqlite2` source install instructions, however,
- when editing the ``setup.cfg`` use the following instead:
- .. code-block:: ini
- [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``:
- .. code-block:: python
- SPATIALITE_LIBRARY_PATH='/Library/Frameworks/SQLite3.framework/SQLite3'
- __ http://www.gaia-gis.it/spatialite-2.3.1/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 +geos
- $ 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 ``DYLD_FALLBACK_LIBRARY_PATH`` setting so that
- the libraries can be found by Python::
- export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib:/opt/local/lib/postgresql83
- __ http://www.macports.org/
- .. _ubuntudebian:
- Ubuntu & Debian GNU/Linux
- -------------------------
- .. note::
- The PostGIS SQL files are not placed in the PostgreSQL share directory in
- the Debian and Ubuntu packages. Instead, they're located in a special
- directory depending on the release. In this case, use the
- :download:`create_template_postgis-debian.sh` script
- .. _ubuntu:
- Ubuntu
- ^^^^^^
- 11.10 through 12.04
- ~~~~~~~~~~~~~~~~~~~
- In Ubuntu 11.10, PostgreSQL was upgraded to 9.1. The installation command is:
- .. code-block:: bash
- $ sudo apt-get install binutils gdal-bin libproj-dev \
- postgresql-9.1-postgis postgresql-server-dev-9.1 python-psycopg2
- .. _ubuntu10:
- 10.04 through 11.04
- ~~~~~~~~~~~~~~~~~~~
- In Ubuntu 10.04, PostgreSQL was upgraded to 8.4 and GDAL was upgraded to 1.6.
- Ubuntu 10.04 uses PostGIS 1.4, while Ubuntu 10.10 uses PostGIS 1.5 (with
- geography support). The installation command is:
- .. code-block:: bash
- $ sudo apt-get install binutils gdal-bin libproj-dev postgresql-8.4-postgis \
- postgresql-server-dev-8.4 python-psycopg2
- .. _ibex:
- 8.10
- ~~~~
- Use the synaptic package manager to install the following packages:
- .. code-block:: bash
- $ sudo apt-get install binutils gdal-bin postgresql-8.3-postgis \
- postgresql-server-dev-8.3 python-psycopg2
- 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``
- 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::
- On this version of Ubuntu the ``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:
- .. code-block:: bash
- $ 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).
- .. _debian:
- Debian
- ------
- .. _lenny:
- 5.0 (Lenny)
- ^^^^^^^^^^^
- This version is comparable to Ubuntu :ref:`ibex`, so the command
- is very similar:
- .. code-block:: bash
- $ 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:
- .. code-block:: bash
- $ 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_earlier` either:
- * Create a symbolic link to these files:
- .. code-block:: bash
- $ 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 :download:`create_template_postgis-debian.sh` to create the spatial database.
- .. _windows:
- Windows
- -------
- Proceed through the following sections sequentially in order to install
- GeoDjango on Windows.
- .. note::
- These instructions assume that you are using 32-bit versions of
- all programs. While 64-bit versions of Python and PostgreSQL 9.0
- are available, 64-bit versions of spatial libraries, like
- GEOS and GDAL, are not yet provided by the :ref:`OSGeo4W` installer.
- Python
- ^^^^^^
- First, download the latest `Python 2.7 installer`__ from the Python Web site.
- Next, run the installer and keep the defaults -- for example, keep
- 'Install for all users' checked and the installation path set as
- ``C:\Python27``.
- .. 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.7.*
- __ http://python.org/download/
- PostgreSQL
- ^^^^^^^^^^
- First, download the latest `PostgreSQL 9.0 installer`__ from the
- `EnterpriseDB`__ Web site. After downloading, simply run the installer,
- follow the on-screen directions, and keep the default options unless
- you know the consequences of changing them.
- .. note::
- The PostgreSQL installer creates both a new Windows user to be the
- 'postgres service account' and a ``postgres`` database superuser
- You will be prompted once to set the password for both accounts --
- make sure to remember it!
- When the installer completes, it will ask to launch the Application Stack
- Builder (ASB) on exit -- keep this checked, as it is necessary to
- install :ref:`postgisasb`.
- .. note::
- If installed successfully, the PostgreSQL server will run in the
- background each time the system as started as a Windows service.
- A :menuselection:`PostgreSQL 9.0` start menu group will created
- and contains shortcuts for the ASB as well as the 'SQL Shell',
- which will launch a ``psql`` command window.
- __ http://www.enterprisedb.com/products-services-training/pgdownload
- __ http://www.enterprisedb.com
- .. _postgisasb:
- PostGIS
- ^^^^^^^
- From within the Application Stack Builder (to run outside of the installer,
- :menuselection:`Start --> Programs --> PostgreSQL 9.0`), select
- :menuselection:`PostgreSQL Database Server 9.0 on port 5432` from the drop down
- menu. Next, expand the :menuselection:`Categories --> Spatial Extensions` menu
- tree and select :menuselection:`PostGIS 1.5 for PostgreSQL 9.0`.
- After clicking next, you will be prompted to select your mirror, PostGIS
- will be downloaded, and the PostGIS installer will begin. Select only the
- default options during install (e.g., do not uncheck the option to create a
- default PostGIS database).
- .. note::
- You will be prompted to enter your ``postgres`` database superuser
- password in the 'Database Connection Information' dialog.
- psycopg2
- ^^^^^^^^
- The ``psycopg2`` Python module provides the interface between Python and the
- PostgreSQL database. Download the latest `Windows installer`__ for your version
- of Python and PostgreSQL and run using the default settings. [#]_
- __ http://www.stickpeople.com/projects/python/win-psycopg/
- .. _osgeo4w:
- OSGeo4W
- ^^^^^^^
- The `OSGeo4W installer`_ makes it simple to install the PROJ.4, GDAL, and GEOS
- libraries required by GeoDjango. First, download the `OSGeo4W installer`_,
- and run it. Select :menuselection:`Express Web-GIS Install` and click next.
- In the 'Select Packages' list, ensure that GDAL is selected; MapServer and
- Apache are also enabled by default, but are not required by GeoDjango and
- may be unchecked safely. After clicking next, the packages will be
- automatically downloaded and installed, after which you may exit the
- installer.
- .. _OSGeo4W installer: http://trac.osgeo.org/osgeo4w/
- Modify Windows environment
- ^^^^^^^^^^^^^^^^^^^^^^^^^^
- In order to use GeoDjango, you will need to add your Python and OSGeo4W
- directories to your Windows system ``Path``, as well as create ``GDAL_DATA``
- and ``PROJ_LIB`` environment variables. The following set of commands,
- executable with ``cmd.exe``, will set this up:
- .. code-block:: bat
- set OSGEO4W_ROOT=C:\OSGeo4W
- set PYTHON_ROOT=C:\Python27
- set GDAL_DATA=%OSGEO4W_ROOT%\share\gdal
- set PROJ_LIB=%OSGEO4W_ROOT%\share\proj
- set PATH=%PATH%;%PYTHON_ROOT%;%OSGEO4W_ROOT%\bin
- reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /f /d "%PATH%"
- reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v GDAL_DATA /t REG_EXPAND_SZ /f /d "%GDAL_DATA%"
- reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROJ_LIB /t REG_EXPAND_SZ /f /d "%PROJ_LIB%"
- For your convenience, these commands are available in the executable batch
- script, :download:`geodjango_setup.bat`.
- .. note::
- Administrator privileges are required to execute these commands.
- To do this, right-click on :download:`geodjango_setup.bat` and select
- :menuselection:`Run as administrator`. You need to log out and log back in again
- for the settings to take effect.
- .. note::
- If you customized the Python or OSGeo4W installation directories,
- then you will need to modify the ``OSGEO4W_ROOT`` and/or ``PYTHON_ROOT``
- variables accordingly.
- Install Django and set up database
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Finally, :ref:`install Django <installing-official-release>` on your system.
- You do not need to create a spatial database template, as one named
- ``template_postgis`` is created for you when installing PostGIS.
- To administer the database, you can either use the pgAdmin III program
- (:menuselection:`Start --> PostgreSQL 9.0 --> pgAdmin III`) or the
- SQL Shell (:menuselection:`Start --> PostgreSQL 9.0 --> SQL Shell`).
- For example, to create a ``geodjango`` spatial database and user, the following
- may be executed from the SQL Shell as the ``postgres`` user::
- postgres# CREATE USER geodjango PASSWORD 'my_passwd';
- postgres# CREATE DATABASE geodjango OWNER geodjango TEMPLATE template_postgis ENCODING 'utf8';
- .. 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 or 3857)
- <http://spatialreference.org/ref/sr-org/6864/prj/>`_ 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 :func:`~ctypes.util.find_library` routine from
- :mod:`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/>`_.
|