Before starting work on WorldMap, you will need to have the following software installed and in your PATH:
The git command-line client, version 1.5.3 or higher:
git --version
and verify the
version is something like git version 1.6.6.1
The Subversion command-line client, version 1.5 or higher.
svn --version
and verify the output
starts with something like svn, version 1.6.9 (r901367)
The GEOS geometry handling library: http://trac.osgeo.org/geos/
The GDAL geographic raster access library: http://www.gdal.org/
The OGR geographic vector data access library: http://www.gdal.org/ogr/
Sun Java Development Kit 1.5 or Higher:
javac -help -version
and verify that it reports a list of usage flags,
ending with a line like javac 1.5.0_18
(the numbers will vary with your
installed version).Python 2.7:
python --version
and verify that it reports a version number like
Python 2.7
Apache Maven 2.0.10 or Later:
To verify that it is available, run
mvn -version
and verify that it reports version information like::
Maven version: 2.0.10 Java version: 1.5.0_18 OS name: "linux" version: "2.6.30.8-64.fc11.x86_64" arch: "amd64" Family: "unix"
If not, download from http://maven.apache.org/download.html
Apache Tomcat 6.x or Jetty
Apache Ant
PostgreSQL 8.x and PostGIS 1.5
Additionally, WorldMap uses a number of native-code libraries in Python. You can install these libraries manually, or allow the WorldMap setup script to compile them for you. In the latter case, you will need to install a C compiler such as GCC, as well as any requisite development libraries. GCC packages are available for Mac OSX and all Linux distributions; consult your operating system provider for installation instructions.
The native libraries needed include:
libxml2-dev
libxslt-dev
For GCC, packages are available for Mac OSX and all Linux distributions; consult your operating system provider for installation instructions. When build PIL from source, ensure that you have development libraries available for libpng, libjpeg, and libgif if you want to be able to use those formats in your WorldMap site.
The following steps should prepare a Python virtual environment for you. Note that you will need to manually create a PostGIS datbase and user first. The default connection settings are stored in src/GeoNodePy/geonode/settings.py: database name: wm_db user: wm_user password: wm_password
create role wm_user password 'wm_password' superuser login;
psql -U postgres -c "create database wm_db with owner wm_user encoding 'UTF8' lc_collate='en_US.utf8' lc_ctype='en_US.utf8' template template0;" psql -U wm_user -d wm_db -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql psql -U wm_user -d wm_db -f /usr/share/postgresql/9.1/contrib/postgis_comments.sql psql -U wm_user -d wm_db -f /usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql
psql -U postgres -c "create database wmdata with owner wm_user encoding 'UTF8' lc_collate='en_US.utf8' lc_ctype='en_US.utf8' template template0;" psql -U wm_user -d wmdata -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql psql -U wm_user -d wmdata -f /usr/share/postgresql/9.1/contrib/postgis_comments.sql psql -U wm_user -d wmdata -f /usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql
createuser -P -s -E -l wm_user;
createdb -E UTF8 -O wm_user template_postgis psql -U postgres -d template_postgis -c "CREATE EXTENSION postgis;" psql -U postgres -d template_postgis -f geonode/static/geonode/patches/postgis/legacy_gist.sql
createdb -E UTF8 -U wm_user -T template_postgis wm_db
createdb -E UTF8 -U wm_user -T template_postgis wmdata
git clone git://github.com/cga-harvard/cga-worldmap.git cga-worldmap
cd cga-worldmap
git submodule update --init
mkvirtualenv worldmap
pip install -r shared/requirements.txt
paver build # see note2 below
django-admin.py createsuperuser --settings=geonode.settings
Start the server: paver host
Once fully started, you should see a message indicating the address of your WorldMap::
Development GeoNode is running at http://localhost:8000/ The GeoNode is an unstoppable machine Press CTRL-C to shut down
note1::
When running python bootstrap.py
the --no-site-packages
option is
not required. If enabled, the bootstrap script will sandbox your virtual
environment from any packages that are installed in the system, useful if
you have incompatible versions of libraries such as Django installed
system-wide. On the other hand, sometimes it is useful to use a version of
the Python Imaging Library provided by your operating system
vendor, or packaged other than on PyPI. When in doubt, however, just leave
this option in.
note2::
When running "pave build" command, if error about version string parsing occurs, edit ~/cga-worldmap/lib/python2.7/site-packages/django/contrib/gis/geos/libgeos.py, search for "ver = geos_version()" under "def geos_version_info()", edit "ver = geos_version()" to "ver = geos_version().split(' ')[0]". In this case the space between the version will be deleted. Finally, run "pave build" again.
This command::
django-admin.py createsuperuser --settings=geonode.settings
can be used to create additional administrative user accounts. The administrative control panel is not linked from the main site, but can be accessed at http://localhost:8000/admin/
Minified Scripts ................
JavaScript Developers can switch to using unminified scripts and CSS:
Get and run geonode-client:
$ git clone git://github.com/GeoNode/geonode-client.git geonode-client $ cd geonode-client $ ant init debug
Set the GEONODE_CLIENT_LOCATION entry in :file:src/geonode/settings.py
to
http://localhost:9090/
and run paver as described above.
Note that this requires ant (http://ant.apache.org/) in addition to the above build requirements.
VirtualBox Setup ................
To test the application in different browsers in VirtualBox guests, the
following needs to be done before running paver host
:
Start the guest in VirtualBox. Set the network adapter mode to "Host-only adapter". Then set it back to "NAT".
On the host, do ifconfig and write down the IP address of the vboxnet0 adapter.
Edit :file:src/GeoNodePy/geonode/settings.py
and change the line::
GEOSERVER_BASE_URL="http://localhost:8001/geoserver/"
to use the IP address you have written down above::
GEOSERVER_BASE_URL="http://192.168.56.1:8001/geoserver/"
Make sure to change other http://localhost urls in
:file:src/GeoNodePy/geonode/settings.py
accordingly as well
To start the web server, run::
$ paver host -b 192.168.56.1
Now WorldMap is available in your browser at http://192.168.56.1:8000/
How WorldMap Finds GeoServer ...........................
Java Developers can point the application at a particular GeoServer instance by setting the GEOSERVER_BASE_URL entry in settings.py to the context path of the GeoServer instance. This should include the trailing slash. For example, the GeoServer used for http://geonode.capra.opengeo.org/ is::
http://geonode.capra.opengeo.org/geoserver/
The default value is http://localhost:8001/geoserver/
. The GeoServer module
in :file:src/geoserver-geonode-ext/
is configured to provide a GeoServer
instance at that port with the following commands::
cd src/geoserver-geonode-ext/
sh startup.sh
.. note::
Normally, mvn jetty:run-war
would be sufficient. However, we use the
shell script to add some extra parameters to the JVM command-line used to
run Jetty in order to workaround a JVM bug that affects GeoNetwork.
If you want to change this service URL, edit :file:src/geonode/settings.py
and
change the line::
GEOSERVER_BASE_URL="http://localhost:8001/geoserver/"
to indicate the GeoServer URL that you want to use.
To run the Django app when Jetty is started independently, use::
paster serve --reload shared/dev-paste.ini
in the base of your working directory.
Alternative GeoServer Data Directories ......................................
This server defaults to using :file:gs-data/
as the data directory by default.
If you need you need to use an alternative data directory, you can specify it
by editing startup.sh
to specify a different data directory::
-DGEOSERVER_DATA_DIR=/home/me/mydata/
Email .....
Adding an email gateway to WorldMap can be very useful, the two main reasons are
the ADMINS
and REGISTRATION_OPEN
settings explained below.
Here is a sample configuration to setup a Gmail account as the email gateway::
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'foo@gmail.com'
EMAIL_HOST_PASSWORD = 'bar'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
More informacion can be found in the django docs::
http://docs.djangoproject.com/en/dev/ref/settings/?from=olddocs#email-backend
ADMINS ......
When DEBUG=False
django will not display the usual error page, but will
email the people in the ADMINS tuple with the error traceback::
ADMINS = (
('Carlos Valderrama', 'carlos.valderrama@gmail.com'),
('Diego Maradona', 'diego.maradona@gmail.com'),
)
REGISTRATION_OPEN .................
In order to let people autoregister to the WorldMap, set::
REGISTRATION_OPEN=True
This needs email to be configured and your website's domain name properly set in the Sites application (the default is example.com)::
http://localhost:8000/admin/sites/site/1
POSTGIS INTEGRATION ................. To automatically import uploaded shapefiles to a PostGIS database, open the settings.py file and set 'DB_DATASTORE' to 'True'. Then assign the appropriate connection values to the other DBDATASTORE* settings below it:
DB_DATASTORE_NAME = '
TILE CACHING ............. Create or edit the 'gwc-gs.xml' file under the gwc directory within your GeoServer data directory:
GAZETTEER .............. The gazetteer is disabled by default because it adds a bit of complexity to the setup process. It should be enabled only if PostGIS integration is also enabled.
In your settings.py file:
If you want to enable full-text search for the gazetteer, run the following commands in the DB_DATASTORE database: ALTER TABLE gazetteer_gazetteerentry ADD COLUMN placename_tsv tsvector; CREATE INDEX placename_tsv_index on gazetteer_gazetteerentry using gin(placename_tsv); UPDATE gazetteer_gazetteerentry SET text_search = to_tsvector('english', coalesce(place_name,'')); CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE ON gazetteer_gazetteerentry FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(placename_tsv, 'pg_catalog.english', place_name);
and then set GAZETTEER_FULLTEXTSEARCH = True in settings
QUEUE .............. WorldMap can now optionally make use of Celery (http://celeryproject.org/) to send certain tasks (updating the gazetteer, updating layer boundaries after creating/editing features) to a job queue where they will be processed later.
In your settings.py file, uncomment the following in INSTALLED_APPS:
The run interval is determined by QUEUE_INTERVAL - the default is 10 minutes.
You will need to manually setup and run the celery processes on your server. For basic
instructions on doing so see :file:docs/deploy/celery_queue.txt
ALTERNATE LAYER-SPECIFIC SECURITY SYSTEM ........................................................................................... Place config.xml file in geoserver's data/security/auth/geonodeAuthProvider: