Skip to content
Snippets Groups Projects
Commit b4afa42f authored by Erik Reid's avatar Erik Reid
Browse files

Merge branch 'feature/make-standard-doc-layout'

parents a5ae4063 663cb62c
No related branches found
No related tags found
No related merge requests found
sphinx-build -b html -t drawio docs/source docs/build
openapi.json
......@@ -5,8 +5,8 @@
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
SOURCEDIR = source
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
......
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=.
set BUILDDIR=_build
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.https://www.sphinx-doc.org/
exit /b 1
)
if "%1" == "" goto help
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd
API specification
==================
Generated by openapi.json file obtained from fastapi.
Docs are also available at the /docs route of a running server.
.. openapi:: ./openapi.json
......@@ -2,29 +2,58 @@
#
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
from datetime import datetime
import json
import os
import sys
sys.path.insert(0, os.path.abspath("../mapping_provider"))
sys.path.insert(
0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))
)
from mapping_provider import create_app
# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
project = 'Mapping Provider'
copyright = '2025, GÉANT'
author = 'GÉANT'
release = '0.1'
project = 'GÉANT Mapping Provider'
copyright = f"{datetime.now().year}, GÉANT"
author = 'swd@geant.org'
release = '0.0'
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
extensions = ['sphinx.ext.autodoc']
extensions = [
"sphinx_rtd_theme",
# "sphinx.ext.autodoc",
"sphinx.ext.coverage",
"sphinxcontrib.plantuml",
"sphinxcontrib.openapi",
]
# tags is injected by sphinx into conf.py
# toggle this by running ``sphinx-build -t drawio``
if tags.has("drawio"): # noqa F821
extensions.append("sphinxcontrib.drawio")
templates_path = ['_templates']
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
exclude_patterns = []
plantuml = f'java -jar {os.path.expanduser("~/bin/plantuml.jar")}'
# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
html_theme = 'alabaster'
html_theme = 'sphinx_rtd_theme'
html_static_path = ['_static']
api_schema = create_app().openapi()
openapi_filename = os.path.join(os.path.dirname(__file__), "openapi.json")
with open(openapi_filename, 'w') as f:
json.dump(api_schema, f, indent=4)
<mxfile host="Electron" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.9 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="26.0.9">
<diagram name="hl-arch" id="52Qc7nEq3IphXZwXqFKS">
<mxGraphModel dx="1579" dy="543" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="qRnl4kCob0Xuz_cL3leS-1" value="mapping provider" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;verticalAlign=bottom;align=right;spacingRight=5;" vertex="1" parent="1">
<mxGeometry x="110" y="30" width="240" height="240" as="geometry" />
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-2" value="map web server" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;verticalAlign=bottom;align=right;spacingRight=5;" vertex="1" parent="1">
<mxGeometry x="-230" y="70" width="270" height="260" as="geometry" />
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-3" value="processor&lt;div&gt;web&lt;/div&gt;&lt;div&gt;service&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="-120" y="170" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-4" value="mapping-provider" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="170" y="170" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-5" value="GSO" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="460" y="50" width="110" height="60" as="geometry" />
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-6" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-3" target="qRnl4kCob0Xuz_cL3leS-4">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="110" y="260" as="sourcePoint" />
<mxPoint x="160" y="210" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-7" value="REST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="50" y="175" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-8" value="template" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=12;dashed=1;dashPattern=1 2;" vertex="1" parent="1">
<mxGeometry x="-100" y="270" width="80" height="30" as="geometry" />
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-9" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-8" target="qRnl4kCob0Xuz_cL3leS-3">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="110" y="280" as="sourcePoint" />
<mxPoint x="160" y="230" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-10" value="Client" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
<mxGeometry x="-400" y="105" width="30" height="60" as="geometry" />
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-11" value="map/gui" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=12;" vertex="1" parent="1">
<mxGeometry x="-210" y="120" width="80" height="30" as="geometry" />
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-12" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=80;entryDy=21;entryPerimeter=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-3" target="qRnl4kCob0Xuz_cL3leS-11">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="30" y="270" as="sourcePoint" />
<mxPoint x="80" y="220" as="targetPoint" />
<Array as="points">
<mxPoint x="-60" y="141" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-13" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-11" target="qRnl4kCob0Xuz_cL3leS-10">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="30" y="250" as="sourcePoint" />
<mxPoint x="80" y="200" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-14" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-5" target="qRnl4kCob0Xuz_cL3leS-4">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="170" y="230" as="sourcePoint" />
<mxPoint x="480" y="200" as="targetPoint" />
<Array as="points">
<mxPoint x="420" y="80" />
<mxPoint x="420" y="200" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-15" value="Inventory Provider" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="460" y="130" width="110" height="60" as="geometry" />
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-16" value="Dashboard" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="460" y="205" width="110" height="60" as="geometry" />
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-17" value="BRIAN (InfluxDB)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="460" y="280" width="110" height="60" as="geometry" />
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-18" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-17" target="qRnl4kCob0Xuz_cL3leS-4">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="470" y="90" as="sourcePoint" />
<mxPoint x="300" y="210" as="targetPoint" />
<Array as="points">
<mxPoint x="420" y="310" />
<mxPoint x="420" y="200" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-19" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-15" target="qRnl4kCob0Xuz_cL3leS-4">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="470" y="90" as="sourcePoint" />
<mxPoint x="300" y="210" as="targetPoint" />
<Array as="points">
<mxPoint x="420" y="160" />
<mxPoint x="420" y="200" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-20" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-16" target="qRnl4kCob0Xuz_cL3leS-4">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="470" y="170" as="sourcePoint" />
<mxPoint x="300" y="210" as="targetPoint" />
<Array as="points">
<mxPoint x="420" y="235" />
<mxPoint x="420" y="200" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-21" value="cache/state" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
<mxGeometry x="170" y="50" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="qRnl4kCob0Xuz_cL3leS-22" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeWidth=3;fillColor=#0050ef;strokeColor=#001DBC;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-4" target="qRnl4kCob0Xuz_cL3leS-21">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="170" y="190" as="sourcePoint" />
<mxPoint x="220" y="140" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
.. Mapping Provider documentation master file, created by
sphinx-quickstart on Fri Apr 11 11:07:12 2025.
.. GÉANT Mapping Provider documentation master file, created by
sphinx-quickstart on Mon Apr 14 11:36:42 2025.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Mapping Provider documentation
==============================
Add your content using ``reStructuredText`` syntax. See the
`reStructuredText <https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html>`_
documentation for details.
GÉANT Mapping Provider documentation
====================================
.. toctree::
:maxdepth: 2
:caption: Contents:
api
planning
......@@ -19,3 +19,4 @@ Module contents
:members:
:undoc-members:
:show-inheritance:
......@@ -5,3 +5,4 @@ mapping_provider
:maxdepth: 4
mapping_provider
.. raw:: html
<table border="1">
<thead>
<tr>
<th>NREN</th>
<th>Static Network Map Image</th>
<th>Interactive Network Map</th>
<th>Comment</th>
</tr>
</thead>
<tbody>
<tr>
<td>ACOnet</td>
<td>https://www.aco.net/topologie.html?L=1</td>
</tr>
<tr>
<td>AMRES</td>
<td>https://www.amres.ac.rs/amres/amres-infrastruktura</td>
<td>https://www.amres.ac.rs/amres/amres-infrastruktura</td>
</tr>
<tr>
<td>ARNES</td>
<td>https://www.arnes.si/en/infrastructure/</td>
</tr>
<tr>
<td>ASNET-AM</td>
<td>https://asnet.am/images/skhema1.jpg</td>
</tr>
<tr>
<td>AzScienceNet</td>
<td>https://azsciencenet.az/uploads/AzScienceNet_schem.png</td>
</tr>
<tr>
<td>Belnet</td>
<td>https://www.belnet.be/en/networks/belnet-network</td>
</tr>
<tr>
<td>BASNET</td>
</tr>
<tr>
<td>BREN</td>
</tr>
<tr>
<td>CARNET</td>
</tr>
<tr>
<td>CESNET</td>
<td>https://photonics.cesnet.cz/cs/topologie</td>
<td>https://netreport.cesnet.cz/netreport/</td>
</tr>
<tr>
<td>CSC</td>
<td></td>
<td>https://netmap.funet.fi/</td>
<td>closest to our requirement in terms of overlay and grafana</td>
</tr>
<tr>
<td>CYNET</td>
</tr>
<tr>
<td>DeiC</td>
<td>https://www.deic.dk/en/research-network</td>
</tr>
<tr>
<td>DFN</td>
<td></td>
<td>https://www.dfn.de/netz/</td>
<td>not very informative</td>
</tr>
<tr>
<td>EENet</td>
<td>https://www.eenet.ee/EENet/magistraalvork</td>
</tr>
<tr>
<td>FCCN</td>
<td>https://www.fccn.pt/media/2022/04/Mapa-de-Rede-Fibra-2022.pdf</td>
</tr>
<tr>
<td>GARR</td>
<td>https://www.garr.it/en/infrastructures/network-infrastructure/our-network</td>
<td>https://gins.garr.it/xhome_weathermaps.php</td>
<td>interactive map seems good way to breakdown</td>
</tr>
<tr>
<td>GRENA</td>
<td>https://netview.grena.ge/</td>
<td></td>
<td>login required</td>
</tr>
<tr>
<td>GRNET</td>
<td>
<p>https://grnet.gr/infrastructure/network-and-topology/</p>
<p>https://mon.grnet.gr/networkmap/?type=network&raw=True</p>
<p>https://mon.grnet.gr/networkmap/</p>
</td>https://mon.grnet.gr/pops/</td>
<td>good starting point from site </td>
</tr>
<tr>
<td>HEAnet</td>
<td>https://www.heanet.ie/the-network</td>
<td>https://www.hea.net/</td>
<td>map an service is separately represented</td>
</tr>
<tr>
<td>IUCC</td>
</tr>
<tr>
<td>KIFU</td>
<td>https://kifu.gov.hu/infrastructure/</td>
</tr>
<tr>
<td>KREN</td>
</tr>
<tr>
<td>LAT</td>
</tr>
<tr>
<td>LITNET</td>
<td>https://litnet.lt/</td>
</tr>
<tr>
<td>MARnet</td>
<td>https://ukim.edu.mk/megjunarodna-sorabotka/internacionalizacija/chlenstvo-vo-akademski-mrezhi/</td>
</tr>
<tr>
<td>MREN</td>
<td></td>
<td>https://netmon.ucg.ac.me/mantra/</td>
<td>no map overlay</td>
</tr>
<tr>
<td>PSNC</td>
<td>https://pionier.net.pl/en/about-pionier/#interaktywna_mapa_sieci_pionier</td>
<td>neat representation on side panel</td>
</tr>
<tr>
<td>RARE</td>
<td></td>
<td>https://gfn-gp4l-rare.public.nmaas.eu/dashboards/f/ddyhkm9cflc74c/gp4l</td>
</tr>
<tr>
<td>RASH</td>
<td>https://www.rash.al/media/filer_public_thumbnails/filer_public/bc/a7/bca70fbc-295c-4a4b-9873-92a4a64791b3/rrjeti_i_skeme_i_geant.jpg__1280x736_q85_subsampling-2.jpg
</td>
</tr>
<tr>
<td>RedIRIS</td>
<td>https://www.rediris.es/lared/mapa.html</td>
</tr>
<tr>
<td>RENAM</td>
</tr>
<tr>
<td>RENATER</td>
<td>
<p>https://www.renater.fr/documentation/ressources-multimedia/weathermap/metropole/</p>
<p>https://www.renater.fr/documentation/ressources-multimedia/weathermap/weathermap_domtom/</p>
</td>
</tr>
<tr>
<td>Restena</td>
<td>https://www.restena.lu/en/network</td>
</tr>
<tr>
<td>RHnet</td>
</tr>
<tr>
<td>RoEdunet</td>
</tr>
<tr>
<td>SANET</td>
<td>https://www.sanet.sk/?page_id=2388</td>
</tr>
<tr>
<td>Sikt</td>
<td>https://stats.uninett.no/stat-q/load-map/uninett,,traffic,peak</td>
</tr>
<tr>
<td>SUNET</td>
<td>http://stats.sunet.se/stat-q/load-map/SunetC-univ,,traffic,peak</td>
</tr>
<tr>
<td>SURF</td>
<td></td>
<td>https://netwerkdashboard.surfnet.nl/</td>
<td>inaccesible</td>
</tr>
<tr>
<td>SWITCH</td>
<td>https://static.www.switch.ch/sites/default/files/styles/hero_large_16_9/public/2024-10/omg.png?itok=gDXPFCmI
</td>
</tr>
<tr>
<td>ULAKBIM</td>
<td>https://stat.ulakbim.gov.tr/ulaknet/</td>
<td>small size poor network direction but has integration with data speed info</td>
</tr>
<tr>
<td>URAN</td>
<td>https://uran.ua/~eng/net-ukraine.htm</td>
</tr>
</tbody>
</table>
\ No newline at end of file
Planning, Design, etc
=====================================
.. contents:: Contents
:depth: 4
:local:
Nominal Use Cases/Requirements
------------------------------
- replace intermapper/heat map
- availability
- capacity
- utilisation
- etc.
- integrate with connectivity map
- visualize geant-owned data-driven info on the same map with static (manually input/managed) non-geant data
- monitoring
- health of nodes/edges
- alarms/link state edge heat map
- grid-based for fixed (e.g. our) networks
- handle overlapping edges
Ideas
-----
- For the Geant-managed heat maps: maybe nice to agree upon a simple grid-locked geo-node/edge approach
Some R&E Samples
----------------
- ESNet - Netsage
- https://portal.netsage.global
- https://www.netsage.global
- https://github.com/GlobalNOC/globalnoc-networkmap-panel
- https://grafana.com/grafana/plugins/esnet-networkmap-panel/
- https://github.com/esnet/grafana-esnet-networkmap-panel/tree/main
- Jisc - Netsight3
- https://www.jisc.ac.uk/netsight
- https://netsight3.ja.net/help/
- SURF Netwerk Dashboard
- https://netwerkdashboard.surfnet.nl/
- Reannz weathermap:
- https://weathermap.reannz.co.nz/
- Funet network load map:
- https://netmap.funet.fi/
- NORDUnet:
- https://stats.nordu.net/stat-q/load-map/ndn-map,,traffic,peak
- Pionier/PSNC:
- https://pionier.net.pl/en/about-pionier/#interaktywna_mapa_sieci_pionier
- Timemap (WP6, mainly GARR)
- https://timemap.geant.org/
- https://gitlab.geant.org/fabio.farina/timemap (New link https://gitlab.software.geant.org/fabio.farina/timemap )
Misc Internal things
--------------------
- IS/IS-driven: http://netdash.geant.net:8080/static/isis/geantISIS.svg
- Intermapper
- https://weathermap.geant.org/g59bce200/document/_/!index.html?REFRESH=10+Seconds
- ULAKBIM
- https://stat.ulakbim.gov.tr/ulaknet/
NRENS with their network info
------------------------------
.. include:: nren-maps.html
FrontEnd Technologies worth exploring
--------------------------------------
- Openlayers : https://openlayers.org/
- Leaflet : https://leafletjs.com/
- GeoJson : https://geojson.io/#map=3.53/43.52/6.81
High-Level Architecture
-------------------------
.. only:: drawio
.. drawio-image:: diagrams.drawio
:page-name: hl-arch
Design/Edit concerns for subway map
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- rendered end-user maps are static (i.e. end-user can't move map elements around)
- designers need some way of customizing maps
- draw.io?
- can we support full design control? i.e. artists drawing shapes/effects
- some styles are ok with draw.io
- Designer input
- how should we handle errors in designer input?
- should we have a validation step when designers return their modifications?
- should we keep the design template completely outside of mapping provider? or some metadata (e.g. lists of nodes/edges) in mapping provider?
- Discussion with Andrea:
- Andrea can produce svg's, with some unique id in the id attribute
- front end will update svg based on mapping-provider overlay data
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment