Leçon n°2: Agréger des polygones

Transcription

Leçon n°2: Agréger des polygones
Démarrer avec SAS/GIS®...
Devenir gourou « es cartographie » en trois leçons...
Leçon n°2: Agréger des polygones
Pierre LORENZETTI – Département Support Clients - SAS Institute France
Copyright (c) 1999 SAS Institute Inc. Cary, NC, USA. All rights reserved.
1
Démarrer avec SAS/GIS®...
Devenir gourou « es cartographie » en trois leçons...
2
Après avoir brillamment réussi à créer la carte de France par département, une question arrive dans la foulée : « Comment
diable regrouper ces départements ? ».
Il est en effet fort à parier que les indicateurs mis en place dans votre société s’articulent sur des notions de régions
commerciales précises, de zones d’activité ou de zones d’achalandage particulières s’affranchissant des limites
départementales, communales au sens administratif du terme.
L’objectif de ce cours est de vous permettre d’opérer ce genre de regroupement en expliquant au mieux la logique du
regroupement. Cette logique aura bien entendu comme toile de fond la carte déjà construite au cours de la première leçon.
A défaut d’un découpage particulier, nous prendrons pour modèle tout simplement la carte de France par région
administrative .
Si vous faites partie de la génération des petits français ayant appris par cœ ur le numéro des départements, des chefs lieux
et des cantons, le regroupement des départements français dans leur région administrative respective ne vous posera pas
de soucis.
Pour les autres, je propose de se servir des éléments fournis en standard avec le module SAS/GRAPH®.
La table FRANCE2 contient en effet la variable REGION contenant le libellé en clair de la région administrative.
•
Créer une table SAS contenant pour chaque département (variable CODE) la région administrative de rattachement
(variable REGION) avec la procédure SQL, comme indiqué ci-dessous :
Proc SQL ;
Create Table Regions As
Select (Put(country,3.) !! Put(id,z3.)) As CODE, REGION
From MAPS.FRANCE2;
Quit;
Notons au passage que l’auteur passe sous silence la question épineuse de Monaco, pour éviter tout incident diplomatique
avec cet état souverain. Il part du principe que Monaco ne fait pas partie du territoire national.
Pierre LORENZETTI – Département Support Clients - SAS Institute France
Copyright (c) 1999 SAS Institute Inc. Cary, NC, USA. All rights reserved.
Démarrer avec SAS/GIS®...
Devenir gourou « es cartographie » en trois leçons...
3
Les composites
Pour la plupart des opérations mettant en œ uvre les données spatiales, SAS/GIS® travaille sur un composite plutôt que
directement sur les variables contenues dans la base des données spatiales*.
Un composite est en fait :
• une association de variables qui identifie clairement la(les) variable(s) dans la base des données spatiales qui
composent cette association. Cette association peut être constituée par une simple variable, un couple de variables
traduisant une association bilatérale (droite - gauche) ou bien encore deux couples de variables définissant une
association directionnelle bilatérale ( de - à ).
• un attribut de classe indiquant le rôle de l’association des variables mises en relation dans la base des données
spatiales.
Exemple :
Imaginons (au hasard) que la table des chaînes possède les variables CODER et CODEL identifiant les cotés gauches et droits
de chaînes, il est possible de créer un composite qui traduise la relation bilatérale entre ces deux variables. Ainsi, en
définissant un attribut de classe ayant comme valeur AREA, nous indiquerions que ce composite définit une couche
surfacique (un polygone).
La définition de ces variables composites est enregistrée dans une entrée de catalogue de type GISSPA.
Les variables composites sont créées et modifiées à l’aide de la procédure GIS.
* données spatiales : tables des nœ uds, tables des chaînes et des points de détail
Pierre LORENZETTI – Département Support Clients - SAS Institute France
Copyright (c) 1999 SAS Institute Inc. Cary, NC, USA. All rights reserved.
Démarrer avec SAS/GIS®...
Devenir gourou « es cartographie » en trois leçons...
4
La procédure GIS et la gestion des composites
L’instruction COMPOSITE
Cette instruction permet de définir, de modifier ou détruire les associations entre les variables dans la table des chaînes, des
nœ uds et des points de détail.
COMPOSITE ACTION nom de la variable composite / ARGUMENTS ;
CREATE
DELETE
REPLACE
UPDATE
BILATERAL
CLASS
VAR
L’argument CLASS= permet de définir l’attribut de classe. Sa valeur par défaut est CLASS=CLASSIFICATION.
L’argument CLASS peut prendre les valeurs suivantes :
ADDRESS
AREA CITY | PLACE
CLASSIFICATION
DIRECTION_PREFIX
DIRECTION_SUFFIX
ZIPCODE
NAME
PLUS4
TYPE
X
Y
Nous limiterons l’objet de notre intérêt à la valeur particulière AREA car elle désigne tout simplement les objets de type
surfacique sur une carte.
Pierre LORENZETTI – Département Support Clients - SAS Institute France
Copyright (c) 1999 SAS Institute Inc. Cary, NC, USA. All rights reserved.
Démarrer avec SAS/GIS®...
Devenir gourou « es cartographie » en trois leçons...
5
L’argument VAR= permet de définir une relation entre des variables de la base courante des données spatiales ou bien de
définir le rôle particulier joué par une variable dans la base des données spatiales.
Le fait de spécifier l’argument CLASS=AREA induit obligatoirement l’utilisation d’une forme bilatérale pour l’argument VAR=
dans le but d’identifier les polygones à droite et à gauche de chaque chaîne constituant un polygone :
VAR=(<LEFT=>variable, <RIGHT=>variable)
Il est à noter que l’argument VAR= est nécessaire seulement lorsque les actions CREATE ou REPLACE sont utilisées, à
l’exception des cas suivants :
•
Omission de l’argument VAR= et spécification de l’argument CLASS=CLASSIFICATION (ou omission
pure et simple de ce dernier argument). Le nom du composite est également utilisé en tant que nom
de variable.
Les instructions suivantes sont donc complètement équivalentes :
composite create MonComposite;
composite create MonComposite / var=MonComposite class=classification;
•
Omission de l’argument VAR= et spécification d’un argument CLASS pour une association bilatérale comme par
exemple AREA , les suffixes L et R sont alors ajoutés au nom du composite pour former le nom de la paire de variables
définie dans l’association.
Les instructions suivantes sont donc complètement équivalentes :
composite create MonComposite */ class=AREA;
composite create MonComposite / class=AREA var=(MonCompositel MonCompositer);
*MonComposite dans la version 6 du Système SAS doit être défini sur 8 caractères, cette valeur est utilisée
ici par soucis de lisibilité du code.
Pierre LORENZETTI – Département Support Clients - SAS Institute France
Copyright (c) 1999 SAS Institute Inc. Cary, NC, USA. All rights reserved.
Démarrer avec SAS/GIS®...
Devenir gourou « es cartographie » en trois leçons...
6
La notion de composite se retrouve également au niveau de la définition d’autres entités SAS/GIS®.
Index polygonal et composite
L’index polygonal décrit les couches surfaciques présentes sur les cartes. Il permet de reconstruire les différents polygones à
partir des chaînes élémentaires les constituant.
Par conséquent la base des données spatiales doit maintenir une table d’index polygonal par couche surfacique représentée
sur la carte.
Cet index polygonal est enregistré dans une table qui contient une observation pour chaque contour de tout polygone
correctement fermé lors du processus de création de la carte.
L’index polygonal est donc un index pointant sur la table des chaînes. Sa définition est enregistrée dans une entrée de
catalogue de type GISSPA.
POLYGONAL INDEX ACTION nom de l’index polygonal /ARGUMENTS;
CREATE
DELETE
REPLACE
UPDATE
COMPOSITE
ERRORS
KEEP
OUT
Pour la création, la mise à jour de l’index, autrement dit pour les actions CREATE,REPLACE ou UPDATE, l’argument
COMPOSITE=(composite-1 <, ..., composite-n >) représente le composite ou la liste des composites permettant de définir
les limites des polygones fermés.
En cas de composite simple, les parenthèses peuvent être omises.
Une erreur se produit si les composites ne sont pas définis dans l’entrée de catalogue GISSPA en cours, ou bien si l’un
d’entre eux ne possède pas l’attribut de classe AREA.
Pierre LORENZETTI – Département Support Clients - SAS Institute France
Copyright (c) 1999 SAS Institute Inc. Cary, NC, USA. All rights reserved.
Démarrer avec SAS/GIS®...
Devenir gourou « es cartographie » en trois leçons...
7
Couche (layer) et composite
Une couche est définie par une entrée de catalogue de type GISLAYER qui contient toutes les informations à son propos.
Une couche représente des éléments ayant un ensemble de caractéristiques communes sur la carte.
Une carte est en fait la superposition de différentes couches comme l’illustre le schéma ci dessous :
Les couches sont gérées par la procédure GIS à l’aide de l’instruction LAYER grâce à laquelle il est possible :
•
d’obtenir des informations sur le contenu d’une entrée de catalogue de type GISLAYER.
•
de créer une nouvelle entrée de catalogue, de remplacer une entrée de catalogue déjà existante ou bien encore de
changer les caractéristiques graphiques d’une couche préalablement définie.
•
de détruire une entrée de catalogue de type GISLAYER.
LAYER ACTION nom du layer /ARGUMENTS;
CREATE
DELETE
REPLACE
UPDATE
COMPOSITE
DESCRIPTION
WHERE
STATIC/THEMATIC
MAP
TYPE
…
L’argument COMPOSITE= est en fait une alternative à l ‘utilisation d’une clause WHERE lors de la définition de la couche. Par
ailleurs il est important de noter que l’argument WHERE= ou l’argument COMPOSITE= est nécessaire pour créer ou
remplacer une couche.
Pour des couches de type surfacique, l’argument COMPOSITE= est impératif.
Cela signifie par exemple qu’en spécifiant COMPOSITE=CODE dans une instruction LAYER ( cela suppose bien entendu
qu’un composite appelé CODE a été défini auparavant ). Une clause WHERE implicite pour cette couche est faite, à savoir
WHERE= « CODEL NE CODER ».
Pierre LORENZETTI – Département Support Clients - SAS Institute France
Copyright (c) 1999 SAS Institute Inc. Cary, NC, USA. All rights reserved.
Démarrer avec SAS/GIS®...
Devenir gourou « es cartographie » en trois leçons...
8
Examinons de plus près le code que SAS/GIS® a généré lors de l’importation (c’est le code du fichier de l’ETAPE III de la
première leçon).
proc GIS c=WORK.SASGRAP;
spatial CREATE FRANCE / chains=WORK.FRANCEC nodes=WORK.FRANCEN details=WORK.FRANCED
CARTESIAN mult=1;
•polygonal index CREATE CODE / out=WORK.FRACODE composite=(CODE);
Œcomposite CREATE CODE / var=( CODEL CODER ) class=AREA;
run;
Žlayer CREATE CODE / COMPOSITE=CODE type=AREA
;
run;
map CREATE FRANCE / des="Initial map of FRANCE" coverage=FRANCE layers+=( CODE ) details
CARTESIAN mult=10000000;
run;
Explication de texte
Cette syntaxe nous indique que le composite CODE est en fait la mise en relation des variables CODER et CODEL
(instructionŒ), ces deux variables traduisent une relation bilatérale; pour mémoire ces deux variables sont présentes dans la
table des chaînes.
Le composite CODE est repris pour créer un index polygonal , l’index polygonal sera enregistré dans la table SAS nommée
FRACODE(instruction•).
Le layer CODE est un layer de type surfacique, n’oublions pas qu’il s’agit des départements français représentés sous la
forme de polygones fermés, nous notons l’instruction COMPOSITE en argument (instruction Ž).
Ce que nous devons faire
Ce qu’il nous reste à faire à partir de maintenant, c’est de créer un nouveau composite.
Ce composite doit traduire une relation bilatérale entre deux variables identifiant les limites des régions administratives.
Ce composite nous permettra de créer un index polygonal et de fait nous autorisera la création d’une couche de type
surfacique pour représenter les régions administratives.
Pierre LORENZETTI – Département Support Clients - SAS Institute France
Copyright (c) 1999 SAS Institute Inc. Cary, NC, USA. All rights reserved.
9
Démarrer avec SAS/GIS®...
Devenir gourou « es cartographie » en trois leçons...
La construction du composite repose sur l’ajout de deux variables dans la table des chaînes. Elles doivent décrire les côtés
droit et gauche de chaque chaîne constituant le polygone d’une région administrative.
Appelons ces deux variables RegionR et RegionL.
La table créée au début de cette leçon est utile pour la création de ces deux variables.
En effectuant une jointure sur les variables CODER dans un premier temps et CODEL dans un second temps, nous allons
créer RegionR et RegionL dans la table des chaînes FRANCEC.
FRANCEC
ROW
………
CODER
CODEL
REGIONS
REGION
CODE
FRANCEC
ROW
………
CODER
CODEL
REGIONR
REGIONL
Cela peut se mettre tout simplement en forme de la manière suivante avec par exemple une procédure SQL :
/* Jointure à droite sur la variable CODER*/
proc sql;
create table francec(drop=REGION Code) as
select *, b.REGION as RegionR from
francec a left join Regions b
on a.coder=b.code;
quit;
/* Jointure à gauche sur CODEL*/
proc sql;
create table francec(drop=REGION Code) as
select *, b.REGION as RegionL from
francec a left join Regions b
on a.codel=b.code
order by row;
quit;
Pierre LORENZETTI – Département Support Clients - SAS Institute France
Copyright (c) 1999 SAS Institute Inc. Cary, NC, USA. All rights reserved.
Démarrer avec SAS/GIS®...
Devenir gourou « es cartographie » en trois leçons...
10
Il nous reste plus qu’à utiliser la procédure GIS pour mettre en œ uvre les points mentionnés quelques lignes auparavant :
Œ Création d’un index composite RADMIN mettant en relation les variables REGIONL et REGIONR
• Création d’un index polygonal à partir de ce composite
Ž Rajout d’une couche REGION de type surfacique reposant sur ce nouveau composite
•
Intégration de cette nouvelle couche sur la carte de France
Le code ci dessous reprend ces étapes. Ce code est celui mentionné en page 8 de ce document :
proc GIS c=WORK.SASGraph;
spatial CREATE FRANCE / chains=WORK.FRANCEC nodes=WORK.FRANCEN details=WORK.FRANCED
CARTESIAN mult=1;
run;
coverage CREATE FRANCE / des="" where="1" spatial=FRANCE;
run;
composite CREATE CODE / var=( CODEL CODER ) class=AREA;
run;
polygonal index CREATE CODE / out=WORK.FRACODE composite=(CODE);
run;
layer CREATE CODE / COMPOSITE=CODE type=AREA;
run;
Œcomposite CREATE RADMIN / var=(left=RegionL right=RegionR) class=AREA;
run;
•polygonal index CREATE RADMIN / out=WORK.FRARADM composite=(RADMIN) ;
run;
Žlayer CREATE REGIONS / COMPOSITE=RADMIN type=AREA;
run;
• map CREATE FRANCE / des="Carte de FRANCE" coverage=FRANCE layers+=( CODE REGIONS) details
CARTESIAN mult=10000000;
run;
quit;
Pierre LORENZETTI – Département Support Clients - SAS Institute France
Copyright (c) 1999 SAS Institute Inc. Cary, NC, USA. All rights reserved.
Démarrer avec SAS/GIS®...
Devenir gourou « es cartographie » en trois leçons...
Le résultat est à la hauteur de nos attentes, une fois la carte visualisée dans SAS/GIS®.
Pierre LORENZETTI – Département Support Clients - SAS Institute France
Copyright (c) 1999 SAS Institute Inc. Cary, NC, USA. All rights reserved.
11