Skip to main content

Electronic navigational charts (ENCs) processing & visualization

Project description

SeaCharts

Python-based API for Electronic Navigational Charts (ENC)

python version license platform platform

Features

  • Read and process spatial depth data from FileGDB files into shapefiles.
  • Access and manipulate standard geometric shapes such as points and polygon collections.
  • Visualize colorful seacharts features and vessels.

Code style

This module follows the PEP8 convention for Python code.

Roadmap

  • 1: Add better compatibility for all operating systems (Windows, Linux++). Right now, GDAL and Cartopy are problematic to install on most platforms. Consider finding other packages for map loading and charts projections.
  • 2: Add support for multiple map data formats (.gis, .gdb, .json) from any region in the world, in all UTM zones or lat/lon coordinates.
  • 3: Use another plotting framework that has higher refresh rate or is feasible for real-time (Qt?, React?).
  • 4: Add options for plotting trajectories, ships, traffic information/AIS data etc. on the frontend display.
  • 5: Add support for reading and loading in weather data (wind and current maps++) from a separate module.

Prerequisites

Linux (Virtual Environment)

First, ensure that you have the GDAL and GEOS libraries installed, as these are required in order to successfully install GDAL and Cartopy:

sudo apt-get install libgeos-dev libgdal-dev

From the root folder, one may then install an editable version of the package as follows:

pip install -e .

This should preferably be done inside a virtual environment in order to prevent Python packaging conflicts.

Anaconda

Install an edition of the Anaconda package manager, and then create a new conda environment with Python 3.11 or higher using e.g. the graphical user interface of PyCharm Professional as detailed here.

The required data processing libraries for spatial calculations and visualization may subsequently be installed simply by running the following commands in the terminal of your chosen environment:

conda install -c conda-forge fiona cartopy matplotlib
conda install matplotlib-scalebar cerberys pyyaml

Windows (Pipwin)

First, ensure that Python 3.11 or higher is installed. Next, install all required packages using Pipwin:

python -m pip install --upgrade pip
pip install wheel
pip install pipwin
pipwin install numpy
pipwin install gdal
pipwin install fiona
pipwin install shapely
pip install cartopy
pip install pyyaml
pip install cerberus
pip install matplotlib-scalebar

Simply copy and paste the entire block above (including the empty line) into the terminal of your virtual environment, and go get a cup of coffee while it does its thing.

Installation

After the necessary dependencies have been correctly installed, the SeaCharts package may be installed directly through the Python Package Index (PyPI) by running the following command in the terminal:

pip install seacharts

or locally inside the SeaCharts root folder as an editable package with pip install -e .

Usage

This module supports reading and processing FGDB files for sea depth data, such as the Norwegian coastal data set used for demonstration purposes, found here.

Downloading regional datasets

To visualize and access coastal data of Norway, follow the above link to download the Depth data (Sjøkart - Dybdedata) dataset from the Norwegian Mapping Authority by adding it to the Download queue and navigating to the separate download page. Choose one or more county areas (e.g. Møre og Romsdal), and select the EUREF89 UTM sone 33, 2d (UTM zone 33N) projection and FGDB 10.0 format. Finally, select your appropriate user group and purpose, and click Download to obtain the ZIP file(s).

Configuration and startup

Unpack the downloaded file(s) and place the extracted .gdb in a suitable location, in which the SeaCharts setup may be configured to search. The current working directory as well as the relative data/ and data/db/ folders are included by default.

The minimal example below imports the ENC class from seacharts.enc with the default configuration found in seacharts/config.yaml, and shows the interactive SeaCharts display. Note that at least one database with spatial data (e.g. Møre og Romsdal from the Norwegian Mapping Authority) is required.

if __name__ == '__main__':

    from seacharts.enc import ENC

    enc = ENC()
    enc.display.show()

The config.yaml file specifies which file paths to open and which area to load. The corresponding config_schema.yaml specifies how the required setup parameters must be provided, using cerberus.

API usage and accessing geometric shapes

After the spatial data is parsed into shapefiles during setup, geometric shapes based on the Shapely library may be accessed and manipulated through various ENC attributes. The seacharts feature layers are stored in seabed, shore and land.

if __name__ == '__main__':
    from seacharts.enc import ENC

    # Values set in user-defined 'seacharts.yaml'
    # size = 9000, 5062
    # center = 44300, 6956450
    enc = ENC("seacharts.yaml")

    print(enc.seabed[10])
    print(enc.shore)
    print(enc.land)

    enc.display.show()

Note how custom settings may be set in a user-defined .yaml-file, if its path is provided to the ENC during initialization. One may also import and create an instance of the seacharts.Config dataclass, and provide it directly to the ENC.

Environment visualization

The ENC.start_display method is used to show a Matplotlib figure plot of the loaded sea charts features. Zoom and pan the environment view using the mouse scroll button, and holding and dragging the plot with left click, respectively.

Dark mode may be toggled using the d key, and an optional colorbar showing the various depth legends may be toggled using the c key. Images of the currently shown display may be saved in various resolutions by pressing Control + s, Shift + s or s.

License

This project uses the MIT license.

MIT License

Copyright (c) 2021 Simon Blindheim

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

seacharts-3.0.0.tar.gz (25.8 kB view details)

Uploaded Source

Built Distribution

seacharts-3.0.0-py3-none-any.whl (27.1 kB view details)

Uploaded Python 3

File details

Details for the file seacharts-3.0.0.tar.gz.

File metadata

  • Download URL: seacharts-3.0.0.tar.gz
  • Upload date:
  • Size: 25.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for seacharts-3.0.0.tar.gz
Algorithm Hash digest
SHA256 7506a3cf89f32b32cc9ebe2b3a939e5f266048b1bf3f9abb83f8b8e4b2594acd
MD5 ee80310f6f5e37212236a82a30c26881
BLAKE2b-256 5d7908a7f209bb23c2b6de15e260efd6b98d96f62703d82044e728585569b54d

See more details on using hashes here.

File details

Details for the file seacharts-3.0.0-py3-none-any.whl.

File metadata

  • Download URL: seacharts-3.0.0-py3-none-any.whl
  • Upload date:
  • Size: 27.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for seacharts-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dfbdad5c993249b6a122caec8b30af0dd2c20ab9f51027b6617a0014a6742a19
MD5 5aed52f6ac293cfd0c847176acf605f5
BLAKE2b-256 cd0648e7e49d067b80d22ddbbe315aa079e6719b3c661536677e55cd898bb6c4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page