# 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)