Index de l'article

Création de zone d'accessibilité en SQL spatial

Nos zones d'accessibilité créées précédemment ont plusieurs problèmes :

  • Pour avoir une accroche correcte de nos zones isodistantes, nous avons dû passer par des zones tampons intermédiaires (long et pénible...)
  • Nos doublons n'ont pas été conservés (#QuidDeLaCannibalisation, impossibilité de sélectionner des zones complètes)
  • D'autres manipulations ont été nécessaires pour ramener les IRIS bordant les voies de communications (#PerteDeTemps, #RisquedErreurs)

Nous pouvons sans doute faire mieux en utilisant les Virtal Layers de QGIS et le SQL spatial à notre disposition : outils Bases de données/Gestionnaire de bases de données/Virtal Layers/QGIS. Le 2nd bouton ouvre un un gestionnaire SQL. Vous pouvez enregistrer vos requêtes et charger des couches géographiques à partir de vos futures sélections.

Pour les besoins de la démonstration, nous procéderons par étapes, mais ces étapes peuvent être cumulées dans une seule requête ou un seul script.

De même pour les besoins de compréhension de la démonstration, et pour analyser visuellement les résultats plus facilement, nous ne travaillerons que sur les données Île-de-France.

1) Requête de sélection attributaire pour ne conserver que les IRIS d'Île-de-France. Cela accélèrera vos traitements. Sélection spatiale ou en SQL par exemple :

Select * from iris where dep in (91,92,93,94,95,75,77,78) ;

Exportez-en un shape sur lequel vous travaillerez. De même pour vos magasins, routes et foies ferrées.

2) Commencez par tester l'accroche d'IRIS par intersection (les IRIS abritant les magasins) :

select iris.INSEE_COM, iris.NOM_COM, iris.CODE_IRIS, iris.NOM_IRIS, iris.dep, iris.geometry
from iris, magasins
WHERE ST_INTERSECTS(iris.geometry,magasins.geometry)

3) Testez la sélection d'un buffer en SQL (autour des magasins, distance de recherche de 5kms) :

select magasins.code_magas, ST_BUFFER(magasins.geometry,5000)
from magasins

4) Intégrez votre buffer directement dans votre intersection, afin d'accrocher vos IRIS autour des magasins (distance de recherche de 5kms).

select iris.INSEE_COM, iris.NOM_COM, iris.CODE_IRIS, iris.NOM_IRIS, iris.dep, mon_tampon.code_magas, iris.geometry
from iris, (select magasins.code_magas, ST_BUFFER(magasins.geometry,5000) as ma_geometry from magasins) as mon_tampon
WHERE ST_INTERSECTS(iris.geometry,mon_tampon.ma_geometry)

Quelques modifications dans votre buffer seront nécessaires, ramenez également le code des magasins.

st intersect buffer

Comparez avec vos 1ères zones isodistantes créés via les zones tampons, et observez une montée en précision. Vérifiez la bonne conservation des doublons.

Exportez-en un shape nommé isodistances_shp .

5). Sélectionnez maintenant vos autoroutes et vos chemins de fer en une seule requête :

select routes.VOCATION, routes.geometry from routes
where routes.VOCATION = 'Type autoroutier'
union select 'Voies ferrées', fer.geometry from fer

Exportez-en un shape nommé voies_distinctes_shp.

6) Sélectionnez maintenant les IRIS routiers (ceux bordant les voies de communications distinguées, un certain temps de traitement est nécessaire, 2 à 4 minutes) :

select idf.INSEE_COM, idf.NOM_COM, idf.CODE_IRIS, idf.NOM_IRIS, idf.dep, idf.geometry
from idf, voies_distinctes_shp
WHERE ST_INTERSECTS(idf.geometry,voies_distinctes_shp.geometry)

Exportez-en un shape nommé iris_routiers_shp.

7) Évincez maintenant les IRIS communs entre les zones isodistantes et les IRIS routiers, en sélectionnant les IRIS routiers qui ne sont pas communs entre eux.

select iris_routiers_shp.INSEE_COM, iris_routiers_shp.NOM_COM,
iris_routiers_shp.CODE_IRIS, iris_routiers_shp.NOM_IRIS,
iris_routiers_shp.dep,
iris_routiers_shp.geometry
from iris_routiers_shp

where iris_routiers_shp.CODE_IRIS NOT IN
(select isodistances_shp.CODE_IRIS from isodistances_shp) ;

Exportez-en un shape nommé iris_routiers_eviction_shp.

8) Joignez les magasins et les IRIS routiers évincés (distance de recherche 7kms pour commencer).

Nous pourrions certes poursuivre en utilisant une requête de frontères communes entre les zones isodistantes et les IRIS routiers, mais nous devons conserver le code magasins, encore inexistant chez les IRIS routiers. Une jointure est donc nécessaire.

select iris_routiers_eviction_shp.INSEE_COM, iris_routiers_eviction_shp.NOM_COM, iris_routiers_eviction_shp.CODE_IRIS, iris_routiers_eviction_shp.NOM_IRIS, iris_routiers_eviction_shp.dep, mon_tampon.code_magas, iris_routiers_eviction_shp.geometry
from iris_routiers_eviction_shp, (select magasins_idf.code_magas, ST_BUFFER(magasins_idf.geometry,8500) as ma_geometry from magasins_idf) as mon_tampon
WHERE ST_INTERSECTS(iris_routiers_eviction_shp.geometry,mon_tampon.ma_geometry)

Ajustez la distance de recherche visuellement afin d'obtenir un résultat satisfaisant.

Exportez-en un shape nommé iris_routier_eviction_join_shp.

9) Unissez vos zones isodistantes originelles et vos IRIS routiers déjà joints aux magasins.

select iris_routier_eviction_join_shp.INSEE_COM, iris_routier_eviction_join_shp.NOM_COM, iris_routier_eviction_join_shp.CODE_IRIS, iris_routier_eviction_join_shp.NOM_IRIS, iris_routier_eviction_join_shp.dep, iris_routier_eviction_join_shp.code_magas, iris_routier_eviction_join_shp.geometry
from iris_routier_eviction_join_shp

union select isodistances_shp.INSEE_COM, isodistances_shp.NOM_COM, isodistances_shp.CODE_IRIS, isodistances_shp.NOM_IRIS, isodistances_shp.dep, isodistances_shp.code_magas, isodistances_shp.geometry
from isodistances_shp

Exportez-en un shape.

10) Requête de comptage et listage des magasins cannibales par IRIS.

select NOM_IRIS, count(code_magas) as nbre_mag, GROUP_CONCAT(code_magas) as magasins, geometry
from iris_acces_shp
group by CODE_IRIS
having nbre_mag <> 1
order by nbre_mag desc

11) Sélection de zone d'accessibilité individuelle (pour 1 magasin).

Ce dernier type de sélection est très simpliste, mais dans le cadre d'une application web intégrant les zones d'accessibilité, c'est ce type de sélection par exemple, que déclenchera l'application sur une demande utilisateur (un clic en fin de formulaire : l'utilisateur pose un point sur une carte, ou choisit un magasin, puis lance le calcul. Ensuite le programme attrape le magasin le plus proche de ce point, puis affiche la zone d'accessibilité lié à ce magasin).

Liens ou pièces jointes
Accéder à cette adresse URL (/CONTOURS-IRIS_2-1__SHP__FRA_2019-01-01.7z.001)CONTOURS-IRIS_2-1__SHP__FRA_2019-01-01.7z.001[IRIS 2019]0 Ko
Accéder à cette adresse URL (https://hg-map.fr/extern/data/base-ic-activite-residents-2014.zip)base-ic-activite-residents-2014.zip[Activité des résidents 2014]0 Ko
Accéder à cette adresse URL (https://hg-map.fr/extern/data/base-ic-activite-residents-2017.zip)base-ic-activite-residents-2017.zip[Activité des résidents 2017]0 Ko
Accéder à cette adresse URL (https://hg-map.fr/extern/data/base-ic-couples-familles-menages-2014.zip)base-ic-couples-familles-menages-2014.zip[Couples - Familles - Ménages 2014]0 Ko
Accéder à cette adresse URL (https://hg-map.fr/extern/data/base-ic-couples-familles-menages-2017.zip)base-ic-couples-familles-menages-2017.zip[Couples - Familles - Ménages 2017]0 Ko
Accéder à cette adresse URL (https://hg-map.fr/extern/data/shapes/france/chemin_de_fer.zip)chemin_de_fer.zip[chemin_de_fer (les voies férrées de l’IGN, 2011, lignes)]0 Ko
Accéder à cette adresse URL (http://hg-map.fr/extern/data/shapes/country.zip)country.zip[Countries]0 Ko
Accéder à cette adresse URL (https://hg-map.fr/extern/data/equip-serv-commerce-infra-2016.zip)equip-serv-commerce-infra-2016.zip[Nombre d'équipements et de services dans le domaine du commerce 2016]0 Ko
Accéder à cette adresse URL (https://hg-map.fr/extern/data/equip-serv-commerce-infra-2019.zip)equip-serv-commerce-infra-2019.zip[Nombre d'équipements et de services dans le domaine du commerce 2019]0 Ko
Télécharger ce fichier (export_commandes.xlsx)export_commandes[Commandes effectuées]60 Ko
Télécharger ce fichier (export_soft.xlsx)export_soft[Clients]857 Ko
Télécharger ce fichier (mag_telandcom.zip)mag_telandcom.zip[mag_telandcom]22 Ko
Accéder à cette adresse URL (https://hg-map.fr/extern/data/shapes/france/troncons_routes.zip)troncons_routes.zip[troncons_routes (les routes de l’IGN, 2011, lignes)]0 Ko