Isochrones et isodistances sur QGIS

isochrone3

Les isochrones permettent de représenter les secteurs où il est possible de se rendre en un temps donné : les endroits à moins de 30 min d’un hôpital, à 5 minutes de chez vous, etc. Lorsqu’on s’intéresse à la distance à parcourir plutôt qu’au temps, on parle alors d’isodistance.

Il existe des services gratuits sur le web permettant de calculer et de télécharger des isochrones sur la base du réseau routier OpenStreetMap, je vous conseille notamment OpenRouteService. Si les services permettent de personnaliser le mode de transport, il est impossible d’utiliser le service pour faire des simulations d’ajout/suppression de tronçons de route.

Il est possible de calculer les isochrones sur QGIS. La plupart des tutoriels proposent une approche basée sur pgrouting/PostGIS ou SpatiaLite’s Routing. Ces méthodes fonctionnent et sont plutôt performantes, mais elles ont l’inconvénient d’être assez lourdes à mettre en place et à paramétrer (base de données, intégration du réseau, etc.). Il existe toutefois un outil intégré nativement à QGIS permettant de réaliser ceci rapidement : l’algorithme GRASS v.net.iso.

Note : sur Linux, il faut installer le paquet qgis-plugin-grass pour pouvoir utiliser les algorithmes GRASS.

 

Télécharger les données

Téléchargez le réseau routier de la région de votre choix au format Shapefile sur Geofabrik.de et sauvegardez dans un nouveau fichier l’emprise vous concernant à l’aide de l’outil sélection de QGIS. L’idéal pour les calculs de coût est de choisir un système de coordonnées métrique (par exemple le Lambert 93 [EPSG : 2154]).

Préparer le réseau

Je m’intéresse surtout aux déplacements à pied ou à vélo, je considère donc que le temps de déplacement n’est pas affecté par le type de route empruntée. Je ne me préoccupe donc pas d’affecter un coût particulier aux tronçons de route (celui-ci sera uniquement dépendant de leur longueur). En revanche je supprime de mon réseau les autoroutes et voies rapides (motorway et trunk).

Avant de pouvoir calculer les isochrones, il faut préparer notre réseau : il est impératif de découper chaque tronçon au niveau des intersections. Nous utiliserons pour cela l’outil v.clean. Celui-ci se trouve dans la boite à outils de traitements (ctrl+Alt+T). Lancez simplement l’algorithme, indiquez la couche contenant le réseau routier et choisissez l’outil « break ».

Note : La topologie est respectée sur les données OSM. Si ce n’est pas le cas sur vos données, il faut en premier lieu utiliser l’outil « snap » de v.clean.

Calculer les isochrones

vnetiso

Placer un point sur votre lieu de départ. Puis lancez l’outil v.net.iso. Choisissez bien votre réseau routier « nettoyé » et la couche contenant votre point de départ. Il faut ensuite indiquer les pas de vos isodistances. Il s’agit en fait des différentes catégories de distance (de coût). Comme nous n’avons rien spécifié concernant le coût des tronçons, celui-ci est par défaut la longueur du tronçon (en mètre car nous somme dans un système métrique).

Pour un piéton, la vitesse de marche moyenne considérée ici est de 1,25m/s (4,5km/h). Pour avoir les isodistances à 5, 10 et 20 minutes il faut donc indiquer 375, 750 et 1500 (soient les distances parcourues en 5, 10 et 20 minutes). Pour un vélo, en supposant une vitesse moyenne de 4,5m/s (16km/h), les valeurs à entrer seraient donc 1350, 2700 et 5400.

Une fois le calcul terminé, vous récupérez une nouvelle couche de réseau routier : attribuez une couleur en fonction de la colonne « cat » et voilà !

isochrone1

 

Il est facile de modifier le réseau routier pour visualiser l’impact d’aménagements ou de déviations.

Aller plus loin

Pour les isochrones concernant les déplacements en voiture, le calcule nécessite l’application d’un coût variable en fonction de la vitesse maximale sur les routes (et bien sûr de supprimer les rues piétonnes, escaliers, sentiers, etc.). Il est possible de différencier les coûts dans un sens ou dans l’autre, afin de prendre en compte les routes à sens unique (avec donc un coût forward et un coût backward).

Indiquer plusieurs points de départs peut permettre de visualiser la proximité de services (commerces, urgences, etc.).

L’ajout d’une enveloppe convexe (MCP) autour de chaque classe de temps permet de mieux visualiser les tronçons où l’accessibilité peut être améliorée.

isochrone3

Publicités

4 réflexions sur « Isochrones et isodistances sur QGIS »

  1. Bonjour,

    Merci pour ce guide qui pourrait largement me servir. En faisant un essai rapide au hasard, je n’arrive pas à visualiser le résultat. La commande v.net.iso se lance, mais aucune couche de résultat n’est créée… Avez vous déjà rencontré ce problème?

    Cordialement

    J'aime

    1. Bonjour,
      C’est étrange en effet. Le point (center) est-il bien accroché à un nœud du réseau routier (outils accrichage de QGIS) ? Les systèmes de coordonnées sont les mêmes ? Normalement la couche de résultat contient une colonne « cat » qui permet de différencier les classes de coût.

      J'aime

      1. Oui les SCR sont les mêmes, le point est bien sur un nœud avec l’accrochage activé.
        Je n’ai pas de message d’erreur à la fin de la requête mais pas de couche de créé non plus.

        J’ai voulu du coup essayer d’utiliser cet outil sur la version 2.99 (QGIS3 en développement) installé via Homebrew mais l’algorithme v.net.iso est absent

        J'aime

      2. Pour info voilà les données du journal:

        Traitement de l’algorithme 1/1…
        Algorithm v.net.iso – Splits network by cost isolines. starting…
        g.proj -c proj4= »+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs »
        v.in.ogr min_area=0.0001 snap=-1 input= »/Users/arthur/Downloads » layer=Réseau routier output=tmp1516720389029 –overwrite -o
        v.in.ogr min_area=0.0001 snap=-1 input= »/Users/arthur/Downloads » layer=Depart output=tmp15167203890210 –overwrite -o
        g.region n=6519560.77083 s=6192397.02036 e=578658.942662 w=310247.58508 res=100
        v.net -s input=tmp1516720389029 points=tmp15167203890210 out=tmp15167203890211 op=connect threshold=50
        v.db.connect -o map=tmp15167203890211 table=tmp15167203890210 layer=2
        v.net.iso input= »tmp15167203890211″ arc_type=line center_cats= »1-100000″ costs= »1000,2000,3000″ output=outputd9ab84c827fb4f8f965f5d3a6ec5b287 –overwrite
        v.out.ogr -s -e input=outputd9ab84c827fb4f8f965f5d3a6ec5b287 type=auto output= »/Users/arthur/Downloads » format=ESRI_Shapefile output_layer=Testetetetetet1000,2000,3000 –overwrite
        WARNING: Default locale settings are missing. GRASS running with C locale.
        Starting GRASS GIS…
        Executing ‘/Users/arthur/.qgis2//processing/grass7_batch_job.sh’ …
        Default region was updated to the new projection, but if you have multiple mapsets `g.region -d` should be run in each to update the region from the default
        Projection information updated

        Description:
        Imports vector data into a GRASS vector map using OGR library.

        Keywords:
        vector, import, OGR

        Usage:
        v.in.ogr [-flc2tojrewi] input=string [layer=string[,string,…]]
        [output=name] [spatial=xmin,ymin,xmax,ymax[,xmin,ymin,xmax,ymax,…]]
        [where=sql_query] [min_area=value] [type=string[,string,…]]
        [snap=value] [location=name] [columns=name[,name,…]]
        [encoding=string] [key=string] [geometry=name] [–overwrite] [–help]
        [–verbose] [–quiet] [–ui]

        Flags:
        -f List supported OGR formats and exit
        -l List available OGR layers in data source and exit
        -c Do not clean polygons (not recommended)
        -2 Force 2D output even if input is 3D
        Useful if input is 3D but all z coordinates are identical
        -t Do not create attribute table
        -o Override dataset projection (use location’s projection)
        -j Perform projection check only and exit
        -r Limit import to the current region
        -e Extend region extents based on new dataset
        Also updates the default region if in the PERMANENT mapset
        -w Change column names to lowercase characters
        -i Create the location specified by the « location » parameter and exit. Do not import the vector data.
        –o Allow output files to overwrite existing files
        –h Print usage summary
        –v Verbose module output
        –q Quiet module output
        –ui Force launching GUI dialog

        Parameters:
        input OGR datasource name
        Examples:
        ESRI Shapefile: directory containing shapefiles
        MapInfo File: directory containing mapinfo files
        layer OGR layer name. If not given, all available layers are imported
        Examples:
        ESRI Shapefile: shapefile name
        MapInfo File: mapinfo file name
        output Name for output vector map
        spatial Import subregion only
        Format: xmin,ymin,xmax,ymax – usually W,S,E,N
        where WHERE conditions of SQL statement without ‘where’ keyword
        Example: income = 10000
        min_area Minimum size of area to be imported (square meters)
        Smaller areas and islands are ignored. Should be greater than snap^2
        default: 0.0001
        type Optionally change default input type
        options: point,line,boundary,centroid
        default:
        point: import area centroids as points
        line: import area boundaries as lines
        boundary: import lines as area boundaries
        centroid: import points as centroids
        snap Snapping threshold for boundaries (map units)
        ‘-1’ for no snap
        default: -1
        location Name for new location to create
        columns List of column names to be used instead of original names, first is used for category column
        encoding Encoding value for attribute data
        Overrides encoding interpretation, useful when importing ESRI Shapefile
        key Name of column used for categories
        If not given, categories are generated as unique values and stored in ‘cat’ column
        geometry Name of geometry column
        If not given, all geometry columns from the input are used

        ERROR: Sorry is not a valid option
        ERROR 4: Unable to open /Users/arthur/Downloads/aquitaine-latest-free.shx or /Users/arthur/Downloads/aquitaine-latest-free.SHX.Try –config SHAPE_RESTORE_SHX true to restore or create it
        ERROR 4: Failed to open file /Users/arthur/Downloads/aquitaine-latest-free.shp.
        It may be corrupt or read-only file accessed in update mode.

        WARNING: Datum not recognised by GRASS and no parameters found
        Over-riding projection check
        Check if OGR layer contains polygons…
        0..100
        Importing 1 features (OGR layer )…
        0..100
        —————————————————–
        Building topology for vector map …
        Registering primitives…

        One primitive registered
        One vertex registered
        Building areas…
        0..100
        0 areas built
        0 isles built
        Attaching islands…
        Attaching centroids…
        100
        Number of nodes: 0
        Number of primitives: 1
        Number of points: 1
        Number of lines: 0
        Number of boundaries: 0
        Number of centroids: 0
        Number of areas: 0
        Number of isles: 0
        ERROR: Vector map not found
        ERROR: Vector map not found in current mapset
        ERROR: Vector map not found
        ERROR: Vector map not found
        Execution of ‘/Users/arthur/.qgis2//processing/grass7_batch_job.sh’ finished.
        Cleaning up temporary files…
        WARNING: Default locale settings are missing. GRASS running with C locale.
        Starting GRASS GIS…
        Executing ‘/Users/arthur/.qgis2//processing/grass7_batch_job.sh’ …
        ERROR: Vector map not found
        Execution of ‘/Users/arthur/.qgis2//processing/grass7_batch_job.sh’ finished.
        Cleaning up temporary files…
        Converting outputs
        Charger les couches de résultat
        L’algorithme v.net.iso – Splits network by cost isolines. a été correctement exécuté…

        J'aime

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

w

Connexion à %s