An interactive web‐viewer for historic maps, created through a partnership between CSU Libraries Archives & Special Collections and the Geospatial Centroid. This project is made possible by the generous support of John Garing and Janice Hill.
Special thanks to Kasper Evenson, Bronson Griswold, Violet Sparks, and Cy Spears for their care in georeferencing these maps and for their metadata support.
- Overview
- Project Features
- Interface Features
- Getting Started
- Directory Structure
- Usage
- Development
- Build & Deployment
- License
- Acknowledgements & Contacts
- Future Roadmap
The Historic Map Explorer is a lightweight, browser‑based map viewer for exploring historic map imagery via a simple web interface. The interface design is based on Scholars GeoPortal and the imagery source is made possible through the Allmaps IIIF georeferencing extension, Allmaps Editor, and the Leaflet WarpedMapLayer library. This application relies on an IIIF Image Server, which in this case, uses a CONTENTdm instance archives.mountainscholar.org.
- Static HTML application, enables free hosting via GitHub Pages
- CSV data source, offers a human-readable, easy to update, and host database solution.
- Configuration via app.csv, controls how the data source is represented (i.e. field to display, filter, etc)
- Python scripts for data prep, see associated README.md
- Build with internationalization in mind using i18n
- MIT licensed
- Data filtering via:
- Year search
- Map bounds
- Any other metadata field, determined within app.csv
- Layer display, both on the map, and via a separate display area
- Layer adjustments includes
- Transparency
- Color Keying (based on dominant image color)
- Reordering
- Side by Side image masking
- Metadata Access
- Child record nesting, allowing a parent record to group child
- Geolocation
git clone https://github.com/GeospatialCentroid/historic_map_viewer.git
cd historic_map_viewer
python -m http.server 8000
css/ - styles sheets
js/ - javascript libraries
data/ - data source folder
i18n/ - internationalization
python_scripts/ -- python scripts for populating data source columns
index.html - main entry point to the program
- Place map data table into
data/ - Amend data file to conform to requirements
- Update app.csv
The web interface has been built to support a tabular data source with any columns. Aside from a required unique column id for each record, there are specific columns that enable enhanced functionality.
It should be noted that a unique id column is required for each row. Since CONTENTdm IDs are only unique within their collection, a composite key is required. This has been achieved by combining the collection column, plus a "-", followed by the CONTENTdm number (e.g p17393coll70-3).
To support parent child relationships, commonly referred to as composite records in CONTENTdm, a comma separated self-referencing column is needed. To populate this column via automation, use the python_scripts/fetch_children.py script.
A column containing GeoJSON allows filtering a map using its footprint. To populate this column via automation, use the python_scripts/bounds_inject.py script.
A column containing latitude and longitude values enables the web map to show the location of scanned maps. To populate this column via automation, use the python_scripts/extract_lat_lng.py script. Note that you'll first need to have the geojson values populated.
| Column | Description | Example |
|---|---|---|
| name | Display name of the application or dataset configuration | Colorado State University Libraries Historic Map Viewer |
| type | Type/category of dataset being described | section |
| data | Path to the source data file and its format | "data/Historic Maps.csv,csv" |
| id_col | Column in the data file used as the primary identifier | CONTENTdm number |
| unique_id_col | A guaranteed-unique identifier column in the dataset | id |
| title_col | Column containing the title to display for each item | Title |
| separated_cols | Comma-separated list of columns whose values contain multiple delimited items | Date Search,Category,Keywords |
| filter_cols | Columns available as filters in the UI | Category,Keywords,Scale,Creator |
| annotation_col | Column containing georeferencing or annotation text | Georeference Annotation |
| image_col | Column used to get thumbnail image or primary image reference | thumbnail |
| show_cols | Columns shown in a details view | Creator,Date,Description,Abstract,Respository, Rights,Rights DPLA,Permanent Identifier,Related Resource,Date created,Date modified,By,georeference,Category |
| year_start_col | Column used to derive the start year for temporal filtering | Date Search |
| date_col | Column containing the human-readable date | Date |
| creator_col | Column containing creator/author information | Creator |
| base_url | Base URL for CONTENTdm API single-item requests | https://archives.mountainscholar.org/digital/api/singleitem/collection/ |
| iiif_base_url | Base URL used for constructing IIIF image references | IIIF |
| ref_url | Column containing the reference URL to the digital item | "Reference URL" |
| include_col | Columns whose content determines whether item(s) should be included | "Georeference Annotation,children" |
| geojson_col | Column containing GeoJSON for use in filtering via map footprints | geojson |
| lat_lng_col | Column containing the Latitude and longitude values | latitude,longitude |
| disclaimer | HTML block displayed intro message in the application | Welcome to the Historic Map Viewer! |
- Organized static web app
- Contributions welcome
MIT License.
Created by Kevin Worthington, Colorado State University, Geospatial Centroid Georeferencing and metadata support Kasper Evenson, Bronson Griswold, Violet Sparks, and Cy Spears, Geospatial Centroid Interns Extra special thanks to Kasper Evenson for developing a keyword guide and for helping improve the metadata.
Enhancements supported by OpenAI. (2025). ChatGPT (Dec 3th version) [Large language model]. https://chat.openai.com/chat
The source code used in this project leverages earlier work from the Geoportal Manager and the Crop wild relatives data access interface.
- Download Map button
- Interface state retention
- Map sharing
- Undo redo functionality
- Analytics