lundi 14 mars 2016

ArcGIS: Créer un index des voies pour un atlas communal

On travaille actuellement à créer une base de données du réseau routier de Tahiti. Les communes de Tahiti sont des partenaires importants, avec lesquels on valide les tracés des voies et leurs noms. En retour, nous fournissons des shapefiles du réseau et un atlas en pdf de la voirie pour chaque commune.

Exemple de carte de l'atlas d'une commune


Pour fixer les choses, la base de données de travail du réseau routier est au format géodatabase fichier ESRI. On travaille avec ArcGIS 10.x et le module NetworkAnalyst pour les analyses les plus poussés. Les atlas des voies sont réalisés avec les outils des "pages dynamiques" d'ArcGIS. Pour que l'atlas présente bien, on réalise aussi une page de couverture. On a voulu aussi ajouter un index des voies: une liste alphabétique des voies avec les carreaux dans lesquels elles figurent. Ce dernier point a présenté une certaine difficulté. ArcGIS ne propose pas d'outil permettant de créer directement une telle table. On a pensé pouvoir le réaliser sous Excel à partir d'un export des voies croisées avec les carreaux. Mais ce n'est pas si simple qu'on le pensait!
La colonne index donne la liste des cartes de chaque voie 

Pour faciliter la production de l'index, j'ai réalisé un script python pour construire cette table. Bien sûr, le script est ensuite intégré dans une boîte à outils dédiée, pour plus de facilité. L'idée est de partir de la classe d'entités des segments des voies (ou des itinéraires), de la classe d'entités des index des cartes (les carreaux numérotés des emprise des cartes) et de construire une table à deux attributs:
  • l'identifiant des voies
  • la liste concaténée des cartes où figure la voie
On fera ensuite des jointures sur d'autres tables puis on retravaillera le résultat dans Excel pour un rendu de qualité. Au passage, on a essayé d'utiliser l'outil de rapport fourni avec ArcGIS, mais il est beaucoup moins souple d'Excel.

L'algorithme du script Python repose sur une boucle de parcours de toutes les voies. toutes les voies qui ont un nom ou un numéro doivent figurer dans l'index. Les voies sans nom n'y figurent pas. On sélectionne tous les segments d'une voie et on fait une intersection par emplacement avec la couche des index de cartes (les carreaux numérotés des emprises). On concatène la liste des numéros des cartes dans un seul attribut (appelé "index"...).

L'attribut itinéraire correspond au identifiant des voies.
Les valeurs mini et maxi permettent de limiter les rues à faire figurer dans l'index (ceux d'une même commune).
L'attribut de carroyage est celui des noms (ou numéros) des cartes.
Les deux derniers paramètres sont là pour créer la table d'index.
Le script Python de cet outils peut être téléchargé ici: AtlasIndex.py