One thing I've always found useful about USGS website is the neat "latest earthquakes" listing given each day. So one day I said to myself, "boy, wouldn't it be great if this type of information were available as a map for users to embed in their application?"
The Open Geospatial Consortium (OGC) produces specifications web mapping, geographic information and processing. Perhaps the most used to date is the Web Map Service specification, which defines a common interface to interact with a server's geographic data through visualizations of maps. The Web Feature Service allows for users to access raw, actual data in Geography Markup Language (GML), which is an open XML format for geospatial data. Using common standards allows for maps and data to be delivered as "services", as opposed to static data download. This lets applications developers connect to geospatial data dynamically and fetch for a given area of interest, temporal slice, or attributional query.
There are many software tools which support the WMS specification. The neat thing about common standards is that servers can communicate with eachother regardless of what kind of software is used a given organization. In this particular example, I've chosen to use the University of Minnesota MapServer software. MapServer supports a number of OGC specifications, and can be run on a number of given operating systems. In addition, MapServer is free, open source software.
So, what I'm going to do is use MapServer to serve the latest earthquake data through a WMS server. Here are the steps involved:
use Perl script to format the data to GML
configure mapfile to serve GML as a WMS layer
add reference layers through WMS
publish URL
Data Formatting
MapServer accepts a number of different geospatial data formats, including GML. I wrote a quick Perlscript which fetches the remote ASCII records from the USGS website and converts them to GML as a format MapServer, and any GML aware software, can work with. The neat thing about the output GML is that, as an XML format, it is interoperable and self-describing, which means applications which support GML can work with this data. Also, any XML processor can work with and process this data. Nice!
MapServer also works with shapefiles as input. Shapefiles are a binary encoded set of files which store geospatial data. Shapefiles are useful when GML becomes too large to work with. Since this is a small dataset, GML is a nice, application neutral, human readable file format to work with. GML can be thought of as a data transfer format over the Internet. We'll see later how MapServer can read a shapefile as a WFS and return GML on the fly. The Perlscript to generate a shapefile is very similar to GML, except that we use Mapscript, a module which exposes MapServer functions in a number of languages, such as Java, PHP, and, in this case, Perl.
As the source data changes with time, I've opted to schedule a process to run every 10 minutes to freshen the data.
Mapfile Configuration
MapServer provides a CGI standalone process which is driven by a configuration file, called a "mapfile". Mapfiles contain layer information, data connections, area of interest, and so on.
So I wrote the mapfile to point to the output GML data. The mapfile is setup to act as an OGC WMS and OGC WFS.
At this point, any WMS client can make a request to MapServer as a WMS and have a map of the earthquakes returned to them. Here's a sample GetMap request:
and here is the image which is returned by the URL:
At this point, any WMS client can connect to this data and integrate into their application with other data.
MapServer also acts as a WMS client, which means MapServer itself can connect to other WMS services and fetch maps for you, which you can return to your client. So the next step we take is to add some reference layers (imagery, political boundaries, coastlines). These reference layers themselves come from remote WMS servers. Here's a GetMap request which shows the earthquake data atop the reference data:
Pretty neat and not alot of effort! One can make this as simple or as complex as they wish. The most simple thing to do is to add this as an HTML image tag in your webpage:
Esri devMeetUps - locate a developer meetup taking place in a city near you
ERDAS Webinars - Register for a free, online webinar from ERDAS
ILMF 2012 - International LiDAR Mapping Forum, Denver, Colorado, Jan 23-25, 2012
Esri Dev Summit - The Esri Developer Summit (DevSummit) brings together developers and GIS professionals from all over the globe. March 26-29, 2012, Palm Springs, CA
Where2.0 - where the people working on and using location technologies come together to explore best practices and emerging trends in software development, tools, business strategies, and marketing. April 2-4, 20112, San Francisco, CA