Wednesday, August 24, 2011

Spatial Wiki 8 - Install GeoServer

This is part 8 on building a Spatial Wiki, we've setup and configured an Amazon EC2 server with MediaWiki, PostgreSQL, and PostGIS.  We've also setup a simple spatial database and connected to it via Quantum GIS.  Now it's time to install and do some initial testing of GeoServer which we'll use to serve our spatial data out to a webpage via OpenLayers.

If you search the web, and via the couple of installs I've done there are number of ways to install and configure GeoServer.  I'm also honestly not sure what is the best one, the but in general I think we want to be running with the official Oracle version of Java, and we want it running via Tomcat so we'll install and configure both of these before hitting GeoServer.

Installing Oracle Java

The official Oracle Java is in a partner repository so you have to add the repository and then install Java, like this:
sudo vi /etc/apt/sources.list

Add this line to the end:
deb http://archive.canonical.com/ lucid partner

Save the file and then update the list of packages and install Java with:
sudo apt-get update
sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts

Once Oracle Java is installed you can check the version with:
java -version

You should see something like:
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

If you system has different versions of Java installed (i.e. OpenJDK) you can set the "default" version that the system will use with:
sudo update-alternatives --config java

Installing Tomcat

I've just installed Tomcat using the Ubuntu server setup utility, run the following command and tick the option to install Tomcat:
sudo tasksel --section server

Once Tomcat is installed there are two configuration changes per recommendations in this article:

http://leighspersistentthoughts.wordpress.com/2010/06/17/installing-a-headless-geoserver-on-ubuntu-10-4-on-amazon-web-services/

The fist change I think is just formally enabling what are otherwise defaults:

Edit the follwing file:
sudo vi /etc/default/tomcat6

Uncomment the following lines and save the file.
JAVA_OPTS="-Djava.awt.headless=true -Xmx512m"
TOMCAT6_SECURITY=no

Edit this file:
sudo vi /var/lib/tomcat6/conf/tomcat-users.xml

So it looks like this:
<tomcat-users>
<!--
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
-->
  <role rolename="admin"/>
  <role rolename="manager"/>
  <role rolename="tomcat"/>
  <user username="tomcat6" password="secret" roles="admin,manager,tomcat"/>
</tomcat-users>

Restart the tomcat server:
sudo /etc/init.d/tomcat6 restart

Install GeoServer

Download the GeoServer Web Archive (.war) file from:

http://geoserver.org/display/GEOS/Stable

Once the file is downloaded launch the Tomcat manager which will be something like:

http://[your server]:8080/manager/html

Important note: Port 8080 needs to be allowed via the AWS security group for the server. Do this in the AWS Management Console.  See the Server Setup post for more information if needed.

Select the WAR file to upload (geoserver.war) and then click Deploy from the Tomcat Web Application Manager. When complete you will see GeoServer running in the Tomcat manager as shown below.



You will be able to launch the GeoServer web administration interface with an address like:

http://[your server]:8080/geoserver/web

The default admin login for GeoServer is username = admin and password = geoserver

To change the login see notes here:

http://docs.geoserver.org/stable/en/user/gettingstarted/web-admin-quickstart/index.html

The GeoServer web interface looks like the figure below.  You can do "Layer Preview" and preview the various default datasets that were installed with GeoServer.

Enabling Port 80 (optional)

Tomcat (and this GeoServer) by default operate over port 8080 which can sometimes be a problem with firewalls, and if nothing else make the URLs a bit messy.  You can get around this by enabling proxy support in Apache and setting up a proxy equating GeoServer on 8080 to a standard port 80 http request.  The first part is REALLY important, Apache2 needs to be configured to allow the proxies. I restarted after each one, but you can live dangerously and just restart after enabling both.
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo /etc/init.d/apache2 restart

Then edit the Apache configuration file:
sudo vi /etc/apache2/sites-enabled/000-default

And add the following lines to the end, but before the closing tag.
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /geoserver http://localhost:8080/geoserver
ProxyPassReverse /geoserver http://localhost:8080/geoserver

Finally restart Apache again and you will be able to Access GeoServer via a standard http address like:

http://[your server]/geoserver/web

See the next article on Adding a PostGIS Layer to GeoServer.

Monday, August 22, 2011

Spatial Wiki 7 - Setup the Spatial Database

We've spent a fair bit of time setting up the server, and installing and configuring PostgreSQL and PostGIS. At this point we have a reasonably well configured cloud based geospatial server so it's time to setup the spatial database. The database will be a simple spatially enabled data model to store points and a bit of metadata sourced from the wiki. Not sure if we'll get there, but the objective will be to implement a bit of custom PHP code to keep the spatial database updated in real-time as wiki entries with spatial references are created or modified. So, in thinking about the data model we'll include the following:
  • A spatial reference, a point in lat-long, WGS84 coordinates
  • A link to the wiki article that the point is associated with, this will be the unique article id from MediaWiki, the article title will also be stored
  • A point type that will be validated against a reference table of allowed point types
  • Date/time fields that keep track of when a row is created and when it's modified
Before creating the data model we'll first create a new database.  You create a new PostgreSQL database from the Linux prompt with
    sudo -u postgres createdb spatialwiki
    This creates the database "spatialwiki" with the postgres user.

    Next we'll enable the database to support PL/pgSQL which is required for PostGIS:
    sudo createlang --username=postgres --password plpgsql spatialwiki

    Then run the following SQL scripts to setup PostGIS functions and other objects in the database:
    sudo psql -U postgres -d spatialwiki -f /usr/share/postgresql/8.4/contrib/postgis.sql
    sudo psql -U postgres -d spatialwiki -f /usr/share/postgresql/8.4/contrib/spatial_ref_sys.sql
    sudo psql -U postgres -d spatialwiki -f /usr/share/postgresql/8.4/contrib/postgis_comments.sql

    Note that depending on what version of PostGIS you have installed the path to postgis.sql and spatial_ref_sys.sql may be slightly different.  To find out exactly where they are on your system you can use the find command like:

    sudo find / -name postgis.sql

    When complete you can login to the database and check that PostGIS is installed and setup properly with:
    sudo -u postgres psql spatialwiki

    Then at the PostgreSQL prompt run the SQL query:
    SELECT PostGIS_full_version();

    And with everything setup properly you should see:
    postgis_full_version                                  
    ----------------------------------------------------------------------------------------
     POSTGIS="1.4.0" GEOS="3.1.0-CAPI-1.5.0" PROJ="Rel. 4.7.1, 23 September 2009" USE_STATS
    (1 row)
    


    To exit the PostgreSQL prompt do \q.

    Creating the Database Structure

    With the database "container" in-place we can go ahead and create the database structure. In our case we're just going to build two tables.  The main table will be wikipts and it will contain the spatial references and other information from the wiki articles.  The point_type table will be a reference table containing allowable types for each point.  Following good database design practices there are also sequences to automatically populate the rowids, and a trigger to automatically keep the last modified timestamp current.  The script to create the database is listed below.  The easiest way (or at least one of the ways) to create the database is to write the script to a file (i.e. create_spatialwiki_database.sql) and then run it against the new database as follows:

    sudo psql -U postgres -d spatialwiki -f create_spatialwiki_database.sql
    

    The script looks like this:
    --
    -- PostgreSQL code to setup the spatialwiki database.
    --
    --
    -- drop objects if they exist in the right order
    --
    DROP TABLE IF EXISTS wikipts;
    DROP TABLE IF EXISTS point_type;
    --
    -- create a function to keep the last modified date updated automatically
    --
    CREATE OR REPLACE FUNCTION update_lastmodified_column() 
            RETURNS TRIGGER AS '
      BEGIN
        NEW.timestamp_lastmodified_utc = NOW();
        RETURN NEW;
      END;
    ' LANGUAGE 'plpgsql';
    --
    -- point_type table
    --
    DROP SEQUENCE IF EXISTS point_type_rowid;
    CREATE SEQUENCE point_type_rowid START 1;
    CREATE TABLE point_type
    (
      rowid INTEGER PRIMARY KEY DEFAULT nextval('point_type_rowid'),
      name VARCHAR(254) NOT NULL UNIQUE,
      description VARCHAR(8000),
      timestamp_loaded_utc TIMESTAMP NOT NULL DEFAULT current_timestamp,
      timestamp_lastmodified_utc TIMESTAMP NOT NULL DEFAULT current_timestamp
    );
    --
    -- build wikipts table
    --
    DROP SEQUENCE IF EXISTS wikipts_rowid;
    CREATE SEQUENCE wikipts_rowid START 1;
    CREATE TABLE wikipts
    (
      rowid INTEGER PRIMARY KEY DEFAULT nextval('wikipts_rowid'),
      article_name VARCHAR(2000) NOT NULL UNIQUE,
      article_id INTEGER NOT NULL UNIQUE,
      point_type_fk INTEGER NOT NULL REFERENCES point_type,
      timestamp_loaded_utc TIMESTAMP NOT NULL DEFAULT current_timestamp,
      timestamp_lastmodified_utc TIMESTAMP NOT NULL DEFAULT current_timestamp
    );
    --
    -- add the geometry column
    --
    SELECT AddGeometryColumn('wikipts', 'geom', 4326, 'POINT', 2);
    --
    -- add triggers to keep the last modified date updated automatically
    --
    CREATE TRIGGER update_lastmodified BEFORE UPDATE
      ON point_type FOR EACH ROW EXECUTE PROCEDURE
      update_lastmodified_column();
    CREATE TRIGGER update_lastmodified BEFORE UPDATE
      ON wikipts FOR EACH ROW EXECUTE PROCEDURE
      update_lastmodified_column();

    Note the AddGeometryColumn() section of the script that adds the point geometry column with coordinate system = 4326 which is WGS84 lat-long.

    Adding Test Data

    The short SQL script below can be used to load some test data. Write it to a .sql file and run the script per the example above that was used to create the database structure. Note the ST_GeomFromText() function that is used to load the lat-long values into the geometry column, and the "SELECT rowid FROM point_type..." that is used to load the proper rowid link to the point type which is Test in this case.

    --
    -- point types
    --
    INSERT INTO point_type (name, description) VALUES ('Test', 'Test Points');
    INSERT INTO point_type (name, description) VALUES ('Pegmatite', 'Coarse grained intrusive hosted rare earth or gemstone deposit.');
    INSERT INTO point_type (name, description) VALUES ('Porphyry', 'Intrusive hosted, distinctly textured and zoned mineral deposit.');
    --
    -- test points (FOSS4G meeting locations)
    --
    INSERT INTO wikipts (article_name, article_id, geom, point_type_fk) VALUES (
      'FOSS4G 2011 - Denver', -1,
      ST_GeomFromText('POINT(-104.988790 39.741850)', 4326), 
      (SELECT rowid FROM point_type WHERE name = 'Test')
    );
    INSERT INTO wikipts (article_name, article_id, geom, point_type_fk) VALUES (
      'FOSS4G 2010 - Barcelona', -2,
      ST_GeomFromText('POINT(2.15170 41.37237)', 4326), 
      (SELECT rowid FROM point_type WHERE name = 'Test')
    );
    INSERT INTO wikipts (article_name, article_id, geom, point_type_fk) VALUES (
      'FOSS4G 2009 - Sydney', -3,
      ST_GeomFromText('POINT(151.199158 -33.873375)', 4326), 
      (SELECT rowid FROM point_type WHERE name = 'Test')
    );
    INSERT INTO wikipts (article_name, article_id, geom, point_type_fk) VALUES (
      'FOSS4G 2008 - Cape Town', -4,
      ST_GeomFromText('POINT(18.427470 -33.916017)', 4326), 
      (SELECT rowid FROM point_type WHERE name = 'Test')
    );
    INSERT INTO wikipts (article_name, article_id, geom, point_type_fk) VALUES (
      'FOSS4G 2007 - Victoria', -5,
      ST_GeomFromText('POINT(-123.366856 48.421684)', 4326),
      (SELECT rowid FROM point_type WHERE name = 'Test')
    );
    


    Setup a View

    In order to make our points click-able with the SpatialWiki Extension we're also going to setup a view that contains the right fields in the right order.  The SQL to do this is:
    CREATE OR REPLACE VIEW view_wikipts  AS
    SELECT article_name, article_id, geom, name
    FROM wikipts, point_type
    WHERE wikipts.point_type_fk = point_type.rowid

    The view that's created just needs to contain in-order the article name, the article id, the geometry column, and the point type.


    Viewing the Data in Quantum GIS

    Quantum GIS (QGIS) is a great cross-platform free and open source desktop GIS system that can directly read PostGIS data so we'll use it here to quickly display the test points and verify that everything in the database is working properly.  Start QGIS and setup a new PostGIS database connection similar to the example shown below.





















    Once the connection is setup you can test it and open it.  You should see the new wikipts available to add to the map.  The test points with a simple world outline background are shown in the figure below.  Seems like the FOSS4G meeting in Denver is the first one in history that is not right on the coast!














    See the next article on Installing GeoServer.

    Spatial Wiki 6 - Install PostGIS

    With PostgreSQL installed and setup it's time to add spatial capabilities by installing PostGIS.  This is easily accomplished by running:
    sudo apt-get install postgresql-8.4-postgis

    Once installed you need to modify the PostgreSQL file that controls how a user logs in. See more information here:

    http://www.depesz.com/index.php/2007/10/04/ident/

    At the end of the file you need to change "ident" login types to md5 login types.
    sudo vi /etc/postgresql/8.4/main/pg_hba.conf

    For example this is before:
    # Database administrative login by UNIX sockets
    local   all         postgres                          ident
    
    # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
    
    # "local" is for Unix domain socket connections only
    local   all         all                               ident
    
    # IPv4 local connections:
    host    all         all         127.0.0.1/32          md5
    # IPv6 local connections:
    host    all         all         ::1/128               md5

    And this is what it should look like after:
    # Database administrative login by UNIX sockets
    local   all         postgres                          md5
    
    # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
    
    # "local" is for Unix domain socket connections only
    local   all         all                               md5
    
    # IPv4 local connections:
    host    all         all         127.0.0.1/32          md5
    # IPv6 local connections:
    host    all         all         ::1/128               md5

    When the changes are complete restart PostgreSQL with:
    sudo /etc/init.d/postgresql-8.4 restart

    See the next article on Setting up the Spatial Database.


    Spatial Wiki 5 - Setup PostgreSQL

    Following on building our Spatial Wiki we've already installed PostgreSQL when we setup the Amazon EC2 server, but we need to do a few more things to make sure it's setup properly for our use.

    Changing the postgres User Password

    When PostgreSQL is installed the postgres user is automatically created, we just need to login to PostgreSQL and change the password.

    Login to PostgreSQL with the postgres user:
    sudo -u postgres psql postgres

    And then from the PostgreSQL prompt do:
    \password postgres

    You will be prompted for the password. Exit postgres with \q when done.

    Setup for Remote Access

    We're going to want to setup PostgreSQL for remote access, for example so we can connect our QGIS desktop client directly to the database and display points from the spatial wiki.  The first part of the setup was allowing traffic on port 5432 that we took care of as part of the server setup.

    The next steps are to configure PostgreSQL to allow connections from remote IPs and to allow TCP/IP sockets, a good overview of this process is here:

    http://www.cyberciti.biz/tips/postgres-allow-remote-access-tcp-connection.html

    First to allow connections from any IP:
    sudo vi /etc/postgresql/8.4/main/pg_hba.conf

    Change the host line as shown below (0.0.0.0/0 means can connect from any IP)
    # IPv4 local connections:
    # -default- host    all         all         127.0.0.1/32          md5
    host    all         all         0.0.0.0/0          md5

    See also good notes on this topic here:

    http://archives.postgresql.org/pgsql-general/2010-04/msg00865.php

    Then allow TCP/IP sockets:
    sudo vi /etc/postgresql/8.4/main/postgresql.conf

    Uncomment/setup the listen_addresses line so it looks like this:
    listen_addresses = '*'          # what IP address(es) to listen on;

    Next restart PostgreSQL, make sure the firewalls are setup and you're good to go.  We'll also be testing the database setup later in this Blog when we setup the spatial database.

    Restart PostgreSQL 8.4 on Ubuntu 10.04 with:
    sudo /etc/init.d/postgresql-8.4 restart

    Note that on your system the restart might be slightly different, for example:
    sudo /etc/init.d/postgresql restart

    Setup for PHP

    Because we'll be writing some PHP code to interact with our spatial database in PostgreSQL we need to install the PHP libraries for PostgreSQL. The first line installs the pgsql extension for PHP, the second line restarts the Apache server.

    sudo apt-get install php5-pgsql
    sudo /etc/init.d/apache2 restart

    For good articles on using PHP with PostgreSQL see:

    http://www.techrepublic.com/blog/howdoi/how-do-i-use-php-with-postgresql/110

    See the next step on Installing PostGIS.


    Sunday, August 14, 2011

    Spatial Wiki 4 - Install MediaWiki

    With a new Amazon EC2 Web Server Setup it's time to get the wiki part of our Spatial Wiki operational and for this we'll be installing MediaWiki.  For anyone that's not familiar with MediaWiki it's a popular choice for wikis, it's written in PHP, and it typically connects to a backend MySQL database where all the wiki content (except uploads) is maintained.  Wikipedia is powered by MediaWiki and there are hundreds of extensions available which speak to scalability, supportability, and extensibility ... aside from all this it's pretty easy to install and configure and extremely capable.

    To install and configure MediaWiki login to the EC2 server and do the following:
    apt-cache search mediawiki

    This will search the local cache of applications that can be installed for anything that contains mediawiki. There are other ways to go about this, but this will typically locate an application that has already be setup and configured for the specific flavor of Ubuntu that you're running and then allow you to easily install it from the on-line repositories. When I run the search on the new EC2 server the package I want looks like it might be:

    mediawiki - website engine for collaborative work

    I can get more information about the package in question by doing:
    apt-cache show mediawiki

    And then install it with:
    sudo apt-get install mediawiki

    Once MediaWiki is installed follow the configuration steps listed here:

    https://help.ubuntu.com/10.04/serverguide/C/mediawiki.html

    Specifically, edit the Apache configuration file for MediaWiki:
    sudo vi /etc/apache2/conf.d/mediawiki.conf

    Just uncomment the line # Alias /mediawiki /var/lib/mediawiki, save the file and restart Apache with:
    sudo /etc/init.d/apache2 restart

    The next part of the configuration is via a webpage on your server, navigate to the new wiki webpage and follow the steps, for example starting at:

    http://[your server IP]/mediawiki/

    Use all the defaults and enter required information, note specifically:

    • Give the wiki a reasonable name, SpatialWiki for example
    • Enter and record an admin password for the WikiSysop user, this will be the admin account for MediaWiki
    • Enter and record a password for the wikiuser account into the MySQL wiki database, this account will be created in MySQL
    • Select the option and enter the root password for MySQL, this account will be used to create the wikiuser account in MySQL
    • A good idea to give the wiki tables a prefix, for example sw_.  This isn't critical, but my be useful if we are add tables of our own that we want to be able to easily differentiate.

    When the setup is complete move the MediaWiki configuration file as follows:
    sudo mv /var/lib/mediawiki/config/LocalSettings.php /etc/mediawiki/.

    You'll be able to get to your new wiki at:

    http://[Your Server IP]/mediawiki/index.php/Main_Page

    It will look like:




















    See the next step on Setting up PostgreSQL.


    Monday, August 8, 2011

    Spatial Wiki 3 - Server Setup

    Following up on our Spatial Wiki Objectives and a bit of Research the first thing we're going to do is setup an Amazon EC2 server to host the wiki.  There are lots of on-line tutorials on setting up an Amazon EC2 instance so I'll focus on the particulars of getting an Ubuntu server setup specifically for our purposes.

    To setup a new server start by signing into the AWS Management Console, then goto the EC2 tab and select the region to setup the server in.  Use the Launch Instance to button to create a new instance.  For the tutorial we're going to use Ubuntu 10.04 LTS Lucid Lynx, and an official Canonical AMI.  When you launch the instance goto the "Community AMIs" and search for the appropriate AMI for your region from the list of official AMIs.  In this case I am using an AMI tagged ami-89c694cc that is a 64bit image in the US West region.

    Once started the Launch Instance wizard will guide you through setting up user data, a key pair, and a security group.  You don't need to supply any user data, but you'll want to give the server a descriptive name, create a key pair (essential for logging into the server), and create a new security group.  In this example I've named the server "FOSS4G Spatial Wiki 1", created a key pair spatialwiki.pem which I downloaded, and created a security group called spatialwiki ... overall not too creative with names.

    When setting up the security group you want to open up the following ports for inbound traffic:
    • 22 for SSH
    • 80 for HTTP
    • 5432 for PostgreSQL remote accesss
    • 8080 for Tomcat
    Once the instance is launched it should look something like this in the AWS Management Console:








    It's not required, but I like to create an Elastic IP address to associate with the server.  To do this select the Elastic IPs menu option in the management console and use the buttons to create a new Elastic IP and associate it with the server.  The Elastic IP is somewhat more permanent than the server's IP and can be linked to a different back-end server if/when you need to replace the server.

    See also the Ubuntu EC2 Starters Guide

    To login to the server use SSH from Linux or Mac, or PuTTY or equivalent from a Windows computer. From the AWS Management Console if you highlight the instance and do "Instance Actions" and "Connect To" it will show details on how to connect.  Typically too you have to protect the key file before connecting so I've done something like this from a Mac terminal window:

    chmod 400 spatialwiki.pem
    ssh -i spatialwiki.pem ubuntu@ec2-50-18-115-52.us-west-1.compute.amazonaws.com

    With this you are connecting specifically as the user ubuntu via the identity file spatialwiki.pem.

    Once connected to the server we'll get the first set of software installed using the setup tools on the new server.  The details will be listed, but specifically do the following when logged into the new server:

    sudo apt-get update
    sudo tasksel --section server

    The first command updates the list of available software and the second command launches an application that allows you to select additional packages to install. The packages that are already installed are ticked with asterisks. Highlight and install the following additional packages:
    • LAMP server (specifically includes Apache, MySQL and PHP)
    • PostgreSQL database
    Click OK to install the packages.  The installation should run smoothly and you will be prompted to enter a root password for MySQL.

    Once the software is installed you will have a fully functional basic web server that will have a default webpage that you should be able to view from anywhere using the IP address of the EC2 server you created, for example http://[Your Server IP], and it will look like this:








    If it doesn't work ... some good things to try/check are:
    • The security group on the server (in the AWS Management Console) needs to allow inbound port 80 traffic.
    • Be sure your firewall and/or proxy isn't blocking access to a generic IP based server.
    • Reboot the server via the AWS Management Console to make sure the web server started properly.
    The next step is to Install MediaWiki.

    Spatial Wiki 2 - Research

    With the Spatial Wiki Objectives in-place it's time to look around for the tools that we'll use.  I'm already familiar with MediaWiki and the various tools on the spatial side (these will be discussed in subsequent posts), but what I'm missing is any knowledge of how they can be linked together ... specifically any standard ways to code spatial metadata in a wiki page, and spatial extensions to MediaWiki that might already do what is required.  So, some quick Google searching on things like "spatial wiki" and "geo wiki" leads me to:

    The Computational Geowiki: What, Why and How, this is an on-line paper with lots of good ideas about what a geowiki should do.

    Geographical Coordinates in Wikipedia, this is the starting point for how coordinates are managed in Wikipedia, especially via various templates.  See also the Style Guide for Geographical Coordinates.

    See the next article on Server Setup

    Wednesday, August 3, 2011

    Spatial Wiki 1 - Objectives

    This is the first article in a series on building a Spatial Wiki.  The notes are being put together for a Tutorial to be presented at the 2011 FOSS4G Conference in Denver, Colorado.

    It's good to start with a direction so here are some quick objectives:
    • Spatial References - Wiki articles can be spatially referenced to a point at least, perhaps a line or polygon.  The spatial references will go into a true spatial database, something we can display with all our other GIS data.
    • Spatial Search - Front and center in the Wiki there needs to be spatial searching capabilities, for example a map on the homepage showing the locations of all the articles, the kind of thing when you click on a point you can get more information and goto the article associated with the reference.
    Here is the abstract for the talk:

    Wiki and Spatial tools make a powerful combination for building and maintaining location based knowledge. The workshop will present a complete exercise, building a Spatial Wiki from the ground-up hosted on an Amazon EC2 instance using 100% free and open source tools including Ubuntu, MediaWiki, Apache, GeoServer, OpenLayers, and PostGIS. Articles in the Wiki will be spatially enabled, and discoverable via the Wiki's built-in search capabilities, or a click-able map index. Spatial reference(s) will be maintained in a back-end spatial database and updated dynamically via markup in the article itself. GeoServer will be used to serve the spatial data and presented in the Wiki articles using OpenLayers with background data from OpenStreetMap, Google Maps, Bing, or similar. Relevant MediaWiki extensions, server-side scripts and other "enablers" will be made available as part of the workshop, but will not be covered in detail. Attendees can expect to depart the course with their own fully operational Spatial Wiki along with a basic knowledge of a variety of excellent free and open source tools.

    See the next article on Spatial Wiki Research