Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
b315487
remove srv/php files
Mar 25, 2026
9e4490b
remove php docker env
Mar 25, 2026
b030c37
remove php doc references
Mar 25, 2026
59dc061
rm php from js logic, adapt i18n, remove php config sample
Mar 25, 2026
6d12f5a
adapt README without php
Mar 25, 2026
7f4e891
doc - how to move to python backend
Mar 25, 2026
1962af9
Reorganize, simplify with python only
Mar 30, 2026
e522e0c
remove old files
Mar 30, 2026
ea30faf
simplify install
Mar 30, 2026
fd70c68
use only one front config file
Apr 1, 2026
666b993
rename dockerfile
Apr 1, 2026
e0c7df2
adapt docke compose
Apr 1, 2026
9493165
change dockerfile info
Apr 1, 2026
4199970
docker fix user
Apr 1, 2026
29e063f
Change py import
Apr 1, 2026
4d30108
level up vscode debug conf
Apr 2, 2026
453b2b7
delete cache files
Apr 3, 2026
dfb7019
Add default service file
Apr 7, 2026
573fd0a
remove cache files
Apr 7, 2026
12ca3f5
remove cache files
Apr 7, 2026
bed4937
use old redirect to avoid regression
Apr 7, 2026
512f0e1
better gitignore
Apr 8, 2026
c4a7f1d
note de migration 4.2.2
Apr 8, 2026
98fbf0f
change version in mig note
Gaetanbrl Apr 8, 2026
0a22ead
coquilles
lecault Apr 8, 2026
637fd46
Fix doc
Gaetanbrl Apr 8, 2026
0db7199
remove cache files
Apr 8, 2026
8b6ad07
change package.json location and pretify static files
Apr 8, 2026
1c17353
Merge pull request #404 from mviewer/move-files
lecault Apr 9, 2026
3372e3b
Amélioration des README (#407)
Gaetanbrl Apr 9, 2026
7d64ccd
version python
lecault Apr 9, 2026
a16b72d
fix doc with correct structure
Apr 9, 2026
021b012
reorder migration note desc
Apr 9, 2026
33eec59
docker compose fix
Apr 9, 2026
adc3353
build image info
Apr 9, 2026
c37e3c5
fix image tag and black py formatting
Apr 9, 2026
1278012
url admin deleguee
lecault Apr 10, 2026
a29f746
version mviewer
lecault Apr 10, 2026
4e23ffb
correction coquilles
lecault Apr 10, 2026
f4be22d
Update migration_notes.rst
lecault Apr 10, 2026
159ffe4
fix:error on xml download & close #401
Apr 10, 2026
018c97b
quick start with docker compose
Apr 10, 2026
ca98acb
Update migration_notes.rst
lecault Apr 13, 2026
e67cfe4
Update install_python.rst
lecault Apr 16, 2026
23463d9
Fix minimal py version
Apr 16, 2026
3bd17c7
Mise en cohérance doc / conf
lecault Apr 16, 2026
8135242
Update install_python.rst
lecault Apr 16, 2026
74b8a57
mise en cohérence chemin doc et conf
lecault Apr 16, 2026
ec6b2d5
Merge branch 'develop' of github.com:mviewer/mviewerstudio into develop
lecault Apr 16, 2026
49a0398
Update install_docker.rst
lecault Apr 16, 2026
45f07ba
fix wrong file
Apr 16, 2026
86805e5
add correct versions classifier
Apr 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,12 @@ jobs:
python-version: '3.12'

- name: "python backend - install requirements"
working-directory: srv/python
run: |
pip install -r requirements.txt -r dev-requirements.txt
pip install -e .
pip install -r install/requirements.txt -r install/dev-requirements.txt
pip install -e ./src

- name: "python backend - Checking format"
working-directory: srv/python
working-directory: src
run: |
black . --check

Expand Down
43 changes: 26 additions & 17 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,37 +1,46 @@
# Byte-compiled / optimized / DLL files
# Python cache
__pycache__/
*.py[cod]
*$py.class

# test
# Test / tooling cache
.pytest_cache/
.mypy_cache/

# Build / packaging
*.egg-info/
*.egg
srv/python/build
build/
dist/


# IDE stuff
.idea
.vscode
# IDE
.idea/
.vscode/
*.iml

# venv
**/venv
# Virtual environments
.venv/
venv/
env/

# Static config
src/static/config.json

# static (python backend)
srv/python/mviewerstudio_backend/static
# Logs
logs/

# pyenv
# Pyenv
.python-version
?venv/

# Docs
pydocs*

# store
# App data
store/
public/

# npm
node*
package-*
# Node
node_modules/
package-lock.json
yarn.lock
pnpm-lock.yaml
6 changes: 3 additions & 3 deletions srv/python/.vscode/launch.json → .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
"request": "launch",
"module": "flask",
"env": {
"FLASK_APP": "mviewerstudio_backend/app.py",
"FLASK_APP": "/home/user/git/mviewerstudio/src/app.py",
"FLASK_DEBUG": "1",
"CONF_PATH_FROM_MVIEWER":"apps/store",
"EXPORT_CONF_FOLDER":"/home/user/git/mviewer/apps/store/",
"MVIEWERSTUDIO_PUBLISH_PATH":"/home/user/git/mviewer/apps/public",
"EXPORT_CONF_FOLDER":"/home/gaetan/projects/mviewer/mviewer/apps/store/",
"MVIEWERSTUDIO_PUBLISH_PATH":"/home/gaetan/projects/mviewer/mviewer/apps/public",
"CONF_PUBLISH_PATH_FROM_MVIEWER":"apps/public",
"DEFAULT_ORG":"geobretagne",

Expand Down
59 changes: 51 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,55 @@
# mviewerstudio
# 🗺️ mviewerstudio

mviewer studio est une application web dont le but est de faciliter la création d'une configuration pour [mviewer](https://github.com/mviewer/mviewer) à l'aide d'une interface graphique ergonomique et simple.
**mviewerstudio** est une application web qui facilite la création de configurations pour [mviewer](https://github.com/mviewer/mviewer) avec une interface graphique ergonomique et simple.

Application écrite en Javascript pour le front.
2 backends disponibles : écrits en Python pour l'un et en PHP pour l'autre.
- **Frontend** : JavaScript
- **Backend** : Python + Flask
- **Plateforme** : Linux

Référez-vous à la documentation pour plus d'information :
---

* [Documentation utilisateur](https://mviewerstudio.readthedocs.io/fr/stable/doc_user/accueil.html)
* [Documentation d'installation](https://mviewerstudio.readthedocs.io/fr/stable/doc_tech/install_python.html)
* [Documentation administrateur](https://mviewerstudio.readthedocs.io/fr/stable/doc_tech/config_front.html)
## 🚀 Quick Start docker compose

```
# code source
git clone https://github.com/mviewer/mviewerstudio.git
cd mviewerstudio
# docker
docker compose up -d
```
Accédez à : **http://localhost/mviewerstudio**

Pour des instructions détaillées avec Flask ou Docker, voir le [Guide d'installation](install/README.md)

---

## 📚 Documentation

### Installation

- 🇫🇷 [Instructions d'installation en français](install/README.fr.md)
- 🇬🇧 [Installation instructions in English](install/README.en.md)

### Documentation en ligne

- 📘 [Documentation utilisateur (FR)](https://mviewerstudio.readthedocs.io/fr/stable/doc_user/accueil.html)
- 🔧 [Guide d'installation (FR)](https://mviewerstudio.readthedocs.io/fr/stable/doc_tech/install_python.html)
- ⚙️ [Configuration et administration (FR)](https://mviewerstudio.readthedocs.io/fr/stable/doc_tech/config_front.html)
- 💻 [Documentation technique (FR)](https://mviewerstudio.readthedocs.io/fr/stable/doc_tech/dev_corner.html)

---

## ✅ Prérequis

- Système Linux avec `bash`
- Python >= 3.9 et `venv`
- `git`
- `apt` (optionnel, pour installation automatique)

---

## 🔗 Ressources

- [Dépôt GitHub](https://github.com/mviewer/mviewerstudio)
- [Documentation ReadTheDocs](https://mviewerstudio.readthedocs.io/fr/stable/)
- [mviewer](https://github.com/mviewer/mviewer)
138 changes: 138 additions & 0 deletions apps/default.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8"?>
<config>
<application title="Mviewer" mouseposition="false" logo="" help="mviewer_help.html" measuretools="true" mapprint="true" exportpng="true" togglealllayersfromtheme="true"/>
<mapoptions maxzoom="19" projection="EPSG:3857" center="-220750.13768758904,6144925.57790189" zoom="8" projextent="-20037508.342789244, -20037508.342789244, 20037508.342789244, 20037508.342789244" />

<baselayers style="gallery">
<baselayer type="WMTS" id="ortho" label="Photo aérienne IGN" title="GéoPortail" maxscale="1000" thumbgallery="img/basemap/ortho.jpg"
url="https://data.geopf.fr/wmts" layers="ORTHOIMAGERY.ORTHOPHOTOS" format="image/jpeg" visible="false" fromcapacity="false"
attribution="&lt;a href='https://geoservices.ign.fr/services-geoplateforme-diffusion' target='_blank'>&lt;img src='img/basemap/geoservices.png'>&lt;/a>" style="normal" matrixset="PM" maxzoom="22"/>
<baselayer type="WMS" id="osm" label="OpenStreetMap" title="Plan OSM Géobretagne" thumbgallery="img/basemap/osm.png"
url="https://tile.geobretagne.fr/osm/service" layers="osm:grey" format="image/png" visible="true"
attribution="GéoBretagne. Données : les contributeurs d'&lt;a href='https://www.openstreetmap.org/' target='_blank'>OpenStreetMap &lt;/a>, &lt;a href='https://www.openstreetmap.org/copyright' target='_blank'>ODbL &lt;/a>" />
</baselayers>
<proxy url=""/>
<olscompletion url="https://data.geopf.fr/geocodage/search" type="search" attribution="La recherche d'adresse est un service de l'IGN via les données de la BAN"/>
<!-- <olscompletion url="https://data.geopf.fr/geocodage/completion" type="completion" attribution="Service d'autocomplétion de l'IGN"/> -->

<searchparameters bbox="false" localities="true" features="false" />

<themes>
<theme name="Population" collapsed="false" id="habitant" icon="fas fa-users">
<layer id="rp_struct_pop_geom" name="Densité de population (hab/km²)" visible="false" tiled="false"
searchable="false" queryable="true"
attributefilter="true" attributefield="level" attributevalues="Commune,EPCI,Pays" attributelabel="Échelle" attributestylesync="true" attributefilterenabled="true"
infopanel="bottom-panel"
infoformat="application/vnd.ogc.gml" featurecount="5"
timefilter="true" timeinterval="year" timecontrol="slider" timemin="1999" timemax="2017" timevalues="1999,2007,2012,2017"
style="rphab_densite@commune"
stylesalias=""
url="https://ows.region-bretagne.fr/geoserver/rb/wms"
attribution="Sources: INSEE (RP) - OpenStreetMap | Traitements: Région Bretagne - Service connaissance, observation, planification et prospective"
metadata="https://geobretagne.fr/datahub/dataset/26324529-e0b7-450c-9506-2dcdca608f5f"
metadata-csw="https://geobretagne.fr/geonetwork/srv/fre/csw?SERVICE=CSW&amp;VERSION=2.0.2&amp;REQUEST=GetRecordById&amp;elementSetName=full&amp;ID=26324529-e0b7-450c-9506-2dcdca608f5f">
<template url="https://kartenn.region-bretagne.fr/kartoviz/apps/region/territoire/templates/territoire.pop.densite.mst"></template>
</layer>
<layer id="rp_struct_pop_geom" name="Part de la population selon la catégorie d'âge (%)" visible="false" tiled="false"
searchable="false" queryable="true"
attributefilter="true" attributefield="level" attributevalues="Commune,EPCI,Pays" attributelabel="Échelle" attributestylesync="true" attributefilterenabled="true"
infopanel="bottom-panel"
infoformat="application/vnd.ogc.gml" featurecount="5"
timefilter="true" timeinterval="year" timecontrol="slider" timemin="1999" timemax="2017" timevalues="1999,2007,2012,2017"
style="rphab_tx0014@commune, rphab_tx1529@commune, rphab_tx3044@commune, rphab_tx4559@commune, rphab_tx6074@commune, rphab_tx75p@commune"
styletitle="Catégories d'âge"
stylesalias="0 - 14 ans, 15 -29 ans, 30 - 44 ans, 45 - 59 ans, 60 -74 ans, 75 ans et plus "
url="https://ows.region-bretagne.fr/geoserver/rb/wms"
attribution="Sources: INSEE (RP) - OpenStreetMap | Traitements: Région Bretagne - Service connaissance, observation, planification et prospective"
metadata="https://geobretagne.fr/datahub/dataset/26324529-e0b7-450c-9506-2dcdca608f5f"
metadata-csw="https://geobretagne.fr/geonetwork/srv/fre/csw?SERVICE=CSW&amp;VERSION=2.0.2&amp;REQUEST=GetRecordById&amp;elementSetName=full&amp;ID=26324529-e0b7-450c-9506-2dcdca608f5f">
<template url="https://kartenn.region-bretagne.fr/kartoviz/apps/region/territoire/templates/territoire.pop.cat_age.mst"></template>
</layer>
</theme>
<theme name="Environnement" collapsed="true" id="environnement" icon="fas fa-leaf">
<layer id="reserve_naturelle_regionale" name="Réserves naturelles régionales" visible="false" tiled="false"
searchable="false" queryable="true" fields="axe" aliases="axe"
infoformat="application/vnd.ogc.gml" featurecount="1"
sld="https://kartenn.region-bretagne.fr/styles/reserve_naturelle.sld"
url="https://ows.region-bretagne.fr/geoserver/rb/wms"
legendurl="https://kartenn.region-bretagne.fr/img/styles/rnr.png"
attribution="Source: Région Bretagne"
metadata="https://geobretagne.fr/datahub/dataset/77f8fc52-ae57-41d1-8f08-7b121b013f51"
metadata-csw="https://geobretagne.fr/geonetwork/srv/eng/csw?SERVICE=CSW&amp;VERSION=2.0.2&amp;REQUEST=GetRecordById&amp;elementSetName=full&amp;ID=77f8fc52-ae57-41d1-8f08-7b121b013f51" >
<template url="https://kartenn.region-bretagne.fr/kartoviz/apps/region/global/templates/global.reserve_naturelle_reg.mst"></template>
</layer>
</theme>
<theme name="Éducation" collapsed="true" id="education" icon="fas fa-graduation-cap">
<layer id="lycee" name="Lycées" visible="false" tiled="false"
searchable="false" queryable="true" fields="axe" aliases="axe"
attributefilter="true" attributefield="secteur_li"
attributevalues="Public,Privé sous contrat avec l'éducation nationale" attributelabel="Filtre" attributestylesync="false" attributefilterenabled="false"
infoformat="application/vnd.ogc.gml" featurecount="20"
sld="https://kartenn.region-bretagne.fr/styles/lycee_secteur.sld"
url="https://ows.region-bretagne.fr/geoserver/rb/wms"
attribution="Source: Région Bretagne"
metadata="https://geobretagne.fr/datahub/dataset/99e78163-ce9a-4eee-9ea0-36afc2a53d25"
metadata-csw="https://geobretagne.fr/geonetwork/srv/fre/csw?SERVICE=CSW&amp;VERSION=2.0.2&amp;REQUEST=GetRecordById&amp;elementSetName=full&amp;ID=99e78163-ce9a-4eee-9ea0-36afc2a53d25">
<template url="https://kartenn.region-bretagne.fr/kartoviz/apps/region/global/templates/global.lycee.mst"></template>
</layer>
</theme>
<theme name="Transports" collapsed="true" id="transport" icon="fas fa-bus">
<group name="Transport ferroviaire" id="grp1" >
<layer id="ligne_ferroviaire" name="Lignes ferroviaires" visible="false" tiled="true"
queryable="false"
sld="https://kartenn.region-bretagne.fr/kartoviz/apps/region/transport/ligne_ferroviaire.sld"
style="ligne_ferroviaire"
infoformat="application/vnd.ogc.gml" featurecount="20"
url="https://geobretagne.fr/geoserver/sncf/wms"
attribution="SNCF réseau"
metadata="https://geobretagne.fr/datahub/dataset/b8927600-5b49-11de-b5dc-0000c0a8230c"
metadata-csw="https://geobretagne.fr/geonetwork/srv/eng/csw?SERVICE=CSW&amp;VERSION=2.0.2&amp;REQUEST=GetRecordById&amp;elementSetName=full&amp;ID=b8927600-5b49-11de-b5dc-0000c0a8230c">
</layer>
<layer id="arret_ferroviaire" name="Arrêts ferroviaires régionaux" visible="false" tiled="false"
searchable="true" queryable="true" fields="" aliases=""
infoformat="application/vnd.ogc.gml" featurecount="20"
style="arret_ferroviaire_defaut, arret_ferroviaire_nature"
stylesalias="Par défaut,Nature des arrêts ferroviaires"
legendurl="https://kartenn.region-bretagne.fr/doc/icons_region/gare_ter.svg"
url="https://ows.region-bretagne.fr/geoserver/rb/wms"
attribution="Source: Région Bretagne"
metadata="https://geobretagne.fr/datahub/dataset/4a9d13f7-17be-4a98-9f8f-907cf223072f"
metadata-csw="https://geobretagne.fr/geonetwork/srv/fre/csw?SERVICE=CSW&amp;VERSION=2.0.2&amp;REQUEST=GetRecordById&amp;elementSetName=full&amp;ID=4a9d13f7-17be-4a98-9f8f-907cf223072f" >
<template url="https://kartenn.region-bretagne.fr/kartoviz/apps/region/global/templates/global.arret_ferroviaire.mst"></template>
</layer>
</group>
<group name="Transport maritime" id="grp2" >
<layer id="port" name="Ports" visible="false" tiled="false"
searchable="false" queryable="true" fields="axe" aliases="axe"
infoformat="application/vnd.ogc.gml" featurecount="20"
sld="https://kartenn.region-bretagne.fr/styles/port.sld"
url="https://ows.region-bretagne.fr/geoserver/rb/wms"
legendurl="https://kartenn.region-bretagne.fr/doc/icons_region/port.svg"
attribution="Source: Région Bretagne"
metadata="https://geobretagne.fr/datahub/dataset/c55c4fba-6a37-48ea-8754-a1bf770a684b"
metadata-csw="https://geobretagne.fr/geonetwork/srv/eng/csw?SERVICE=CSW&amp;VERSION=2.0.2&amp;REQUEST=GetRecordById&amp;elementSetName=full&amp;ID=c55c4fba-6a37-48ea-8754-a1bf770a684b" >
<template url="https://kartenn.region-bretagne.fr/kartoviz/apps/region/global/templates/global.port.mst"></template>
</layer>
</group>
</theme>
<theme name="Découpages territoriaux" collapsed="true" id="territoire" icon="fas fa-globe">
<layer id="commune" name="Commune" visible="false" queryable="false"
fields="nom_geo" aliases="Nom"
type="customlayer" style="" opacity="1" legendurl="https://kartenn.region-bretagne.fr/kartoviz/apps/region/territoire/img/commune.png"
url="https://kartenn.region-bretagne.fr/kartoviz/apps/region/territoire/customlayers/commune.js"
tooltip="true" tooltipenabled="true"
attribution="Source: GéoBretagne"
metadata="https://geobretagne.fr/datahub/dataset/b08e6cb1-236c-49b7-88f9-42b500d274d5"
metadata-csw="https://geobretagne.fr/geonetwork/srv/eng/csw?SERVICE=CSW&amp;VERSION=2.0.2&amp;REQUEST=GetRecordById&amp;elementSetName=full&amp;ID=b08e6cb1-236c-49b7-88f9-42b500d274d5"/>
<layer id="epci" name="Intercommunalité" visible="true" queryable="false"
fields="nom_geo" aliases="Nom" toplayer="true"
type="customlayer" style="" opacity="1" legendurl="https://kartenn.region-bretagne.fr/kartoviz/apps/region/territoire/img/epci.png"
url="https://kartenn.region-bretagne.fr/kartoviz/apps/region/territoire/customlayers/epci.js"
tooltip="true" tooltipenabled="true"
attribution="Source: GéoBretagne"
metadata="https://geobretagne.fr/datahub/dataset/2298d744-49cb-4fcb-9487-26f916fecdff"
metadata-csw="https://geobretagne.fr/geonetwork/srv/eng/csw?SERVICE=CSW&amp;VERSION=2.0.2&amp;REQUEST=GetRecordById&amp;elementSetName=full&amp;ID=2298d744-49cb-4fcb-9487-26f916fecdff"/>
</theme>

</themes>
</config>
Empty file removed apps/store/.gitignore
Empty file.
4 changes: 4 additions & 0 deletions apps/store/register.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"total": 0,
"configs": []
}
1 change: 0 additions & 1 deletion conf/README.md

This file was deleted.

Loading
Loading