MARPLOT: Building a Desktop GIS for Emergency Response from FOSS Components
MARPLOT (http://response.restoration.noaa.gov/marplot) is a general-purpose GIS designed for emergency responders and planners, and it serves as the mapping component for a suite of software called CAMEO developed jointly by the National Oceanic and Atmospheric Administration and the Environmental Protection Agency. MARPLOT has a sizable user base with over 20 thousand downloads in 2015. The program's core audience presents a challenge, because MARPLOT needs to be able to work offline in an emergency situation where internet may not be available. At the same time, MARPLOT needs to be able to take advantage of modern web technologies and to be designed in such a way that a future version of the program could be deployed as a multi-user web application.
The MARPLOT program was first created in the early 1990s, and it has undergone many revisions in the years since then. This talk will discuss the program's latest incarnation, the MARPLOT 5 series, which entailed a complete rewrite of the code using many FOSS components and a new GUI based on user-centered design principles. Program features include supporting large numbers of objects on each layer, layers with heterogeneous object types, many file types supported for import and export, customizable legends and on-map annotation boxes, flexible per-object graphics settings, a wide variety of data-based and distance-based searches and polygon constructions, support for a large number of raster maps formats, support for WMS layers, intuitive management of downloaded tiles for offline use, full-session undo/redo, and touch-screen operability.
The server is notable in that it is written "from scratch" instead of relying on MapServer or another GIS server engine. It is written in Python and C++, using the CherryPy web server, with various higher level functions in Python and using a C++ Python extension for the many parts of the program that need to be fast even for millions of objects (drawing, searching and sorting, importing and exporting). The C++ code makes use of many FOSS components, including the GDAL library for raster file access, the GEOS library for polygon construction, and the POCO libraries for handling cross-platform files and paths, XML, and JSON. The C++ code also uses the CImg library (with a number of custom modifications) for drawing the user data on tiles.