Création de zones d'accessibilité en SQL spatial
En guise d'introduction à la création de vraies zones isochrones (un peu de patience !), nous pouvons nous amuser à créer des zones dites d'accessibilité, soit des zones dans lesquelles l'accès à un point donnée est facilité.
Et pour pimenter le tout, au lieu d'utiliser les classiques plugins QGIS, nous allons faire tous les géo-traitements en SQL spatial. L'intérêt est d'être capable de routiniser nos besoins et de ré-utiliser/optimiser nos process. Un autre intérêt, non des moindre, est que le code SQL produit sera standard et valable sur MySQL ou Postgres par exemple.
Allez dans l'onglet Bases de données / Gestionnaire / Couches virtuelles / Couches du projet. Une fois la liste de ce dernier menu déroulé, cliquez sur l'outil Fenêtre SQL, puis :
-- SÉLECTION ÎLE-DE-FRANCE -- PUIS EXPORT EN SHAPE (IRIS_IDF) ET CRÉATION D'UN INDEX SPATIAL SELECT * FROM IRIS WHERE dep IN (91,92,93,94,95,75,77,78) ;
-- SÉLECTION DES IRIS D'IDF INTERSECTANT UN BUFFER 5KMS AUTOUR DES MAGASINS -- PUIS EXPORT EN SHAPE (IRIS_BUFFER) ET CRÉATION D'UN INDEX SPATIAL SELECT DISTINCT IRIS_IDF.CODE_IRIS, IRIS_IDF.geometry FROM IRIS_IDF, ( SELECT Telandcom.code_magas, ST_BUFFER(Telandcom.geometry,5000) AS ma_geometry FROM Telandcom ) AS monBuffer WHERE ST_INTERSECTS(IRIS_IDF.geometry, monBuffer.ma_geometry) ;
-- INTERSECTION ROUTES ET VOIES FERRÉES AVEC ST_UNION SUR IRIS_IDF -- EXPORT EN SHAPE (RoutesEtFer) ET CRÉATION D'UN INDEX SPATIAL SELECT VOCATION, ST_INTERSECTION(monUnion.geometry, unionIrisIdf.geometry) AS geometry FROM ( SELECT TRONCON_ROUTE.VOCATION, TRONCON_ROUTE.geometry FROM TRONCON_ROUTE WHERE TRONCON_ROUTE.VOCATION = 'Type autoroutier' UNION SELECT 'Voies ferrées', TRONCON_VOIE_FERREE.geometry FROM TRONCON_VOIE_FERREE ) AS monUnion, ( SELECT ST_UNION(geometry) AS geometry FROM IRIS_IDF ) AS unionIrisIdf WHERE ST_INTERSECTS(monUnion.geometry, unionIrisIdf.geometry) = 1 ;
-- SÉLECTION DES IRIS_IDF INTERSECTANT RoutesEtFer -- PUIS EXPORT EN SHAPE (IRIS_ACCES) ET CRÉATION D'UN INDEX SPATIAL SELECT DISTINCT IRIS_IDF.CODE_IRIS, IRIS_IDF.geometry FROM IRIS_IDF, RoutesEtFer WHERE ST_INTERSECTS(IRIS_IDF.geometry, RoutesEtFer.geometry) ;
-- ÉVICTION DES IRIS_ACCES DANS IRIS_BUFFER -- SIMPLE TEST POUR L'INSTANT SELECT CODE_IRIS, geometry FROM IRIS_ACCES WHERE CODE_IRIS NOT IN (SELECT CODE_IRIS FROM IRIS_BUFFER) ;
-- UNION IRIS_BUFFER AVEC LES IRIS_ACCES ÉVINCÉS SELECT CODE_IRIS, geometry FROM IRIS_BUFFER UNION SELECT CODE_IRIS, geometry FROM IRIS_ACCES WHERE CODE_IRIS NOT IN (SELECT CODE_IRIS FROM IRIS_BUFFER) ;
Bien, maintenant passons à la création de vraies zones isochrones, et même à leur optimisation avec Python, rendez-vous ici !