Skip to content

Fundacio-i2CAT/OSM-GIS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Maintenance made-with-python AGPLv3 license

OSM-GIS

A Chrome extension that brings geo-spatial awareness into NFV orchestration workflows, helping network operators plan and schedule service deployments over Non-Terrestrial Networks (NTN).


Description

Managing network services over Non-Terrestrial Networks presents a unique challenge: the infrastructure — LEO/MEO satellites — is constantly moving, while the end users and service areas are fixed to the ground. Classical ETSI MANO orchestrators like Open Source MANO (OSM) are designed for static infrastructure and have no native concept of satellite visibility windows or coverage constraints.

OSM-GIS bridges that gap. It is a browser extension that overlays an interactive map directly inside the OSM dashboard (or any compatible web UI). The operator can:

  • Visualise the real-time position and ground track of one or more satellites, propagated live from TLE data fetched from Celestrak.
  • Draw or select a target geographic area — the region where the network service must be reachable.
  • Calculate the time windows during which each satellite has coverage over that area (i.e. when a pass occurs).
  • Export those windows as cron-based scheduling triggers compatible with OSM's NSD additionalParams, enabling the orchestrator to automatically instantiate and terminate the service only when the satellite is overhead.

The result is a workflow where the operator defines where the service is needed, the extension computes when the satellite will be there, and OSM handles how the service is deployed — all without leaving the browser.


Architecture

The extension is composed of two complementary injection modes and a self-contained map application.

Chrome Extension
│
├── inject_panel.js          Content script (runs on every page)
│   └── Looks for a <div id="map"> in the host page.
│       If found, replaces its content with an <iframe>
│       pointing to popup.html. This is the primary mode
│       used inside the OSM dashboard, where the map
│       panel is embedded directly in the workflow UI.
│
├── popup.html / popup.js    Standalone popup (toolbar icon)
│   └── Opened when the user clicks the extension icon.
│       Useful outside the OSM dashboard or for quick
│       access. Attempts to auto-detect the active
│       satellite name from the current tab's DOM.
│
└── Map Application  (popup.html + modules/)
    ├── modules/map.js           OpenLayers map, all layers, draw interaction
    ├── modules/ui_manager.js    UI events, layer toggles, WFS-T, pass calculation
    ├── modules/satellite_utils.js  TLE propagation, coverage window algorithm
    ├── modules/time_manager.js  Real / simulated time switch
    └── modules/config.js        Runtime config loaded from chrome.storage

Map layers

Layer Source Purpose
Base map CartoDB Dark Matter (XYZ) Dark background for contrast
Political boundaries Local GeoServer WFS (ne:countries) Country outlines for geographic context
Coverage areas Local GeoServer WFS (i2cat:coverage_areas) Persistent service areas stored server-side
Satellite orbit Computed from TLE (satellite.js) Predicted ground track for the next ~3 hours
Satellite marker Computed from TLE, updates every 500 ms Real-time position icon
Clouds / Precipitation OpenWeatherMap tile API Optional weather overlay
ITU BBMaps layers ITU public WMS Transmitters, submarine cables, earth stations, nodes

OSM dashboard integration

When the OSM UI renders a VIM Accounts page, inject_panel.js detects the <div id="map"> placeholder and fills it with the map iframe. The popup also scrapes the VIM account names from the table (app-vim-account-details tbody tr) and pre-loads the matching TLEs, so the satellite(s) assigned to that VIM appear on the map immediately.

Drawn or selected coverage areas are persisted to GeoServer via WFS-T (transactional insert and delete), making them available across sessions and users.


How It Works

  1. Load satellites — Type one or more satellite names (comma-separated) in the Satellite field and press Enter. TLE data is fetched from Celestrak. The orbit ground track is drawn on the map and the satellite marker starts updating in real time.

  2. Select or draw a target area — Click an existing country or coverage polygon on the map to select it, or click Draw Region to draw a custom polygon. The drawn area is saved to GeoServer automatically.

  3. Calculate passes — Click Calc Passes. The extension propagates the satellite position at 30-second intervals over the next ~3 hours and uses bisection to find precise entry/exit times for each pass over the selected area.

  4. Export to OSM — Click the Status label to toggle to cron format. The output is a YAML block ready to paste into an OSM NSD as additionalParams.triggers. Click COPY to inject it directly into the #config textarea of the active OSM tab.

  5. Manage layers — Use the Layers dropdown to toggle weather overlays, ITU infrastructure data, and the political base map.


Prerequisites

  • Chrome (or any Chromium-based browser) version 109 or later (Manifest V3 support required).
  • A running GeoServer instance accessible from the browser, with:
    • A WFS layer ne:countries for political boundaries.
    • A WFS-T layer i2cat:coverage_areas for persistent drawn areas (schema in plugin/schema.xml).
  • An OpenWeatherMap API key if you want to use the weather overlay layers.
  • An OSM (Open Source MANO) deployment if you want the full dashboard integration and cron export workflow. The extension works as a standalone satellite tracker without it.

Installation

  1. Clone or download this repository.
  2. Open Chrome and navigate to chrome://extensions.
  3. Enable Developer mode (toggle in the top-right corner).
  4. Click Load unpacked and select the plugin/ directory.
  5. Right-click the extension icon and choose Options to set your GeoServer URL and OpenWeatherMap API key.

Configuration

All runtime configuration is stored in chrome.storage.local and edited via the Options page (right-click the extension icon → Options).

Setting Default Description
GeoServer Base URL http://172.27.12.34:8082/geoserver Base URL for all WFS and WFS-T requests
OpenWeatherMap API Key (bundled key) Used for clouds and precipitation tile layers

To simulate a specific date/time for pass calculation (useful for testing), edit TIME_CONFIG in plugin/modules/time_manager.js and set useSimulatedTime: true.


Project Structure

plugin/
├── manifest.json            Extension manifest (MV3)
├── popup.html               Main map UI
├── popup.js                 Entry point (ES module)
├── popup.css                UI styles
├── inject_panel.js          Content script — iframe injector
├── options.html             Settings page
├── options.js               Settings page logic
├── ol.js                    OpenLayers (bundled)
├── ol.css                   OpenLayers styles
├── proj4.js                 Proj4 projection library (bundled)
├── satellite.min.js         satellite.js SGP4 library (bundled)
├── saticon.png              Satellite marker icon
├── schema.xml               GeoServer WFS-T schema for coverage_areas
└── modules/
    ├── config.js            Runtime config + chrome.storage loader
    ├── map.js               OpenLayers map, layers, interactions
    ├── satellite_utils.js   TLE propagation, coverage windows, formatters
    ├── time_manager.js      Real / simulated time
    └── ui_manager.js        UI event wiring and orchestration

Licence

Licensed under the GNU AFFERO GENERAL PUBLIC LICENSE. See https://www.gnu.org/licenses/agpl-3.0.en.html.

For licensing enquiries: techtransfer@i2cat.net

Third-party libraries bundled in this repository (ol.js, proj4.js, satellite.min.js) are subject to their own respective licenses (BSD 2-Clause, MIT, and MIT respectively).

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors