Territoires, utilisation du plugin

L’objectif du plugin est de fournir un nouvel objet éditorial couvrant l’ensemble des zones géographiques du continent à la subdivision minimale d’un pays. De fait, ce plugin pourrait à terme remplacer les plugins Pays, Continents, COG et Géographie en fournissant un objet unique et servir de pivot à d’autres plugins de géographie comme GIS, Contours ou Cartes Choroplèthes.

Présentation

L’objectif du plugin est de fournir un nouvel objet éditorial couvrant l’ensemble des zones géographiques du continent à la subdivision minimale d’un pays.

Le plugin fournit, les élément standard d’un objet éditorial « territoire », comme son interface privée (édition, liste, configuration) et une interface de peuplement des données à partir de l’API REST du plugin Nomenclatures. Il propose également un mécanisme d’extension des données attachées à chaque territoire.

Installation

Le plugin s’installe comme n’importe quel plugin SPIP. Il nécessite uniquement le plugin Saisies pour formulaires.

Concepts

Les types de territoire

De façon à retrouver quelque peu la logique actuelle des objets géographiques et de coller à la standardisation, les objets « territoire » sont classés en quatre groupes ou types, à savoir :

  • Les zones, qui délimitent des zones supranationales par des regroupements de pays en continents, sous-continents et autres régions conformément à la norme UN M49. Le type est zone.
  • les pays, que l’on peut considérer comme le type pivot des territoires et dont la liste est issue de la norme ISO 3166-1. Le type associé aux pays est country ;
  • les subdivisions d’un pays, qui en organisent, conformément à la norme ISO 3166-2, la structure administrative à l’instar des länder en Allemagne ou des régions et départements en France. Le type associé est subdivision.
  • les infra-subdivisions d’un pays, qui raffinent les subdivisions standard mais ne font pas partie de la norme ISO 3166-2. Elles possèdent une identification spécifique qui varie d’un pays à un autre. C’est le cas, par exemple, des arrondissements, cantons et communes de France dont l’identifiant est le code INSEE ou des comtés américains identifiés par le code FIPS. Le type associé est infrasubdivision.

Le choix de scinder les subdivisions peut paraitre arbitraire mais il est dicté par le fait de distinguer les identifications internationales des identifications nationales.

Les catégories de territoire

La norme ISO 3166-2 attribue un code à chaque subdivision administrative d’un pays et identifie la catégorie de la subdivision : le land en Allemagne, la région, le département, la collectivité territoriale en France, le canton en Suisse, etc. Cette typologie est essentielle pour comprendre l’organisation administrative des pays.

Le plugin Territoires étend cette notion de catégorie aux autres types de territoire pour distinguer les continents des autres régions du monde (sous-continents par exemple), les pays des zones assimilées (non utilisé pour l’instant) et les infra-subdivisions entre elles.

L’identification des territoires

Codification primaire

Comme tout objet éditorial, un territoire possède un id unique. Néanmoins, il est nécessaire d’utiliser un identifiant unique et stable pour désigner chaque territoire. Le plugin utilise pour cela les normes en vigueur et propose un champ « iso_territoire » qui contient l’identifiant unique choisi :

  • Le code UN M49 à trois caractères numériques pour les zones du monde (extension du code numérique 3166-1 des pays) ;
  • Le code ISO 3166-1 alpha2 pour les pays ;
  • Le code ISO 3166-2 pour les subdivisions composé du code alpha2 du pays, un tiret et d’un code à trois caractères alphanumériques ;
  • Un code spécifique national pour les infra-subdivisions précédé par le code ISO 3166-1 alpha2 du pays (même principe que la norme ISO 3166-2).

L’hétérogénéité de cet identifiant n’est pas un problème car seule son unicité est importante.

Codifications alternatives

Si le plugin a fait un choix d’identifiant, il n’en reste pas moins que la plupart des territoires possèdent d’autres identifiants standardisés soit au niveau mondial soit au niveau national.
Par exemple, le pays possède 2 autres codes au sens de la norme ISO 3166-1, à savoir, le code alpha3 et le code numérique à trois chiffres.

Pour les subdivisions, leur caractère national fait qu’il existe en parallèle des codes nationaux comme celui de l’INSEE (COG) ou des codes communautaires comme les NUTS de l’union européenne.

Étant donné que ces codifications alternatives sont nombreuses et variées, elles ne sont pas intégrées à l’objet lui-même mais sont accessibles au travers d’une table complémentaire nommée spip_territoires_extras si l’utilisateur le souhaite.

La hiérarchisation des territoires

Parenté directe

Au sein de chaque type, l’organisation des territoires est hiérarchique (sauf pour les pays bien entendu). L’ensemble des objets territoire tout type confondu forme aussi une hiérarchie de l’objet « monde » à la plus petite subdivision ou infra-subdivision d’un pays.

Raccourcis d’appartenance

Pour simplifier certaines requêtes et aussi conserver un mode d’interrogation existant dans les plugins de géographie actuels, la parenté directe est enrichie de liens d’appartenance qui redondent l’information de parenté mais évitent de parcourir toute l’arborescence.

Chaque objet territoire, si cela a un sens, possède donc un lien direct avec son pays d’appartenance ou son continent d’appartenance. Cela est particulièrement utile aux subdivisions ou infra-subdivisions liées à un pays et aux pays liés à un continent.

La description des territoires

Les normes ISO 3166 ou UN M49 fournissent à la fois un code d’identification unique du territoire mais aussi un nom normalisé. Ce nom est intégré à l’objet territoire dans le champ « iso_titre ».

Néanmoins, ce nom n’est pas utilisé comme titre de l’objet (au sens SPIP). Pour cela on utilise le nom d’usage qui parfois coïncide avec le nom de la norme mais parfois pas. C’est souvent le cas en français ou le nom normalisé possède souvent l’article entre parenthèses, article que l’on préfère souvent omettre dans les usages. Ainsi, l’objet territoire possède un champ « nom_usage » qui fait office de titre de l’objet. Les noms sont toujours des chaines multi-langues autorisant toutes les traductions supportées par SPIP.

Il est possible pour chaque objet territoire de saisir un descriptif qui pourra être affiché ensuite en regard de l’objet. Ce texte explicatif est le seul champ modifiable manuellement. Il est stocké comme une chaine multi-langues dans le champ « descriptif » de l’objet territoire.

Comme tout objet éditorial le territoire peut être agrémenté d’un logo entièrement géré par l’API SPIP correspondante.

Par défaut, l’objet territoire ne propose aucune caractéristique géographique comme la population, la densité, les contours géographiques, etc. Par contre, comme pour les codes alternatifs, le plugin propose une gestion agnostique des caractéristiques via la table de liens spip_territoires_extras.

L’interface utilisateur

L’interface utilisateur fournit par le plugin Territoires ne concerne que l’espace privé. Elle permet, au travers de plusieurs pages d’assurer les fonctions d’édition, de consultation, de peuplement et de configuration. Pour simplifier la navigation, ces pages sont accessibles par un menu de navigation unique.

Page liste des territoires

La page territoires affiche, comme tous les objets SPIP, la liste des territoires. Par défaut, tous les territoires sont listés et l’onglet « Tous » est activé. L’utilisateur a la possibilité d’afficher la liste des territoires pour un type donné via les onglets Zones, Pays, Subdivisions et Infra-subdivisions.

Il est aussi possible d’identifier la liste des territoires édités via un filtre de second niveau.

Liste des territoires

Page peuplement des territoires

La page peupler_territoires affiche, le formulaire de chargement ou de vidage d’un ensemble de territoires. Le formulaire #FORMULAIRE_PEUPLER_TERRITOIRES propose de choisir l’action (charger ou vider), les types de territoire à charger sachant que les subdivisions ou infra-subdivisions sont proposées par pays afin d’éviter de charger trop de données en une fois.

Enfin, le formulaire propose des options de chargement pour ajouter les caractéristiques additionnelles ou les codes alternatifs.

Formulaire de peuplement

Page configuration du plugin

La configuration du plugin proprement dite se limite au choix des types d’objet pouvant se lier à un ou plusieurs territoires (page configurer_territoires).

Configuration

Page d’un objet territoire

La page territoire affiche la fiche objet de chaque territoire. Comme tous les objets SPIP elle est composée d’une zone centrale dans laquelle est affichée le titre, le descriptif du territoire et la hiérarchie des territoires ascendants si elle existe. Si des données additionnelles existent et ont été chargées pour le territoire choisi, elles sont affichées dans un tableau nommé « Caractéristiques » via le pipeline affiche_milieu.

Dans le prolongement de la fiche centrale le plugin affiche la liste des territoires enfants (si ils existent) via le pipeline affiche_enfants et le squelette prive/objets/contenu/territoire-enfants.html.

La boite d’information visualise outre l’id du territoire, son identifiant normalisé (champ « iso_territoire »), son type et sa catégorie. Elle est suivie par le bloc logo.

Enfin, via le pipeline affiche_gauche, le plugin affiche les codes alternatifs du territoire.

Fiche objet d’un territoire

Plugins connexes

Le plugin Territoires tire l’ensemble de ses données du plugin Nomenclatures (préfixe isocode) qui offre une API REST pour un certain nombre de données normalisées de type géographique ou linguistique. Pour ajouter des territoires non encore disponibles dans le plugin il faut en fait les rendre disponibles dans le plugin Nomenclatures. De fait, ces territoires seront automatiquement détectés par le plugin Territoires et proposés au chargement.

Le plugin Territoires sert aussi de base au plugin Contours qui propose d’ajouter des contours GeoJSON au territoires. Le plugin Territoires accueille ainsi le formulaire de chargement de Contours dans sa page de peuplement, le contour lui-même étant affiché dans la fiche objet du territoire comme un objet GIS. Les contours sont aussi mis à disposition au travers de l’API REST de Nomenclatures.

Évolutions à prévoir pour le plugin

  • Mise en place du nom d’usage de façon systématique (à faire dans le plugin Nomenclatures)
  • Ajout des traductions des noms d’usage voire des titres normalisés (à faire dans le plugin Nomenclatures)
  • Ajouter des ensembles de subdivisions provenant de la norme ISO 3166 et des infra-subdivisions.
  • Permettre de consulter la liste des catégories disponibles pour un type donné
  • Ajouter un filtre pour afficher une données complémentaire d’un territoire.

Pour aller plus loin avec la compréhension du plugin, un guide de conception en PDF est fourni avec le code.

Discussion

One discussion

  • 7

    Merci pour ce plugin très utile, mais je rencontre un problème dans le chargement (peuplement) des données d’infra-subdivisions pour la France (je n’ai pas testé pour d’autres pays) :
    -  le chargement des infras-subdivisions prend un certain temps et termine sur une page blanche (timeout ?).
    -  Si je vérifie dans le base, j’ai un nombre non négligeable d’infra-subdivisions, mais il semble qu’il en manque beaucoup.
    -  Si je relance la procédure de peuplement, même page blanche après quelques secondes d’attente et les données déjà présentes en base sont doublées.
    -  Si je tente de vider les données d’infra-subdivsions le formulaire affiche “Aucun vidage n’est nécessaire pour les infra-subdivisions du ou des pays « FR ».”
    christophe

    • Bonjour,

      Oui c’est un problème car l’import est synchrone, donc il faut que le traitement ne dure pas plus qu’une limite définie dans php.ini. Il faut augmenter la variable max_execution_time à 300 ou 400 (secondes). Ca devrait aller mieux.

      Après si cela dure il faudra que j’envisage un job asynchrone.

    • En effet, la variable était à 30. A 300, ça marche.
      Merci.

    • Chouette.

      Une petite question, comment as-tu fait pour vider les éléments partiellement rechargés afin de relancer un peuplement complet ?

    • Je faisais des tests avec un site quasi vide, du coup, j’ai simplement désinstallé le plugin pour supprimer toutes les données (puis réinstallation, etc, etc.). Il y avait d’autres possibilités ?

    • Il y a plein d’hébergements où on n’a pas la main sur changer le timeout. Du coup pour que ce soit vraiment utilisable à grande échelle (et que ça puisse vraiment un jour remplacer Pays, Géographie, etc), il me semble qu’il va forcément falloir de l’asynchrone, ou autre méthode.

    • Oui surement.

      Après dire que c’est pas utilisable ça me parait exagéré suivant le type de territoires dont on parle. Les pays par exemple ça ne pose jamais de problème. Les problèmes peuvent arriver uniquement avec les subdivisions à plusieurs milliers d’objets.

      Sinon, tu ferais comment pour passer en asynchrone ?

    • Je dirais que la méthode la plus simple (en réinventant le moins de chose), ce serait de lancer un ou plusieurs jobs, et dans ceux-ci contrôler où ça en est et continuer l’import tant que ce n’est pas fini.

    Reply to this message

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite / PostgreSQL
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparait.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom