Peaks in Mercantour National Park

Data acquisition

  • Get the administrative boundaries and major rivers (see here)

  • Get the peaks inside the Mercantour National Park

from cartes.osm import Overpass

riviera = Overpass.request(
    area={"name": "Alpes-Maritimes", "as_": "a"},
    rel=[
        dict(area="a"),  # the administrative region
        dict(waterway="river", area="a")  # the rivers
    ],
).simplify(5e2)


mercantour = Overpass.request(
    area=dict(
        boundary="protected_area",
        name=dict(regex="Mercantour"),
        as_="a",
    ),
    # The area
    rel=dict(area="a"),
    # The peaks
    node=dict(natural="peak", area="a"),
)

Data visualisation

import altair as alt

alt.layer(
    # The administrative region
    alt.Chart(riviera.query('boundary=="administrative"'))
    .mark_geoshape(fill="lightgray"),
    # The rivers
    alt.Chart(
        riviera.query('waterway=="river"').length()
        # at least 20k long, and remove one going to a different drainage basin
        .query("length > 20_000 and id_ != 7203495")
    )
    .mark_geoshape(filled=False)
    .encode(alt.Tooltip("name:N")),
    # The National park (simplified)
    alt.Chart(
        mercantour.query('boundary == "protected_area"').simplify(5e2)
    ).mark_geoshape(
        fill="darkseagreen",
        opacity=0.5,
        stroke="darkseagreen",
        strokeWidth=1.5,
    ),
    # The peaks
    alt.Chart(mercantour.query('natural == "peak"'))
    .encode(
        alt.Latitude("latitude:Q"), alt.Longitude("longitude:Q"),
        alt.Tooltip("name:N"),
        alt.Color(
            "ele:Q", title="Altitude (m)",
            scale=alt.Scale(scheme="darkmulti", domain=(1000, 3000), type="log"),
        ),
    )
    .mark_point(size=50, shape="triangle-up"),
).properties(
    width=400, height=400, title="Sommets du Massif du Mercantour"
).configure_title(
    font="Fira Sans", fontSize=16, anchor="start"
)