Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
ressource:code:cartographie:start [2021/06/01 01:53]
emoc [Ressources]
ressource:code:cartographie:start [2021/08/23 14:03] (Version actuelle)
gweltaz [Étape 2 : les données]
Ligne 20: Ligne 20:
 **Installation de Static Map** **Installation de Static Map**
   pip3 install staticmap   pip3 install staticmap
-  pip3 show staticmap # permet de savoir quelle version installée+  pip3 show staticmap # permet de savoir quelle version ​est installée
  
 **Premier script** **Premier script**
-<​code>​+<​code ​python>
 # test avec https://​github.com/​komoot/​staticmap # test avec https://​github.com/​komoot/​staticmap
 # Python 3.5.3 / pip 9.0.1 / staticmap 0.5.5 # Python 3.5.3 / pip 9.0.1 / staticmap 0.5.5
Ligne 64: Ligne 64:
  
 Pour le fond de carte : Pour le fond de carte :
-<​code>​+<​code ​python>
 # test avec https://​github.com/​komoot/​staticmap # test avec https://​github.com/​komoot/​staticmap
 # Python 3.5.3 / pip 9.0.1 / staticmap 0.5.5 # Python 3.5.3 / pip 9.0.1 / staticmap 0.5.5
Ligne 83: Ligne 83:
 </​code>​ </​code>​
 Le jeu de tuile est toner-lite de Stamen (voir http://​maps.stamen.com/​ ) \\ Le jeu de tuile est toner-lite de Stamen (voir http://​maps.stamen.com/​ ) \\
-Pour une raison qui m'​échappe,​ le niveau de zoom n'est pas celui que j'​avais trouvé avec OSM ? \\+Pour une raison qui m'​échappe,​ le niveau de zoom n'est pas celui que j'​avais trouvé avec OSM ? (nb : j'ai compris plus tard, la carte est adaptée aux éléments représentés,​ donc le niveau de zoom est pondéré par l'​espace nécessaires aux différents éléments.)\\
  
 Ce qui donne (extrait seulement, le fichier complet fait 4.8 MO)  Ce qui donne (extrait seulement, le fichier complet fait 4.8 MO) 
Ligne 91: Ligne 91:
 ==== Étape 2 : les données ==== ==== Étape 2 : les données ====
  
-Une carte de test : https://​umap.openstreetmap.fr/​fr/​map/​quimper_test_data_620279 ([[http://​umap.openstreetmap.fr/​fr/​map/​anonymous-edit/​620279:​Hdo3LsEkxk_WKaNxROu4hLXWPZ4|edit]] / Les données sont exportées en [[https://​en.wikipedia.org/​wiki/​GeoJSON|geojson]]+Une carte de test : https://​umap.openstreetmap.fr/​fr/​map/​quimper_test_data_620279 ([[http://​umap.openstreetmap.fr/​fr/​map/​anonymous-edit/​620279:​Hdo3LsEkxk_WKaNxROu4hLXWPZ4|edit]]/ Les données sont exportées en [[https://​en.wikipedia.org/​wiki/​GeoJSON|geojson]] ​depuis l'​onglet «partager/​exporter» de umap.
  
 Les marqueurs sont numérotés,​ ils devront être reliés comme suit : (1,2), (2,3), (3,4), (4,5), (5,6), (6,7) mais par la suite ça devra fonctionner avec n'​importe quelle paire de nombre. Les marqueurs sont numérotés,​ ils devront être reliés comme suit : (1,2), (2,3), (3,4), (4,5), (5,6), (6,7) mais par la suite ça devra fonctionner avec n'​importe quelle paire de nombre.
Ligne 101: Ligne 101:
  
 Les données sont extraites du fichier geojson et placées dans un dictionnaire Les données sont extraites du fichier geojson et placées dans un dictionnaire
-<​code>​+<​code ​python>
 # Lecture de données geojson # Lecture de données geojson
 # Python 3.5.3 / pip 9.0.1 / geojson 2.5.0 # Python 3.5.3 / pip 9.0.1 / geojson 2.5.0
Ligne 122: Ligne 122:
 **Chemins**\\ **Chemins**\\
 Les chemins qui relient les points sont indiqués dans une liste de liste  Les chemins qui relient les points sont indiqués dans une liste de liste 
-<​code>​+<​code ​python>
 chemins =   [ chemins =   [
                 [1, 2],                 [1, 2],
Ligne 144: Ligne 144:
   * tracer les couleurs pour les points et les chemins   * tracer les couleurs pour les points et les chemins
  
-Résultat : ça fonctionne (maintenant il restera à l'​appliquer aux données réelles!)+Résultat : ça fonctionne (maintenant il restera à l'​appliquer aux données réelles!), extrait : 
  
 {{:​ressource:​code:​cartographie:​fond_de_carte_quimper_extrait_avec_chemin.png?​direct&​600|}} {{:​ressource:​code:​cartographie:​fond_de_carte_quimper_extrait_avec_chemin.png?​direct&​600|}}
Ligne 153: Ligne 153:
 <panel title="​fond_de_carte_quimper.py (cliquer pour afficher le code)">​ <panel title="​fond_de_carte_quimper.py (cliquer pour afficher le code)">​
 <code python fond_de_carte_quimper.py>​ <code python fond_de_carte_quimper.py>​
-Lecture ​de données geojson+Plan de circulation d'​après des données geojson
 # Python 3.5.3 / pip 9.0.1 / geojson 2.5.0 / staticmap 0.5.5 # Python 3.5.3 / pip 9.0.1 / geojson 2.5.0 / staticmap 0.5.5
 # Debian 9.5 @ kirin / 20210531 # Debian 9.5 @ kirin / 20210531
Ligne 215: Ligne 215:
 </​panel>​ </​panel>​
 </​accordion>​ </​accordion>​
 +
 +===== Une autre carte =====
 +
 +Cette fois, ce sont des tracés de ligne dans umap qui sont utilisés pour définir une carte de trajets. Les couleurs utilisés dans umap définissent les différents segments des trajets. \\
 +J'ai essayé sans succès de réaliser avec Static Map une carte vide avec les noms de rues pour superposer aux trajets, mais ça ne fonctionne pas, le cadrage de la carte se faisant en fonction des éléments placés (et du niveau de zoom), les deux cartes ne se superposent pas. \\
 +À essayer : tracer cette seconde carte avec des tracés transparents. \\
 +Peut-être que de meilleurs résultats pourraient être obtenus avec py-staticmaps ? \\
 +
 +
 +{{:​ressource:​code:​cartographie:​fond_de_carte_quimper_pedibus_extrait.png?​direct&​600|}}
 +
 +<​accordion>​
 +<panel title="​fond_de_carte_quimper_pedibus.py (cliquer pour afficher le code)">​
 +<code python fond_de_carte_quimper_pedibus.py>​
 +# Plan de pédibus d'​après des données geojson
 +# Python 3.5.3 / pip 9.0.1 / geojson 2.5.0 / staticmap 0.5.5
 +# Debian 9.5 @ kirin / 20210601
 +
 +import geojson
 +from staticmap import StaticMap, CircleMarker,​ Line
 +
 +# définition choisie pour un A4 avec 5mm de marge sur chaque bord
 +m = StaticMap(3390,​ 2362, 0, 0, url_template='​http://​a.tile.stamen.com/​toner-lite/​{z}/​{x}/​{y}.png'​)
 +
 +with open("​./​mobilite_douce_quimper.geojson"​) as f:
 +    data = geojson.load(f)
 +
 +pedibus_corniguel = [] # contiendra les segments du premier trajet
 +pedibus_caphorn = []   # contiendra les segments du second trajet
 +
 +# Trier les trajets selon la couleur choisie dans umap
 +for feature in data['​features'​]:​
 +    if feature['​geometry'​]['​type'​] == "​LineString":​
 +        color = feature['​properties'​]['​_umap_options'​]['​color'​]
 +        coordinates = feature['​geometry'​]['​coordinates'​]
 +        if color == "​Red":​
 +            pedibus_caphorn.append(coordinates)
 +        if color == "​MediumVioletRed":​
 +            pedibus_corniguel.append(coordinates)
 +
 +# Debug
 +print("​pedibus_corniguel",​ pedibus_corniguel,​ "​\n"​)
 +print("​pedibus_caphorn",​ pedibus_caphorn,​ "​\n"​)
 +
 +# Dans un premier temps, tracer les contours
 +for trajet in pedibus_corniguel:​
 +    ltraj = len(trajet)
 +    for x in range(0, ltraj-1):
 +        #​print(trajet[x][0],​ trajet[x][1],​ "​->",​ trajet[x+1][0],​ trajet[x+1][1])
 +        point1 = [ trajet[x][0],​ trajet[x][1] ]
 +        point2 = [ trajet[x+1][0],​ trajet[x+1][1] ]
 +        coordinates = [point1, point2]
 +        line_outline = Line(coordinates,​ '​white',​ 24)
 +        m.add_line(line_outline)
 +
 +for trajet in pedibus_caphorn:​
 +    ltraj = len(trajet)
 +    for x in range(0, ltraj-1):
 +        #​print(trajet[x][0],​ trajet[x][1],​ "​->",​ trajet[x+1][0],​ trajet[x+1][1])
 +        point1 = [ trajet[x][0],​ trajet[x][1] ]
 +        point2 = [ trajet[x+1][0],​ trajet[x+1][1] ]
 +        coordinates = [point1, point2]
 +        line_outline = Line(coordinates,​ '​white',​ 24)
 +        m.add_line(line_outline)
 +
 +# Dans un second temps, trajet les chemins
 +for trajet in pedibus_corniguel:​
 +    ltraj = len(trajet)
 +    for x in range(0, ltraj-1):
 +        #​print(trajet[x][0],​ trajet[x][1],​ "​->",​ trajet[x+1][0],​ trajet[x+1][1])
 +        point1 = [ trajet[x][0],​ trajet[x][1] ]
 +        point2 = [ trajet[x+1][0],​ trajet[x+1][1] ]
 +        coordinates = [point1, point2]
 +        line = Line(coordinates,​ '#​e77214',​ 12)
 +        m.add_line(line)
 +
 +for trajet in pedibus_caphorn:​
 +    ltraj = len(trajet)
 +    for x in range(0, ltraj-1):
 +        #​print(trajet[x][0],​ trajet[x][1],​ "​->",​ trajet[x+1][0],​ trajet[x+1][1])
 +        point1 = [ trajet[x][0],​ trajet[x][1] ]
 +        point2 = [ trajet[x+1][0],​ trajet[x+1][1] ]
 +        coordinates = [point1, point2]
 +        line_outline = Line(coordinates,​ '#​62c92b',​ 12)
 +        m.add_line(line_outline)
 +
 +image = m.render(zoom=16)
 +image.save('​fond_de_carte_quimper_pedibus.png'​)
 +
 +# Et une autre couche avec uniquement les noms de rues à superposer
 +# malheureusement ça ne marche pas, la carte est cadrée différemment...
 +"""​
 +carte_rues = StaticMap(3390,​ 2362, 0, 0, url_template='​http://​a.tile.stamen.com/​toner-labels/​{z}/​{x}/​{y}.png'​)
 +marker = CircleMarker((-4.118553,​ 47.985771), '#​0036FF',​ 1)
 +carte_rues.add_marker(marker) # nécessaire,​ on ne peut pas faire le rendu d'une carte vide
 +image_rues = carte_rues.render(zoom=16)
 +image_rues.save('​fond_de_carte_quimper_pedibus_labels.png'​)
 +"""​
 +# Une alternative pourrait être de recréer la page avec les trajets
 +# en les mettant en couleur transparente
 +# nb : depuis j'ai testé, ça se superpose à merveille quand on utilise des couleurs transparentes! (en rgba : #00000000)
 +</​code>​
 +</​panel>​
 +</​accordion>​
 +
  
 ===== Ressources ===== ===== Ressources =====
  • ressource/code/cartographie/start.1622505228.txt.gz
  • Dernière modification: 2021/06/01 01:53
  • par emoc