Création de zones d'accessibilité
10/01/2021 : Un exercice plus pertinent et plus moderne se trouve ICI.
Nous allons créer des zones d’accessibilité d’environ 7kms autour de chaque magasin (zones isodistantes + IRIS accélérants).
L’objectif est d’obtenir une couche de ces zones, contenant des polygones IRIS liés aux magasins, certains de ces IRIS pouvant être en double dans le cas des magasins rapprochés.
Des requêtes spatiales ne suffisent donc pas, il faut passer par des jointures spatiales, afn de conserver les doublons et de ramener l’identifiant des magasins dans les IRIS concernés.
Ce type de couche précalculée, illisible en soi puisque les zones se superposeront, pourra ensuite être insérée dans un programme ou une application web, et afficher la zone de chaque magasin sur simple sélection.
De même pour les cartes où les zones d’accessibilité de chaque magasin pourront provenir de la même couche.
1) Ouverture des 5 shapes originaux. Uniquement les autoroutes des routes (ajouter un filtre d'entités sur la couche, via le champ VOCATION, regardez les valeurs uniques avant).
2) Création des zones isodistantes (shape nommé isodistances) via une capture des IRIS de 6 kms autour des magasins.
Vous pouvez tester les différents prédicats géométriques de l'outil Vecteur/Gestion des données/Joindre par localisation. Mais passez ensuite par une zone tampon de 6kms, afin de vérifier votre accroche.
Observez que la création de zone tampon ramène également les informations attributaires de magasins, une jointure spatiale a donc été faîte dans la foulée.
Vérifications :
- Zoomez sur certaines zones pour vérifier la bonne accroche.
- Sélectionnez un IRIS de la couche créée qui est proche de plusieurs magasins, et regardez dans la table attributaire si les doublons ont été conservés ou pas, vérifiez également que le champ code_magasin est bien présent.
Mais les isodistances ne tiennent pas compte des voies de communication. Nous allons artificiellement les prendre en compte, en ajoutant les IRIS intersectant les voies de communication et les zones isodistantes existantes. Cela va passer par un peu de bricolage et de jonglage avec les données géographiques.
3) Créer un shape nommé voies_communication fusionnant les autoroutes et les chemins de fer (Outil Union).
4) Sélection puis création d’un calque nommé iris_selection contenant tous les IRIS bordant les voies de communication (distance de recherche de 500 mètres).
5) Suppression des IRIS en commun avec les zones isodistantes.
6) Jointure spatiale du calque créé avec les magasins : distance de recherche de 8 kms pour accrocher les IRIS, dans un shape nommé ajout.
Surveillez et au besoin supprimer les champs, afin d’avoir une structure similaire au shape isodistances.
7) Fusionnez les shapes ajout et isodistances dans un shape nommé accessibilites (Outil Fusion de vecteurs, pour cumuler les champs correctement).
9) Joignez votre indicateur de clientèle potentielle à vos zones d'accessibilité et faites quelques thématiques.
10) Critiquez la méthode.
20/01/2019 : la couche Contours...Iris® semble avoir des erreurs de géométrie, et pas d'index spatial. Cela ralentit les traitements, corrigez cela :
- Validation des géométries.
- Évictions ou fusion des géométries invalides.
- Ajout d'un index spatial.
Toutefois la couche des 49 000 IRIS reste lourde. L'index spatial stabilise les traitements, théoriquement, mais n'accélère pas forcément leur vitesse :
- J'ai mis 18 minutes à intersecter les 12 592 IRIS compris dans une zone tampon de 5kms autours des 241 magasins, en une seule requête avec le gestionnaire de base de données de QGIS 3.4.3, sur un ordinateur peu performant.
- La même requête sur la même machine a duré 23 minutes sur PgAdmin3/Postgres 9.4.
Vous pouvez allez plus loin en simplifiant les géométries, avec une distance de Douglas-Peucker de 200 mètres par exemple. Vous allez perdre en précision mais gagner un peu de temps de traitement :
- 15 minutes et 50 secondes, la même requête sur la même machine, avec le gestionnaire de base de données de QGIS 3.4.3.
- 22 minutes et 66 secondes, la même requête sur la même machine, avec PgAdmin3/Postgres 9.4.
Il existe d'autres manière d'optimiser des couches sous QGIS (à ce lien par exemple). On peut sans doute aller plus loin en supprimant des champs de la couche IRIS, en testant d'autres types d'index...Mais finalement pour les besoins de l'exercice, mieux vaut travailler avec la précision originelle mais uniquement sur les IRIS, magasins et autres couches impliquées dans la zone francilienne par exemple (ou dans votre région préférée) :
- 27 secondes, la même requête sur la même machine, avec le gestionnaire de base de données de QGIS 3.4.3, uniquement sur les entités franciliennes.
- 27 secondes également, la même requête sur la même machine, avec PgAdmin3/Postgres 9.4, uniquement sur les entités franciliennes.