+# MapReader
+> [!IMPORTANT] A computer vision pipeline for exploring and analyzing images at scale
-## What is MapReader?
+
+[![All Contributors](https://img.shields.io/badge/all_contributors-8-orange.svg?style=flat-square)](#contributors)
+
-
-
-
+![PyPI](https://img.shields.io/pypi/v/MapReader)
+![License](https://img.shields.io/badge/License-MIT-yellow.svg)
+![Integration Tests badge](https://github.com/Living-with-machines/MapReader/actions/workflows/mr_ci.yml/badge.svg)
+![DOI](https://zenodo.org/badge/430661738.svg)
+![CodeCov](https://codecov.io/github/Living-with-machines/MapReader/graph/badge.svg?token=38GQ3O1GB5)
+
+## Table of Contents
+
+- [MapReader](#mapreader)
+ - [Table of Contents](#table-of-contents)
+ - [What is MapReader?](#what-is-mapreader)
+ - [Overview](#overview)
+ - [MapReader pipeline](#mapreader-pipeline)
+ - [Documentation](#documentation)
+ - [What is included in this repo?](#what-is-included-in-this-repo)
+ - [How to cite MapReader](#how-to-cite-mapreader)
+ - [Acknowledgements](#acknowledgements)
+ - [Contributors](#contributors)
+
+---
+
+
+## What is MapReader?
MapReader is an end-to-end computer vision (CV) pipeline for exploring and analyzing images at scale.
+
+
MapReader was developed in the [Living with Machines](https://livingwithmachines.ac.uk/) project to analyze large collections of historical maps but is a _**generalizable**_ computer vision pipeline which can be applied to _**any images**_ in a wide variety of domains.
## Overview
@@ -44,30 +46,28 @@ MapReader is a groundbreaking interdisciplinary tool that emerged from a specifi
### MapReader pipeline
-
-
-
-
-The MapReader pipeline consists of a linear sequence of tasks which, together, can be used to train a computer vision (CV) classifier to recognize visual features within maps and identify patches containing these features across entire map collections.
+
-See our [About MapReader](https://mapreader.readthedocs.io/en/latest/About.html) page to learn more.
+See our [Introduction to MapReader](https://mapreader.readthedocs.io/en/latest/introduction-to-mapreader/) page to learn more.
## Documentation
-The MapReader documentation can be found at https://mapreader.readthedocs.io/en/latest/index.html.
+The MapReader documentation can be found at https://mapreader.readthedocs.io/en/latest/.
-**New users** should refer to the [Installation instructions](https://mapreader.readthedocs.io/en/latest/Install.html) and [Input guidance](https://mapreader.readthedocs.io/en/latest/Input-guidance.html) for help with the initial set up of MapReader.
+**New users** should refer to the [Installation instructions](https://mapreader.readthedocs.io/en/latest/getting-started/installation-instructions/index.html) and [Input guidance](https://mapreader.readthedocs.io/en/latest/using-mapreader/input-guidance/) for help with the initial set up of MapReader.
-**All users** should refer to our [User Guide](https://mapreader.readthedocs.io/en/latest/User-guide/User-guide.html) for guidance on how to use MapReader. This contains end-to-end instructions on how to use the MapReader pipeline, plus a number of worked examples illustrating use cases such as:
+**All users** should refer to our [User Guide](https://mapreader.readthedocs.io/en/latest/using-mapreader/) for guidance on how to use MapReader. This contains end-to-end instructions on how to use the MapReader pipeline, plus a number of worked examples illustrating use cases such as:
- Geospatial images (i.e. maps)
- Non-geospatial images
- **Developers and contributors** may also want to refer to the [API documentation](https://mapreader.readthedocs.io/en/latest/api/index.html) and [Contribution guide](https://mapreader.readthedocs.io/en/latest/Contribution-guide/Contribution-guide.html) for guidance on how to contribute to the MapReader package.
+ **Developers and contributors** may also want to refer to the [API documentation](https://mapreader.readthedocs.io/en/latest/in-depth-resources/api/mapreader/) and [Contribution guide](https://mapreader.readthedocs.io/en/latest/community-and-contributions/contribution-guide/) for guidance on how to contribute to the MapReader package.
**Join our Slack workspace!**
Please fill out [this form](https://forms.gle/dXjECHZQkwrZ3Xpt9) to receive an invitation to the Slack workspace.
@@ -95,7 +95,6 @@ If you use MapReader in your work, please cite both the MapReader repo and [our
- Kasra Hosseini, Daniel C. S. Wilson, Kaspar Beelen, and Katherine McDonough. 2022. MapReader: a computer vision pipeline for the semantic exploration of maps at scale. In Proceedings of the 6th ACM SIGSPATIAL International Workshop on Geospatial Humanities (GeoHumanities '22). Association for Computing Machinery, New York, NY, USA, 8–19. https://doi.org/10.1145/3557919.3565812
- Kasra Hosseini, Rosie Wood, Andy Smith, Katie McDonough, Daniel C.S. Wilson, Christina Last, Kalle Westerling, and Evangeline Mae Corcoran. “Living-with-machines/mapreader: End of Lwm”. Zenodo, July 27, 2023. https://doi.org/10.5281/zenodo.8189653.
-
## Acknowledgements
This work was supported by Living with Machines (AHRC grant AH/S01179X/1) and The Alan Turing Institute (EPSRC grant EP/N510129/1).
@@ -106,10 +105,6 @@ Maps above reproduced with the permission of the National Library of Scotland ht
## Contributors
-
-[![All Contributors](https://img.shields.io/badge/all_contributors-8-orange.svg?style=flat-square)](#contributors-)
-
-
diff --git a/docs/source/About.rst b/docs/source/About.rst
deleted file mode 100644
index 6c267a17..00000000
--- a/docs/source/About.rst
+++ /dev/null
@@ -1,87 +0,0 @@
-About MapReader
-================
-
-What is MapReader?
--------------------
-
-MapReader is an end-to-end computer vision (CV) pipeline for exploring and analyzing images at scale.
-
-What is unique about MapReader?
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-MapReader is based on the 'patchwork method' in which whole map images are sliced into a grid of squares or 'patches':
-
-.. image:: figures/patchify.png
-
-This unique way of pre-processing map images enables the use of image classification to identify visual features within maps, in order to answer important research questions.
-
-What is 'the MapReader pipeline'?
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The MapReader pipeline consists of a linear sequence of tasks:
-
-.. image:: figures/pipeline_explained.png
-
-Together, these tasks can be used to train a computer vision (CV) classifier to recognize visual features within maps and identify patches containing these features across entire map collections.
-
-What kind of visual features can MapReader help me identify?
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-In order to train a CV classifier to recognize visual features within your maps, your features must have a homogeneous visual signal across your map collection (i.e. always be represented in the same way).
-
-Why use MapReader?
--------------------
-
-MapReader becomes useful when the number of maps you wish to analyze exceeds the number which you (or your team) are willing to/capable of annotating manually.
-
-This exact number will vary depending on:
-
-- the size of your maps,
-- the features you want to find,
-- the skills you (or your team) have,
-- the amount of time at your disposal.
-
-Deciding to use MapReader, which uses deep learning computer vision (CV) models to predict the class of content on patches across many sheets, means weighing the pros and cons of working with the data output that is inferred by the model.
-Inferred data can be evaluated against expert-annotated data to understand its general quality (are all instances of a feature of interest identified by the model? does the model apply the correct label to that feature?), but in the full dataset there *will necessarily be* some percentage of error.
-
-MapReader creates output that you can link and analyze in relation to other geospatial datasets (e.g. census, gazetteers, toponyms in text corpora).
-
-Who might be interested in using MapReader?
---------------------------------------------
-
-MapReader might be useful to you if:
-
-- You have access to a large collection of maps and want to identify visual features within them without having to manually annotating each map.
-- You want to quickly test different labels to help refine a research question that depends on identifying visual features within maps before/without committing to manual vector data creation.
-- Your maps were created before surveying accuracy reached modern standards, and therefore you do not want to create overly precise geolocated data based on the content of those maps.
-
-What skills/knowledge will I need to use MapReader?
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-* Understanding of your map collection and knowledge of visual features you would like to identify within your maps
-* Basic understanding of how to use your terminal
-* Basic python
-* Basic understanding of machine learning and computer vision (CV) methodology
-
-What are the inputs and outputs of each stage in the MapReader pipeline?
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Download
-^^^^^^^^^
-.. image:: figures/in_out_download.png
- :width: 600px
-
-Load
-^^^^^
-.. image:: figures/in_out_load.png
- :width: 600px
-
-Annotate
-^^^^^^^^^
-.. image:: figures/in_out_annotate.png
- :width: 600px
-
-Classify (Train and Predict)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-.. image:: figures/in_out_classify.png
- :width: 600px
diff --git a/docs/source/Input-guidance.rst b/docs/source/Input-guidance.rst
deleted file mode 100644
index d6d72218..00000000
--- a/docs/source/Input-guidance.rst
+++ /dev/null
@@ -1,187 +0,0 @@
-Input Guidance
-===============
-
-.. contents:: Table of Contents
- :depth: 2
- :local:
-
-Input options
---------------
-
-The MapReader pipeline is explained in detail :doc:`here `.
-The inputs you will need for MapReader will depend on where you begin within the pipeline.
-
-Option 1 - If the map(s) you want have been georeferenced and made available via a Tile Server
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Some GLAM institutions or other services make digitized, georeferenced maps available via tile servers, for example as raster (XYZ, or 'slippy map') tiles.
-
-Instructions for accessing tile layers from one example collection is below:
-
-- National Library of Scotland tile layers
-
-If you want to download maps from a TileServer using MapReader's ``Download`` subpackage, you will need to begin with the 'Download' task.
-For this, you will need:
-
-* A ``json`` file containing metadata for each map sheet you would like to query/download.
-* The URL of the XYZ tile layer which you would like to access.
-
-At a minimum, for each map sheet, your ``json`` file should contain information on:
-
-- the name and URL of an individual sheet that is contained in the composite layer
-- the geometry of the sheet (i.e. its coordinates), so that, where applicable, individual sheets can be isolated from the whole layer
-- the coordinate reference system (CRS) used
-
-These should be saved in a format that looks something like this:
-
-.. code-block:: javascript
-
- {
- "type": "FeatureCollection",
- "features": [{
- "type": "Feature",
- "geometry": {
- "geometry_name": "the_geom",
- "coordinates": [...]
- },
- "properties": {
- "IMAGE": "...",
- "WFS_TITLE": "..."
- "IMAGEURL": "..."
- },
- }],
- "crs": {
- "name": "EPSG:4326"
- },
- }
-
-.. Check these links are still valid
-
-Some example metadata files, corresponding to the `OS one-inch 2nd edition maps `_ and `OS six-inch 1st edition maps for Scotland `_, are provided in ``MapReader/worked_examples/persistent_data``.
-
-Option 2 - If your files are already saved locally
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you already have your maps saved locally, you can skip the 'Download' task and move straight to 'Load'.
-
-If you would like to work with georeferenced maps, you will need either:
-
-* Your map images saved as standard, non-georeferenced, image files (e.g. JPEG, PNG or TIFF) along with a separate file containing georeferencing metadata you wish to associate to these map images **OR**
-* You map images saved as georeferenced image files (e.g. geoTIFF).
-
-Alternatively, if you would like to work with non-georeferenced maps/images, you will need:
-
-* Your images saved as standard image files (e.g. JPEG, PNG or TIFF).
-
-.. note:: It is possible to use non-georeferenced maps in MapReader, however none of the functionality around plotting patches based on geospatial coordinates will be possible. In this case, patches can be analyzed as regions within a map sheet, where the sheet itself may have some geospatial information associated with it (e.g. the geospatial coordinates for its center point, or the place name in its title).
-
-Recommended directory structure
---------------------------------
-
-If you are using non-georeferenced image files (e.g. PNG files) plus a separate metadata file, we recommend setting these up in the following directory structure:
-
-::
-
- project
- ├──your_notebook.ipynb
- └──maps
- ├── map1.png
- ├── map2.png
- ├── map3.png
- ├── ...
- └── metadata.csv
-
-This is the directory structure created by default when downloading maps using MapReader's ``Download`` subpackage.
-
-Alternatively, if you are using geo-referenced image files (eg. geoTIFF files), your will not need a metadata file, and so your files can be set up as follows:
-
-::
-
- project
- ├──your_notebook.ipynb
- └──maps
- ├── map1.tif
- ├── map2.tif
- ├── map3.tif
- └── ...
-
-
-.. note:: Your map images should be stored in a flat directory. They **cannot be nested** (e.g. if you have states within a nation, or some other hierarchy or division).
-
-.. note:: Additionally, map images should be available locally or you should set up access via cloud storage. If you are working with a very large corpus of maps, you should consider running MapReader in a Virtual Machine with adequate storage.
-
-Preparing your metadata
-------------------------
-
-MapReader uses the file names of your map images as unique identifiers (``image_id`` s).
-Therefore, if you would like to associate metadata to your map images, then, **at minimum**, your metadata must contain a column/header named ``image_id`` or ``name`` whose content is the file name of each map image.
-
-To load metadata (e.g. georeferencing information, publication dates or any other information about your images) into MapReader, your metadata must be in a `pandas readable file format `_.
-
-.. note:: Many map collections do not have item-level metadata, however even the minimal requirements here (a filename, geospatial coordinates, and CRS) will suffice for using MapReader. It is always a good idea to talk to the curators of the map collections you wish to use with MapReader to see if there are metadata files that can be shared for research purposes.
-
-
-Option 1 - Using a ``csv``, ``xls`` or ``xlsx`` file
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The simplest option is to save your metadata as a ``csv``, ``xls`` or ``xlsx`` file and load it directly into MapReader.
-
-.. note:: If you are using a ``csv`` file but the contents of you metadata contains commas, you will need to use another delimiter. We recommend using a pipe (``|``).
-
-If you are loading metadata from a ``csv``, ``xls`` or ``xlsx`` file, your file should be structures as follows:
-
-+-----------+-----------------------------+------------------------+--------------+
-| image_id | column1 (e.g. coords) | column2 (e.g. region) | column3 |
-+===========+=============================+========================+==============+
-| map1.png | (-4.8, 55.8, -4.2, 56.4) | Glasgow | ... |
-+-----------+-----------------------------+------------------------+--------------+
-| map2.png | (-2.2, 53.2, -1.6, 53.8) | Manchester | ... |
-+-----------+-----------------------------+------------------------+--------------+
-| map3.png | (-3.6, 50.1, -3.0, 50.8) | Dorset | ... |
-+-----------+-----------------------------+------------------------+--------------+
-| ... | ... | ... | ... |
-+-----------+-----------------------------+------------------------+--------------+
-
-Your file can contain as many columns/rows as you like, so long as it contains at least one named ``image_id`` or ``name``.
-
-.. Add comment about nature of coordinates as supplied by NLS vs what they might be for other collections
-
-Option 2 - Loading metadata from other file formats
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-As pandas is able to read `a number of different file formats `_, you may still be able to use your metadata even if it is saved in a different file format.
-
-To do this, you will need to use python to:
-
-1. Read your file using one of pandas ``read_xxx`` methods and create a dataframe from it.
-2. Ensure there is an ``image_ID`` column to your dataframe (and add one if there is not).
-3. Pass your dataframe to MapReader.
-
-Depending on the structure/format of your metadata, this may end up being a fairly complex task and so is not recommended unless absolutely necessary.
-A conversation with the collection curator is always a good idea to check what formats metadata may already be available in/or easily made available in using existing workflows.
-
-Accessing maps via TileServers
-------------------------------
-
-National Library of Scotland
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-It is possible to bring in any other georeferenced layers from the National Library of Scotland into MapReader.
-To do this, you would need to create a TileServer object and specify the metadata_path (the path to your metadata.json file) and the download_url (the WMTS or XYZ URL for your tileset) for your chosen tilelayer.
-
-`This page `__ lists some of the NLS's most popular georeferenced layers and provides links to their WMTS and XYZ URLs.
-If, for example, you wanted to use the "Ordnance Survey - 10 mile, General, 1955 - 1:633,600" in MapReader, you would need to look up its XYZ URL (https://mapseries-tilesets.s3.amazonaws.com/ten_mile/general/{z}/{x}/{y}.png) and insert it your MapReader code as shown below:
-
-.. code-block:: python
-
- from mapreader import TileServer
-
- my_ts = TileServer(
- metadata_path="path/to/metadata.json",
- download_url="https://mapseries-tilesets.s3.amazonaws.com/ten_mile/general/{z}/{x}/{y}.png",
- )
-
-.. note:: You would need to generate the corresponding `metadata.json` before running this code.
-
-More information about using NLS georeferenced layers is available `here `__, including details about accessing metadata for each layer.
-Please note the Re-use terms for each layer, as these vary.
diff --git a/docs/source/Install.rst b/docs/source/Install.rst
deleted file mode 100644
index 4721df89..00000000
--- a/docs/source/Install.rst
+++ /dev/null
@@ -1,192 +0,0 @@
-Installation Instructions
-=========================
-
-.. note:: Run these commands from your terminal.
-
-There are three steps to setting up MapReader.
-You should choose one method within each step and follow the instructions for that method.
-
-.. note:: You do not need to use the same method between steps. i.e. It is completely fine to follow Method 1 for Step 1 and Method 2 for Step 2.
-
-.. contents:: Table of Contents
- :depth: 2
- :local:
-
-.. todo:: Add comments about how to get to conda in Windows
-
-Step 1: Set up a virtual python environment
-----------------------------------------------
-
-The most recent version of MapReader supports python versions 3.9+.
-
-Method 1: Using conda (recommended)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-We recommend installing MapReader using either Anaconda (`installation instructions here `__) or miniconda (`installation instructions here `__).
-A discussion of which of these to choose can be found `here `__.
-
-Once you have installed either Ananconda or miniconda, open your terminal and use the following commands to set up your virtual python environment:
-
-- Create a new conda environment for ``mapreader`` (you can call this whatever you like, we use ``mapreader``):
-
- .. code-block:: bash
-
- conda create -n mapreader python=3.10
-
- This will create a conda enviroment for you to install MapReader and its dependencies into.
-
-- Activate your conda environment:
-
- .. code-block:: bash
-
- conda activate mapreader
-
-Method 2: Using venv or other
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you would like not to use conda, you are more than welcome to set up a virtual python environment using other methods.
-
-For example, if you would like to use venv, open your terminal and use the following commands to set up your virtual python environment:
-
-- First, importantly, check which version of python your system is using:
-
- .. code-block:: bash
-
- python3 --version
-
- If this returns a version below 3.9, you will need download an updated python version.
- You can do this by downloading from `here `__ (make sure you download the right one for your operating system).
-
- You should then run the above command again to check your python version has updated.
-
-- Create a new virtual python environment for ``mapreader`` (you can call this whatever you like, we use ``mapreader``):
-
- .. code-block:: bash
-
- python3 -m venv mapreader
-
-- Activate your virtual environment:
-
- .. code-block:: bash
-
- source mapreader/bin/activate
-
-Step 2: Install MapReader
---------------------------
-
-Method 1: Install from `PyPI `_
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you want to use the latest stable release of MapReader and do not want/need access to the worked examples or MapReader code, we recommend installing from PyPI.
-This is probably the easiest way to install MapReader.
-
-- Install ``mapreader``:
-
- .. code-block:: bash
-
- pip install mapreader
-
-.. note:: To install the dev dependencies too use ``pip install "mapreader[dev]"`` instead.
-
-Method 2: Install from source
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you want to keep up with the latest changes to MapReader, or want/need easy access to the worked examples or MapReader code, we reccommend installing from source.
-This method will create a ``MapReader`` directory on your machine which will contain all the MapReader code, docs and worked examples.
-
-.. note:: You will need to have `git `__ installed to use this method. If you are using conda, this can be done by running ``conda install git``. Otherwise, you should install git by following the instructions on `their website `__.
-
-- Clone the ``mapreader`` source code from the `MapReader GitHub repository `_:
-
- .. code-block:: bash
-
- git clone https://github.com/Living-with-machines/MapReader.git
-
-- Install ``mapreader``:
-
- .. code-block:: bash
-
- cd MapReader
- pip install -v -e .
-
-.. note:: To install the dev dependencies too use ``pip install -v -e ".[dev]"`` instead.
-
-..
- Method 3: Install via conda (**EXPERIMENTAL**)
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- If neither of the above methods work, you can try installing MapReader using conda.
- This method is still in development so should be avoided for now.
-
- - Install MapReader directly from the conda package:
-
- .. code:: bash
-
- conda install -c anothersmith -c conda-forge -c defaults --override-channels --strict-channel-priority mapreader
-
- .. note:: The conda package seems to be sensitive to the precise priority of the conda channels, hence the use of the `--override-channels --strict-channel-priority` switches is required for this to work. Until this is resolve this installation method will be marked "experimental".
-
-Step 3: Add virtual python environment to notebooks
-------------------------------------------------------
-
-- To allow the newly created python virtual environment to show up in jupyter notebooks, run the following command:
-
-.. code-block:: bash
-
- python -m ipykernel install --user --name mapreader --display-name "Python (mr_py)"
-
-.. note:: if you have used a different name for your python virtual environment replace the ``mapreader`` with whatever name you have used.
-
-
-Running tests
--------------
-
-To run the tests for MapReader, you will need to have installed the **dev dependencies** as described above.
-
-Also, if you have followed the "Install from PyPI" instructions, you will need to clone the MapReader repository to access the tests. i.e.:
-
-.. code-block:: bash
-
- git clone https://github.com/Living-with-machines/MapReader.git
-
-You can then run the tests using from the root of the MapReader directory using the following commands:
-
-.. code-block:: bash
-
- cd path/to/MapReader # change this to your path, e.g. cd ~/MapReader
- conda activate mapreader
- python -m pytest -v
-
-If all tests pass, this means that MapReader has been installed and is working as expected.
-
-
-Troubleshooting
-----------------
-
-M1 mac
-~~~~~~~
-
-If you are using an M1 mac and are having issues installing MapReader due to an error when installing numpy or scikit-image:
-
-- Try separately installing the problem packages (edit as needed) and then installing MapReader:
-
- .. code-block:: bash
-
- pip install numpy==1.21.5
- pip install scikit-image==0.18.3
- pip install mapreader
-
-- Try using conda to install the problem packages (edit as needed) and then pip to install MapReader:
-
- .. code-block:: bash
-
- conda install numpy==1.21.5
- conda install scikit-image==0.18.3
- pip install mapreader
-
-- Alternatively, you can try using a different version of openBLAS when installing:
-
- .. code-block:: bash
-
- brew install openblas
- OPENBLAS="$(brew --prefix openblas)" pip install mapreader
diff --git a/docs/source/figures/IoA.png b/docs/source/_static/IoA.png
similarity index 100%
rename from docs/source/figures/IoA.png
rename to docs/source/_static/IoA.png
diff --git a/docs/source/figures/IoA_0.9.png b/docs/source/_static/IoA_0.9.png
similarity index 100%
rename from docs/source/figures/IoA_0.9.png
rename to docs/source/_static/IoA_0.9.png
diff --git a/docs/source/figures/annotate.png b/docs/source/_static/annotate.png
similarity index 100%
rename from docs/source/figures/annotate.png
rename to docs/source/_static/annotate.png
diff --git a/docs/source/figures/annotate_context.png b/docs/source/_static/annotate_context.png
similarity index 100%
rename from docs/source/figures/annotate_context.png
rename to docs/source/_static/annotate_context.png
diff --git a/docs/source/figures/hist_published_dates.png b/docs/source/_static/hist_published_dates.png
similarity index 100%
rename from docs/source/figures/hist_published_dates.png
rename to docs/source/_static/hist_published_dates.png
diff --git a/docs/source/figures/in_out_annotate.png b/docs/source/_static/in_out_annotate.png
similarity index 100%
rename from docs/source/figures/in_out_annotate.png
rename to docs/source/_static/in_out_annotate.png
diff --git a/docs/source/figures/in_out_classify.png b/docs/source/_static/in_out_classify.png
similarity index 100%
rename from docs/source/figures/in_out_classify.png
rename to docs/source/_static/in_out_classify.png
diff --git a/docs/source/figures/in_out_download.png b/docs/source/_static/in_out_download.png
similarity index 100%
rename from docs/source/figures/in_out_download.png
rename to docs/source/_static/in_out_download.png
diff --git a/docs/source/figures/in_out_load.png b/docs/source/_static/in_out_load.png
similarity index 100%
rename from docs/source/figures/in_out_load.png
rename to docs/source/_static/in_out_load.png
diff --git a/docs/source/figures/inference_sample_results.png b/docs/source/_static/inference_sample_results.png
similarity index 100%
rename from docs/source/figures/inference_sample_results.png
rename to docs/source/_static/inference_sample_results.png
diff --git a/docs/source/figures/loss.png b/docs/source/_static/loss.png
similarity index 100%
rename from docs/source/figures/loss.png
rename to docs/source/_static/loss.png
diff --git a/docs/source/figures/patchify.png b/docs/source/_static/patchify.png
similarity index 100%
rename from docs/source/figures/patchify.png
rename to docs/source/_static/patchify.png
diff --git a/docs/source/figures/pipeline_explained.png b/docs/source/_static/pipeline_explained.png
similarity index 100%
rename from docs/source/figures/pipeline_explained.png
rename to docs/source/_static/pipeline_explained.png
diff --git a/docs/source/figures/plot_metadata_on_map.png b/docs/source/_static/plot_metadata_on_map.png
similarity index 100%
rename from docs/source/figures/plot_metadata_on_map.png
rename to docs/source/_static/plot_metadata_on_map.png
diff --git a/docs/source/figures/review_labels.png b/docs/source/_static/review_labels.png
similarity index 100%
rename from docs/source/figures/review_labels.png
rename to docs/source/_static/review_labels.png
diff --git a/figs/river_banner_8bit.png b/docs/source/_static/river_banner_8bit.png
similarity index 100%
rename from figs/river_banner_8bit.png
rename to docs/source/_static/river_banner_8bit.png
diff --git a/docs/source/figures/show.png b/docs/source/_static/show.png
similarity index 100%
rename from docs/source/figures/show.png
rename to docs/source/_static/show.png
diff --git a/docs/source/figures/show_image.png b/docs/source/_static/show_image.png
similarity index 100%
rename from docs/source/figures/show_image.png
rename to docs/source/_static/show_image.png
diff --git a/docs/source/figures/show_image_labels_10.png b/docs/source/_static/show_image_labels_10.png
similarity index 100%
rename from docs/source/figures/show_image_labels_10.png
rename to docs/source/_static/show_image_labels_10.png
diff --git a/docs/source/figures/show_list.png b/docs/source/_static/show_list.png
similarity index 100%
rename from docs/source/figures/show_list.png
rename to docs/source/_static/show_list.png
diff --git a/docs/source/figures/show_par.png b/docs/source/_static/show_par.png
similarity index 100%
rename from docs/source/figures/show_par.png
rename to docs/source/_static/show_par.png
diff --git a/docs/source/figures/show_par_RGB.png b/docs/source/_static/show_par_RGB.png
similarity index 100%
rename from docs/source/figures/show_par_RGB.png
rename to docs/source/_static/show_par_RGB.png
diff --git a/docs/source/figures/show_par_RGB_0.5.png b/docs/source/_static/show_par_RGB_0.5.png
similarity index 100%
rename from docs/source/figures/show_par_RGB_0.5.png
rename to docs/source/_static/show_par_RGB_0.5.png
diff --git a/docs/source/figures/show_sample_child.png b/docs/source/_static/show_sample_child.png
similarity index 100%
rename from docs/source/figures/show_sample_child.png
rename to docs/source/_static/show_sample_child.png
diff --git a/docs/source/figures/show_sample_parent.png b/docs/source/_static/show_sample_parent.png
similarity index 100%
rename from docs/source/figures/show_sample_parent.png
rename to docs/source/_static/show_sample_parent.png
diff --git a/docs/source/figures/show_sample_train_8.png b/docs/source/_static/show_sample_train_8.png
similarity index 100%
rename from docs/source/figures/show_sample_train_8.png
rename to docs/source/_static/show_sample_train_8.png
diff --git a/docs/source/figures/show_sample_val_8.png b/docs/source/_static/show_sample_val_8.png
similarity index 100%
rename from docs/source/figures/show_sample_val_8.png
rename to docs/source/_static/show_sample_val_8.png
diff --git a/figs/tutorial_classification_mnist.png b/docs/source/_static/tutorial_classification_mnist.png
similarity index 100%
rename from figs/tutorial_classification_mnist.png
rename to docs/source/_static/tutorial_classification_mnist.png
diff --git a/figs/tutorial_classification_one_inch_maps_001.png b/docs/source/_static/tutorial_classification_one_inch_maps_001.png
similarity index 100%
rename from figs/tutorial_classification_one_inch_maps_001.png
rename to docs/source/_static/tutorial_classification_one_inch_maps_001.png
diff --git a/figs/tutorial_classification_plant_phenotype.png b/docs/source/_static/tutorial_classification_plant_phenotype.png
similarity index 100%
rename from figs/tutorial_classification_plant_phenotype.png
rename to docs/source/_static/tutorial_classification_plant_phenotype.png
diff --git a/docs/source/Coc.rst b/docs/source/community-and-contributions/code-of-conduct-and-inclusivity.rst
similarity index 100%
rename from docs/source/Coc.rst
rename to docs/source/community-and-contributions/code-of-conduct-and-inclusivity.rst
diff --git a/docs/source/Developers-guide.rst b/docs/source/community-and-contributions/contribution-guide/developers-corner/building-conda-package.rst
similarity index 55%
rename from docs/source/Developers-guide.rst
rename to docs/source/community-and-contributions/contribution-guide/developers-corner/building-conda-package.rst
index 8c4cb126..a463297e 100644
--- a/docs/source/Developers-guide.rst
+++ b/docs/source/community-and-contributions/contribution-guide/developers-corner/building-conda-package.rst
@@ -1,35 +1,5 @@
-Developer's Guide
-=================
-
-Installing and using pre-commit
---------------------------------
-
-MapReader uses `pre-commit `_ to enforce code style and quality. To install pre-commit, run the following commands:
-
-.. code-block:: bash
-
- pip install pre-commit
- pre-commit install
-
-This will install the pre-commit hooks in the repository. The hooks will run automatically when you commit code. If the hooks fail, the commit will be aborted.
-
-Managing version numbers
-------------------------
-
-To assign meaning to the version number, we use `semantic versioning `_.
-Technically we use the package `versioneer `_ to increment the version number. To update the version number, run the following commands:
-
-.. code-block:: bash
-
- git checkout main
- git tag -a v1.2.3 -m "mapreader-1.2.3"
- git push --tags
-
-All intermediate development version numbers are automatically generated by versioneer.
-
-
Building the Conda package
---------------------------
+===========================
The overall challenge with installing MapReader is that it some of its dependencies are only available on PyPI, whilst others are only available on conda-forge.
diff --git a/docs/source/community-and-contributions/contribution-guide/developers-corner/index.rst b/docs/source/community-and-contributions/contribution-guide/developers-corner/index.rst
new file mode 100644
index 00000000..9fd9675e
--- /dev/null
+++ b/docs/source/community-and-contributions/contribution-guide/developers-corner/index.rst
@@ -0,0 +1,13 @@
+Developer's Corner
+===================
+
+..
+ TODO: Write intro to developer's corner here.
+
+.. toctree::
+ :maxdepth: 1
+
+ installing-using-precommit
+ running-tests
+ managing-version-numbers
+ building-conda-package
diff --git a/docs/source/community-and-contributions/contribution-guide/developers-corner/installing-using-precommit.rst b/docs/source/community-and-contributions/contribution-guide/developers-corner/installing-using-precommit.rst
new file mode 100644
index 00000000..360f1d6e
--- /dev/null
+++ b/docs/source/community-and-contributions/contribution-guide/developers-corner/installing-using-precommit.rst
@@ -0,0 +1,11 @@
+Installing and using pre-commit
+--------------------------------
+
+MapReader uses `pre-commit `_ to enforce code style and quality. To install pre-commit, run the following commands:
+
+.. code-block:: bash
+
+ pip install pre-commit
+ pre-commit install
+
+This will install the pre-commit hooks in the repository. The hooks will run automatically when you commit code. If the hooks fail, the commit will be aborted.
diff --git a/docs/source/community-and-contributions/contribution-guide/developers-corner/managing-version-numbers.rst b/docs/source/community-and-contributions/contribution-guide/developers-corner/managing-version-numbers.rst
new file mode 100644
index 00000000..3e6b5cf4
--- /dev/null
+++ b/docs/source/community-and-contributions/contribution-guide/developers-corner/managing-version-numbers.rst
@@ -0,0 +1,13 @@
+Managing version numbers
+========================
+
+To assign meaning to the version number, we use `semantic versioning `_.
+Technically we use the package `versioneer `_ to increment the version number. To update the version number, run the following commands:
+
+.. code-block:: bash
+
+ git checkout main
+ git tag -a v1.2.3 -m "mapreader-1.2.3"
+ git push --tags
+
+All intermediate development version numbers are automatically generated by versioneer.
diff --git a/docs/source/community-and-contributions/contribution-guide/developers-corner/running-tests.rst b/docs/source/community-and-contributions/contribution-guide/developers-corner/running-tests.rst
new file mode 100644
index 00000000..db20c10a
--- /dev/null
+++ b/docs/source/community-and-contributions/contribution-guide/developers-corner/running-tests.rst
@@ -0,0 +1,20 @@
+Running tests
+=============
+
+To run the tests for MapReader, you will need to have installed the **dev dependencies** as described above.
+
+Also, if you have followed the "Install from PyPI" instructions, you will need to clone the MapReader repository to access the tests. i.e.:
+
+.. code-block:: bash
+
+ git clone https://github.com/Living-with-machines/MapReader.git
+
+You can then run the tests using from the root of the MapReader directory using the following commands:
+
+.. code-block:: bash
+
+ cd path/to/MapReader # change this to your path, e.g. cd ~/MapReader
+ conda activate mapreader
+ python -m pytest -v
+
+If all tests pass, this means that MapReader has been installed and is working as expected.
diff --git a/docs/source/Contribution-guide/Code.rst b/docs/source/community-and-contributions/contribution-guide/getting-started-with-contributions/add-or-update-code.rst
similarity index 97%
rename from docs/source/Contribution-guide/Code.rst
rename to docs/source/community-and-contributions/contribution-guide/getting-started-with-contributions/add-or-update-code.rst
index ae3fb343..a484f677 100644
--- a/docs/source/Contribution-guide/Code.rst
+++ b/docs/source/community-and-contributions/contribution-guide/getting-started-with-contributions/add-or-update-code.rst
@@ -37,7 +37,7 @@ Style guide
When making your changes, please:
-- Try to align to the `PEP 8 style guide for python code `.
+- Try to align to the `PEP 8 style guide for Python code `.
- Try to use the numpy-style docstrings (as per `this link _`).
- Ensure all docstrings are kept up to date and reflect any changes to code functionality you have made.
- Add and run tests for your code.
diff --git a/docs/source/Contribution-guide/Documentation.rst b/docs/source/community-and-contributions/contribution-guide/getting-started-with-contributions/add-or-update-documentation.rst
similarity index 91%
rename from docs/source/Contribution-guide/Documentation.rst
rename to docs/source/community-and-contributions/contribution-guide/getting-started-with-contributions/add-or-update-documentation.rst
index b7929291..f5b33d36 100644
--- a/docs/source/Contribution-guide/Documentation.rst
+++ b/docs/source/community-and-contributions/contribution-guide/getting-started-with-contributions/add-or-update-documentation.rst
@@ -13,7 +13,7 @@ Documentation dependencies
If you would like to edit or add to the MapReader documentation, you will need to install ``sphinx`` along with the packages detailed in ``MapReader/docs/requirements.txt``.
-To do this (assuming you have installed MapReader from source, as per our :doc:`Installation instructions `), use:
+To do this (assuming you have installed MapReader from source, as per our :doc:`Installation instructions `), use:
.. code-block:: bash
@@ -43,7 +43,7 @@ You will then need to fork the `MapReader repository ` if you would like to have a go at this, or, if you feel hesitant about making code changes, create an issue detailing the changes you think need making.
+Head to our :doc:`guide to updating the MapReader code ` if you would like to have a go at this, or, if you feel hesitant about making code changes, create an issue detailing the changes you think need making.
Style guide
-----------
@@ -61,7 +61,7 @@ Style guide
Four
^^^^
-- Use ``.. code-block:: `` to create code blocks formatted as per your given langauge (replace ```` with the language you will be writing in). e.g. ``.. code-block:: python`` will create a code block with python formatting.
+- Use ``.. code-block:: `` to create code blocks formatted as per your given langauge (replace ```` with the language you will be writing in). e.g. ``.. code-block:: python`` will create a code block with Python formatting.
- Use ``Link title `__`` to link to external pages.
- Use ``.. contents::`` to automatically generate a table of contents detailing sections within the current page. e.g.
diff --git a/docs/source/community-and-contributions/contribution-guide/getting-started-with-contributions/index.rst b/docs/source/community-and-contributions/contribution-guide/getting-started-with-contributions/index.rst
new file mode 100644
index 00000000..5423b206
--- /dev/null
+++ b/docs/source/community-and-contributions/contribution-guide/getting-started-with-contributions/index.rst
@@ -0,0 +1,12 @@
+Getting started with contributions
+==================================
+
+..
+ TODO: Add an intro here...
+
+.. toctree::
+ :maxdepth: 1
+
+ write-tutorial-or-worked-example
+ add-or-update-documentation
+ add-or-update-code
diff --git a/docs/source/Contribution-guide/Worked-examples.rst b/docs/source/community-and-contributions/contribution-guide/getting-started-with-contributions/write-tutorial-or-worked-example.rst
similarity index 86%
rename from docs/source/Contribution-guide/Worked-examples.rst
rename to docs/source/community-and-contributions/contribution-guide/getting-started-with-contributions/write-tutorial-or-worked-example.rst
index ef1ab44a..5b7aed66 100644
--- a/docs/source/Contribution-guide/Worked-examples.rst
+++ b/docs/source/community-and-contributions/contribution-guide/getting-started-with-contributions/write-tutorial-or-worked-example.rst
@@ -6,7 +6,7 @@ If you are using MapReader in your own work, we would love for you to showcase a
Before you begin
----------------
-If you are currently unfamiliar with using GitHub for collaboration, remember to take a look at our :doc:`GitHub guide `.
+If you are currently unfamiliar with using GitHub for collaboration, remember to take a look at our :doc:`GitHub guide `.
Before you begin writing your tutorial, you should ensure your tutorial/worked example has a corresponding issue on the `MapReader repository `_ (or create one if needed).
You should then either assign yourself to the issue or comment on it saying you will be working on making this tutorial.
@@ -18,9 +18,9 @@ Writing your tutorial or worked example
----------------------------------------
You can write your tutorial/worked example in any way you like but should save it in the ``worked_examples`` folder.
-We suggest using a `jupyter notebook `_.
+We suggest using a `Jupyter notebook `_.
-Take a look through our current :doc:`worked examples ` for inspiration.
+Take a look through our current :doc:`worked examples ` for inspiration.
When you are finished
---------------------
diff --git a/docs/source/community-and-contributions/contribution-guide/how-to-add-yourself-as-a-contributor.rst b/docs/source/community-and-contributions/contribution-guide/how-to-add-yourself-as-a-contributor.rst
new file mode 100644
index 00000000..cbdf32aa
--- /dev/null
+++ b/docs/source/community-and-contributions/contribution-guide/how-to-add-yourself-as-a-contributor.rst
@@ -0,0 +1,60 @@
+How to add yourself as a contributor
+====================================
+
+We use the `all-contributors `__ bot to keep a record of contributors to the MapReader repo.
+To add yourself as a contributor to MapReader, comment on your issue or PR with the following:
+
+``@all-contributors please add @your_username_here for A, B, C``
+
+.. note:: Remember to change this to your GitHub username!
+
+for example, to add Katie McDonough for research, ideas and docs, you would write:
+
+``@all-contributors please add @kmcdono2 for research, ideas, docs``
+
+Types of contribution
+~~~~~~~~~~~~~~~~~~~~~
+
+.. list-table::
+ :widths: 30 30 40
+ :header-rows: 1
+
+ * - Emoji/Type
+ - Represents
+ - Comments
+ * - 💻 ``code``
+ - Code
+ -
+ * - 🔣 ``data``
+ - Data
+ -
+ * - 📖 ``doc``
+ - Documentation
+ - e.g. ReadtheDocs, Wiki, or other source of documentation
+ * - 🤔 ``ideas``
+ - Ideas & Planning
+ -
+ * - 🚧 ``maintenance``
+ - Maintenance
+ - People who are actively maintaining the repo
+ * - 🧑🏫 ``mentoring``
+ - Mentoring
+ - People who mentor new contributors
+ * - 📆 ``projectManagement``
+ - Project Management
+ -
+ * - 🔬 ``research``
+ - Research
+ -
+ * - 👀 ``review``
+ - Reviewed Pull Requests
+ -
+ * - 🌍 ``translation``
+ - Translation
+ -
+ * - ✅ ``tutorial``
+ - Tutorials
+ - e.g. ``worked_examples`` or external tutorials.
+ * - 📢 ``talk``
+ - Talks
+ -
diff --git a/docs/source/community-and-contributions/contribution-guide/index.rst b/docs/source/community-and-contributions/contribution-guide/index.rst
new file mode 100644
index 00000000..e013a5c8
--- /dev/null
+++ b/docs/source/community-and-contributions/contribution-guide/index.rst
@@ -0,0 +1,34 @@
+Contribution Guide
+===================
+
+Welcome! We are pleased to know that you're interested in contributing to MapReader!
+
+MapReader is a collaborative project, now expanding its community beyond the initial group in the `Living with Machines `_ project (The Alan Turing Institute).
+We welcome all contributions but **please** follow these guidelines to make sure your contributions can be easily integrated into the project.
+
+Pre-requisites
+--------------
+
+Regardless of how you will be contributing to MapReader, you will need to:
+
+1. Ensure you have a `GitHub account `_ set up.
+2. Be able to use GitHub issues and pull requests - if you are unfamiliar with these, please look at our :doc:`GitHub guide ` before continuing.
+3. Set up a virtual Python environment and install MapReader (as per our :doc:`Installation instructions `).
+4. Have read this guide.
+
+Ways to contribute
+------------------
+
+We welcome contributions from community members of all skill levels and so have written three different guides for different types of contributions:
+
+- :doc:`Write a tutorial or worked example ` - For those who are familiar with using MapReader and would like to showcase an example of how to use it, but are not comfortable with using Sphinx to write documentation or writing code.
+- :doc:`Add to or update the MapReader documentation ` - For those who are familiar with using MapReader and either already comfortable with using Sphinx to write documentation or feel able to have a go at to learning it.
+- :doc:`Add to or update the MapReader code ` - For those who are familiar with using MapReader and either already comfortable with writing code in Python or feel able to have a go at learning it.
+
+.. toctree::
+ :maxdepth: 2
+
+ ways-of-working
+ how-to-add-yourself-as-a-contributor
+ getting-started-with-contributions/index
+ developers-corner/index
diff --git a/docs/source/ways-of-working.rst b/docs/source/community-and-contributions/contribution-guide/ways-of-working.rst
similarity index 100%
rename from docs/source/ways-of-working.rst
rename to docs/source/community-and-contributions/contribution-guide/ways-of-working.rst
diff --git a/docs/source/Events.rst b/docs/source/community-and-contributions/events.rst
similarity index 97%
rename from docs/source/Events.rst
rename to docs/source/community-and-contributions/events.rst
index 263c8aef..f5e6e6fb 100644
--- a/docs/source/Events.rst
+++ b/docs/source/community-and-contributions/events.rst
@@ -62,17 +62,17 @@ workshops to support a growing user community around MapReader during 2024.
* - Sept 25, 2024
- MapReader Workshop
-
+
at Spatial Humanities 2024
- 1/2 day workshop co-located with the Spatial Humanities conference.
- `More details `_
* - Sept 30-Oct 2, 2024
- Fall Data/Culture Workshop:
-
+
MapReader + Newspapers
- At The Alan Turing Institute, London, UK
-
+
(and partially online/hybrid)
- Website coming soon
@@ -89,25 +89,25 @@ workshops to support a growing user community around MapReader during 2024.
* - Jun 5-7, 2024
- Summer Data/Culture Workshop:
-
+
MapReader + Newspapers
- 3-day workshop for historians and other historically-inclined researchers
-
+
about learning to use MapReader (2 days) paired with an introduction to
-
+
tools and data from Living with Machines related to digitized British
-
+
newspaper collections. Co-sponsored by the N8. Bursaries available.
-
+
- `Summer Data/Culture Workshop webpage `_
* - Apr 30-May 1, 2024
- Spring Data/Culture Workshop:
-
+
MapReader
- 2-day workshop for historians and other historically-inclined researchers
-
+
about learning to use MapReader.
-
+
Bursaries available.
- `Spring Data/Culture Workshop webpage `_
diff --git a/docs/source/community-and-contributions/index.rst b/docs/source/community-and-contributions/index.rst
new file mode 100644
index 00000000..14a981ee
--- /dev/null
+++ b/docs/source/community-and-contributions/index.rst
@@ -0,0 +1,14 @@
+Community and contributions
+===========================
+
+..
+ TODO: Write an intro to community and contributions here.
+
+.. toctree::
+ :maxdepth: 2
+
+ joining-the-community
+ events
+ share-your-story
+ contribution-guide/index
+ code-of-conduct-and-inclusivity
diff --git a/docs/source/community-and-contributions/joining-the-community.rst b/docs/source/community-and-contributions/joining-the-community.rst
new file mode 100644
index 00000000..0216f967
--- /dev/null
+++ b/docs/source/community-and-contributions/joining-the-community.rst
@@ -0,0 +1,14 @@
+Joining the community
+=====================
+
+Before you begin contributing to MapReader, we would love for you to join our community and there are many ways to do this:
+
+- Star the `MapReader GitHub repository `_.
+- Start creating Github issues and/or pull requests on our repository.
+- Join our `Slack workspace `_.
+
+You can also get in touch with the MapReader team personally by:
+
+- Tagging us on Github (find our Github handles `here `__).
+- Messaging us on Slack.
+- Emailing Katie McDonough at k.mcdonough@lancaster.ac.uk.
diff --git a/docs/source/community-and-contributions/share-your-story.rst b/docs/source/community-and-contributions/share-your-story.rst
new file mode 100644
index 00000000..0f6f9b57
--- /dev/null
+++ b/docs/source/community-and-contributions/share-your-story.rst
@@ -0,0 +1,69 @@
+Share Your MapReader Story
+==========================
+
+Are you using MapReader in your research or projects? We are excited to learn
+about the diverse ways our tool is being put to use across different fields and
+applications. Your experiences can inspire and inform others, and we would love
+to feature your work in our case studies, presentations, and community calls.
+
+Why Share Your Story?
+---------------------
+
+**Highlight Your Work**: Gain visibility for your research or project by being
+featured in our case studies and community calls.
+
+**Inspire Others**: Help other users see the potential of MapReader through
+real-world applications.
+
+**Contribute to the Community**: Your insights can help improve MapReader and
+guide its future development.
+
+How to Share Your Story
+------------------------
+We've made it easy for you to share your MapReader experience. Here's how you
+can do it:
+
+1. **Prepare Your Story:**
+
+ *Description*: Provide a brief description of your project and how you are
+ using MapReader.
+
+ *Impact*: Explain the impact MapReader has had on your work.
+
+ *Visuals*: Include any relevant images, screenshots, or visualisations.
+
+ *Contact Information*: Let us know how we can get in touch with you for further details.
+
+2. **Submit Your Story:**
+
+ *Email*: Send your story to our Research Application Manager, `Kalle
+ Westerling `_ with the subject line
+ "MapReader Case Study".
+
+ *GitHub*: Open an issue in our GitHub repository with the label "Case
+ Study".
+
+3. **Review and Feature**
+
+ Once we receive your story, we will review it and get in touch with you for
+ any additional information. We will then feature your work in our case
+ studies, presentations, and community calls.
+
+We look forward to hearing from you and sharing your MapReader story with the
+rest of the community!
+
+Examples of User Stories
+-------------------------
+
+Here are a few examples of what a case study on MapReader could look like:
+
+**Historical Research**: Dr. Jane Doe used MapReader to analyze historical
+maps, uncovering new insights into urban development in the 19th century.
+
+**Education**: Prof. Jane Doe integrated MapReader into her digital humanities
+course, allowing students to engage with primary sources in new ways.
+
+.. We will want to update this section with real user stories once we start
+ receiving submissions. I think we want to make sure that the user stories
+ are not just about research but also about projects, teaching, etc. so that
+ we can show the diversity of use cases. - Kalle
diff --git a/docs/source/conf.py b/docs/source/conf.py
index f40875ba..e8990d7f 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -32,7 +32,7 @@
"sphinx.ext.napoleon",
"sphinx.ext.todo",
"sphinx_togglebutton",
- 'sphinxemoji.sphinxemoji',
+ "sphinxemoji.sphinxemoji",
]
templates_path = ["_templates"]
@@ -43,11 +43,13 @@
".md": "markdown",
}
+suppress_warnings = ["myst.header"]
+
# -- autoapi configuration -----
autoapi_dirs = ["../../mapreader"]
autoapi_type = "python"
-autoapi_root = "api"
+autoapi_root = "in-depth-resources/api"
autoapi_options = [
"members",
diff --git a/docs/source/getting-started/index.rst b/docs/source/getting-started/index.rst
new file mode 100644
index 00000000..dbd20c9d
--- /dev/null
+++ b/docs/source/getting-started/index.rst
@@ -0,0 +1,12 @@
+Getting Started
+===============
+
+..
+ TODO: Add intro to getting started
+
+
+.. toctree::
+ :maxdepth: 2
+
+ installation-instructions/index
+ troubleshooting-problems
diff --git a/docs/source/getting-started/installation-instructions/1-set-up-virtual-environment.rst b/docs/source/getting-started/installation-instructions/1-set-up-virtual-environment.rst
new file mode 100644
index 00000000..1b1c358f
--- /dev/null
+++ b/docs/source/getting-started/installation-instructions/1-set-up-virtual-environment.rst
@@ -0,0 +1,58 @@
+Step 1: Set up a virtual Python environment
+===========================================
+
+.. todo:: Add comments about how to get to conda in Windows
+
+The most recent version of MapReader supports Python versions 3.9+.
+
+Method 1: Using conda (recommended)
+------------------------------------
+
+We recommend installing MapReader using either Anaconda (`installation instructions here `__) or miniconda (`installation instructions here `__).
+A discussion of which of these to choose can be found `here `__.
+
+Once you have installed either Ananconda or miniconda, open your terminal and use the following commands to set up your virtual Python environment:
+
+- Create a new conda environment for ``mapreader`` (you can call this whatever you like, we use ``mapreader``):
+
+ .. code-block:: bash
+
+ conda create -n mapreader python=3.10
+
+ This will create a conda enviroment for you to install MapReader and its dependencies into.
+
+- Activate your conda environment:
+
+ .. code-block:: bash
+
+ conda activate mapreader
+
+Method 2: Using venv or other
+-----------------------------
+
+If you would like not to use conda, you are more than welcome to set up a virtual Python environment using other methods.
+
+For example, if you would like to use venv, open your terminal and use the following commands to set up your virtual Python environment:
+
+- First, importantly, check which version of Python your system is using:
+
+ .. code-block:: bash
+
+ python3 --version
+
+ If this returns a version below 3.9, you will need download an updated Python version.
+ You can do this by downloading from `here `__ (make sure you download the right one for your operating system).
+
+ You should then run the above command again to check your Python version has updated.
+
+- Create a new virtual Python environment for ``mapreader`` (you can call this whatever you like, we use ``mapreader``):
+
+ .. code-block:: bash
+
+ python3 -m venv mapreader
+
+- Activate your virtual environment:
+
+ .. code-block:: bash
+
+ source mapreader/bin/activate
diff --git a/docs/source/getting-started/installation-instructions/2-install-mapreader.rst b/docs/source/getting-started/installation-instructions/2-install-mapreader.rst
new file mode 100644
index 00000000..2c344b1f
--- /dev/null
+++ b/docs/source/getting-started/installation-instructions/2-install-mapreader.rst
@@ -0,0 +1,54 @@
+Step 2: Install MapReader
+==========================
+
+Method 1: Install from `PyPI `_
+--------------------------------------------------------------------
+
+If you want to use the latest stable release of MapReader and do not want/need access to the worked examples or MapReader code, we recommend installing from PyPI.
+This is probably the easiest way to install MapReader.
+
+- Install ``mapreader``:
+
+ .. code-block:: bash
+
+ pip install mapreader
+
+.. note:: To install the dev dependencies too use ``pip install "mapreader[dev]"`` instead.
+
+Method 2: Install from source
+-----------------------------
+
+If you want to keep up with the latest changes to MapReader, or want/need easy access to the worked examples or MapReader code, we reccommend installing from source.
+This method will create a ``MapReader`` directory on your machine which will contain all the MapReader code, docs and worked examples.
+
+.. note:: You will need to have `git `__ installed to use this method. If you are using conda, this can be done by running ``conda install git``. Otherwise, you should install git by following the instructions on `their website `__.
+
+- Clone the ``mapreader`` source code from the `MapReader GitHub repository `_:
+
+ .. code-block:: bash
+
+ git clone https://github.com/Living-with-machines/MapReader.git
+
+- Install ``mapreader``:
+
+ .. code-block:: bash
+
+ cd MapReader
+ pip install -v -e .
+
+.. note:: To install the dev dependencies too use ``pip install -v -e ".[dev]"`` instead.
+
+..
+ Method 3: Install via conda (**EXPERIMENTAL**)
+ ----------------------------------------------
+
+ If neither of the above methods work, you can try installing MapReader using conda.
+ This method is still in development so should be avoided for now.
+
+ - Install MapReader directly from the conda package:
+
+ .. code:: bash
+
+ conda install -c anothersmith -c conda-forge -c defaults --override-channels --strict-channel-priority mapreader
+
+ .. note:: The conda package seems to be sensitive to the precise priority of the conda channels, hence the use of the `--override-channels --strict-channel-priority` switches is required for this to work. Until this is resolve this installation method will be marked "experimental".
diff --git a/docs/source/getting-started/installation-instructions/3-add-virtual-environment-to-notebooks.rst b/docs/source/getting-started/installation-instructions/3-add-virtual-environment-to-notebooks.rst
new file mode 100644
index 00000000..b10051be
--- /dev/null
+++ b/docs/source/getting-started/installation-instructions/3-add-virtual-environment-to-notebooks.rst
@@ -0,0 +1,10 @@
+Step 3: Add virtual Python environment to notebooks
+===================================================
+
+- To allow the newly created Python virtual environment to show up in Jupyter notebooks, run the following command:
+
+.. code-block:: bash
+
+ python -m ipykernel install --user --name mapreader --display-name "Python (mr_py)"
+
+.. note:: if you have used a different name for your Python virtual environment replace the ``mapreader`` with whatever name you have used.
diff --git a/docs/source/getting-started/installation-instructions/index.rst b/docs/source/getting-started/installation-instructions/index.rst
new file mode 100644
index 00000000..69d697ff
--- /dev/null
+++ b/docs/source/getting-started/installation-instructions/index.rst
@@ -0,0 +1,16 @@
+Installation Instructions
+=========================
+
+.. note:: Run these commands from your terminal.
+
+There are three steps to setting up MapReader.
+You should choose one method within each step and follow the instructions for that method.
+
+.. note:: You do not need to use the same method between steps. i.e. It is completely fine to follow Method 1 for Step 1 and Method 2 for Step 2.
+
+.. toctree::
+ :maxdepth: 2
+
+ 1-set-up-virtual-environment
+ 2-install-mapreader
+ 3-add-virtual-environment-to-notebooks
diff --git a/docs/source/getting-started/troubleshooting-problems.rst b/docs/source/getting-started/troubleshooting-problems.rst
new file mode 100644
index 00000000..120ab8aa
--- /dev/null
+++ b/docs/source/getting-started/troubleshooting-problems.rst
@@ -0,0 +1,30 @@
+Troubleshooting
+===============
+
+M1 mac
+------
+
+If you are using an M1 mac and are having issues installing MapReader due to an error when installing numpy or scikit-image:
+
+- Try separately installing the problem packages (edit as needed) and then installing MapReader:
+
+ .. code-block:: bash
+
+ pip install numpy==1.21.5
+ pip install scikit-image==0.18.3
+ pip install mapreader
+
+- Try using conda to install the problem packages (edit as needed) and then pip to install MapReader:
+
+ .. code-block:: bash
+
+ conda install numpy==1.21.5
+ conda install scikit-image==0.18.3
+ pip install mapreader
+
+- Alternatively, you can try using a different version of openBLAS when installing:
+
+ .. code-block:: bash
+
+ brew install openblas
+ OPENBLAS="$(brew --prefix openblas)" pip install mapreader
diff --git a/docs/source/api/index.rst b/docs/source/in-depth-resources/api/index.rst
similarity index 90%
rename from docs/source/api/index.rst
rename to docs/source/in-depth-resources/api/index.rst
index 60ddceaa..57f327e0 100644
--- a/docs/source/api/index.rst
+++ b/docs/source/in-depth-resources/api/index.rst
@@ -6,6 +6,6 @@ This page contains auto-generated API reference documentation [#f1]_.
.. toctree::
:titlesonly:
- /api/mapreader/index
+ mapreader/index
.. [#f1] Created with `sphinx-autoapi `_
diff --git a/docs/source/in-depth-resources/coding-basics/index.rst b/docs/source/in-depth-resources/coding-basics/index.rst
new file mode 100644
index 00000000..9199d4bf
--- /dev/null
+++ b/docs/source/in-depth-resources/coding-basics/index.rst
@@ -0,0 +1,13 @@
+Coding Basics
+==============
+
+This section contains information on the basics of coding, including how to use the terminal, how to install Python packages, how to create virtual environments, and how to use Jupyter Notebooks.
+It is intended for users who are new to coding or who need a refresher on some of the basics.
+
+.. toctree::
+ :maxdepth: 1
+
+ terminal
+ python-packages
+ virtual-environments
+ jupyter-notebooks
diff --git a/docs/source/in-depth-resources/coding-basics/jupyter-notebooks.rst b/docs/source/in-depth-resources/coding-basics/jupyter-notebooks.rst
new file mode 100644
index 00000000..e9f8bcf5
--- /dev/null
+++ b/docs/source/in-depth-resources/coding-basics/jupyter-notebooks.rst
@@ -0,0 +1,60 @@
+Jupyter notebooks
+=================
+
+A Jupyter notebook is an interactive computational environment that allows you to write and run code, visualize data, and write narrative text all in the same place.
+It's a popular tool among data scientists and is commonly used for data analysis, machine learning, and scientific computing.
+Jupyter notebooks support multiple programming languages, but the most common language used is Python.
+You will notice that many of our "worked examples" are built in Jupyter notebooks so you can test run some of this code as soon as you have understood what the notebooks are, how to set them up on your computer, and how to run code in them.
+
+Key features of Jupyter notebooks include:
+
+- **Code execution**: You can write and run code in the notebook, and see the output immediately.
+- **Markdown cells**: You can write text in Markdown format to provide explanations, documentation, or commentary on your code.
+- **Rich output**: You can display images, plots, and other media directly in the notebook.
+- **Reproducibility**: Notebooks are a great way to document your code and analysis in a way that is easy to share and reproduce.
+- **Interactive widgets**: You can create interactive elements like sliders, buttons, and dropdowns to explore your data or control your code.
+
+Installing Jupyter notebooks
+----------------------------
+
+To install Jupyter notebooks, you can use the ``pip`` package manager, which comes pre-installed with Python.
+To install Jupyter, you can use the following command:
+
+.. code-block:: bash
+
+ pip install jupyter
+
+This will install the Jupyter package and all its dependencies.
+
+Running Jupyter notebooks
+-------------------------
+
+Once you have installed Jupyter, you can start the Jupyter notebook server by running the following command in your terminal:
+
+.. code-block:: bash
+
+ jupyter notebook
+
+This will open a new tab in your web browser with the Jupyter notebook interface.
+From there, you can create a new notebook, open an existing one, or run code in the notebook cells.
+
+Basic usage of Jupyter notebooks
+--------------------------------
+
+Once you have opened a Jupyter notebook, you can start writing and running code in the code cells.
+To run a cell, you can press ``Shift + Enter`` or click the "Run" button in the toolbar.
+
+You can also add new cells by clicking the "+" button in the toolbar, and you can change the cell type from code to Markdown by selecting the cell type from the dropdown menu.
+
+Notebooks are automatically saved as you work.
+You can also save them manually by clicking the "Save" button in the toolbar or pressing ``Ctrl + S``.
+
+Additional Resources
+--------------------
+
+If you're new to Jupyter notebooks, here are some great places to start:
+
+- `Introduction to Jupyter Notebooks `__
+- `How to use Jupyter Notebooks: A beginner's tutorial `__
+
+.. more??
diff --git a/docs/source/in-depth-resources/coding-basics/python-packages.rst b/docs/source/in-depth-resources/coding-basics/python-packages.rst
new file mode 100644
index 00000000..27dae2c5
--- /dev/null
+++ b/docs/source/in-depth-resources/coding-basics/python-packages.rst
@@ -0,0 +1,56 @@
+Python packages
+===============
+
+A Python package is a collection of modules bundled together, which can be reused across various projects.
+Unlike programs or apps that you can click and find in your start page or launch pad, Python packages are typically used within your code and usually do not have a graphical user interface (GUI).
+
+Common Uses of Python Packages
+------------------------------
+
+Python packages are used for a variety of purposes, including:
+
+- **Data analysis**: Packages like ``pandas`` and ``numpy`` are commonly used for data analysis and manipulation.
+- **Web development**: Packages like ``flask`` and ``django`` are used for building web applications.
+- **Machine learning**: Packages like ``scikit-learn`` and ``tensorflow`` are used for machine learning and artificial intelligence.
+- **Scientific computing**: Packages like ``scipy`` and ``matplotlib`` are used for scientific computing and data visualization.
+- **Utilities**: Packages like ``requests`` and ``beautifulsoup4`` are used for web scraping and interacting with web APIs.
+- ...and more!
+
+Installing Python Packages
+--------------------------
+
+Python packages can be installed using the ``pip`` package manager, which comes pre-installed with Python.
+To install a package, you can use the following command:
+
+.. code-block:: bash
+
+ pip install
+
+For instance, to install the ``pandas`` package, you can run:
+
+.. code-block:: bash
+
+ pip install pandas
+
+You can also install multiple packages at once by separating them with spaces:
+
+.. code-block:: bash
+
+ pip install pandas numpy matplotlib
+
+For more information on using ``pip``, you can refer to the `official documentation `_.
+Once a package is installed, you can import it into your Python code using the `import` statement:
+
+.. code-block:: python
+
+ import pandas
+
+This will allow you to use the functions and classes provided by the package in
+your code.
+
+Additional Resources
+--------------------
+
+- `Python Package Documentation `_: A tutorial on installing Python packages.
+- `Python Package Index (PyPI) `_: The official repository for Python packages.
+- `Python Packaging User Guide `_: A comprehensive guide to packaging and distributing Python packages.
diff --git a/docs/source/in-depth-resources/coding-basics/terminal.rst b/docs/source/in-depth-resources/coding-basics/terminal.rst
new file mode 100644
index 00000000..50917d93
--- /dev/null
+++ b/docs/source/in-depth-resources/coding-basics/terminal.rst
@@ -0,0 +1,65 @@
+Using the terminal
+==================
+
+A terminal is a command-line interface where you can type in commands and interact with your computer's operating system.
+It can be a powerful tool for programmers, allowing them to execute complex tasks with just a few keystrokes.
+However, it can also be intimidating for beginners who are not familiar with using it.
+
+What is a Terminal?
+-------------------
+
+A terminal is a text-based interface that allows you to interact with your computer's operating system.
+It provides a way to execute commands and run programs without using a graphical user interface (GUI).
+The terminal is also known bu different names, depending on the operating system you are using.
+
+- **Windows**: The terminal is typically called Command Prompt or PowerShell.
+- **macOS**: The terminal is simply called Terminal, and it uses a shell called Bash or Zsh.
+- **Linux**: The terminal is also called Terminal, and it commonly uses Bash.
+
+Why use the terminal?
+---------------------
+
+The terminal can be a powerful tool for programmers and developers.
+Here are some reasons why you might want to use the terminal:
+
+- **Efficiency**: The terminal allows you to execute commands quickly and efficiently, without having to navigate through menus and windows.
+- **Automation**: You can write scripts and automate repetitive tasks using the terminal.
+- **Remote access**: The terminal can be used to connect to remote servers and run commands on them.
+- **Development**: Many development tools and libraries are designed to be used from the terminal.
+
+Getting started with the terminal
+---------------------------------
+
+If you're new to using the terminal, it can be helpful to start with some basic commands and concepts.
+
+- **Navigating directories**:
+
+ - List files and directories: ``ls`` (macOS/Linux) or ``dir`` (Windows)
+ - Change directory: ``cd ``
+ - Show the current directory: ``pwd`` (macOS/Linux) or ``cd`` (Windows)
+
+- **Working with files**:
+
+ - Create a file: ``touch ``
+ - Create a new directory: ``mkdir ``
+ - Remove a file: ``rm ``
+ - Remove a directory: ``rm -r ``
+ - Copy a file: ``cp