Bien qu’il soit possible de créer des structures de données programmatiquement en mémoire,
le plus souvent les données sont lues à partir de fichiers ou autres types d’entrepôts.
Il y a plusieurs moyens d’accéder à ces données, mais une façon pratique est d’utiliser
la méthode de commodité DataStores.open(Object)
.
L’argument donné à cette méthode peut être un chemin vers un fichier
(File
, Path
, URL
, URI
),
un flux d’entrée vers un fichier déjà ouvert
(Channel
, DataInput
, InputStream
, Reader
),
une connexion à une base de données (DataSource
, Connection
)
ou d’autres types d’objets spécifiques à la source de données.
La méthode DataStores.open(Object)
se charge de détecter le format de données
et retourne une instance de DataStore
pouvant le lire.
Les fonctionnalités d’un DataStore
dépendent de la nature des données à manipuler
(couvertures de données, ensembles de géométries, séries temporelles, etc.),
mais dans tous les cas il y aura toujours au moins quelques méta-données que l’on peut extraire.
Les méta-données permettent d’identifier les phénomènes ou entités décrits par les données
(température, occupation du sol, etc.),
la région géographique ou la plage temporelle couverte par les données ainsi que leur résolution.
Certains sources suffisamment riches fournissent aussi une estimation de la qualité des données,
des informations permettant de contacter la personne ou l’organisme responsable des données,
les contraintes légales ou techniques à l’utilisation, l’historique des traitements,
les dates prévues des prochaines mises-à-jour, etc.
Les différents formats de données ont souvent leurs propres modèles de méta-données,
mais Apache SIS les traduit tous vers un modèle unique afin de cacher cette hétérogénéité.
Cette approche, consistant à choisir un seul modèle de méta-données comme modèle pivot, est fréquemment utilisée par d’autres bibliothèques aussi.
Par exemple Apache Tika utilise le standard Dublin Core comme modèle pivot,
alors que Java Image I/O définit son propre modèle standard dans le paquet javax.imageio.metadata
.
Pour Apache SIS, le modèle pivot choisi est le standard international de méta-données en information géographique
ISO 19115-1:2014 — principes de base, complété par
ISO 19115-2 — extensions pour l’acquisition et le traitement.
Ce modèle organise les méta-données dans une arborescence où chaque information est accessible via un chemin bien défini,
peu importe l’origine de cette information.
Par exemple si un format de données peut nous fournir les coordonnées géographiques d’une boîte englobant toutes les données,
alors cette information sera toujours accessible (peu importe le format de données) à partir de l’objet Metadata
sous le noeud identificationInfo
, sous-noeud extent
,
sous-noeud geographicElement
.
Exemple: le code suivant lit un fichier de méta-données d’une image Landsat-8 et affiche les limites géographiques qui y sont déclarées:
try (DataStore ds = DataStores.open(new File("LC81230522014071LGN00_MTL.txt"))) {
Metadata md = ds.getMetadata()
;
// Afin de simplifier cet exemple, nous omettons les vérifications de valeurs nulles ou de collections vides.
Identification idInfo = md .getIdentificationInfo()
.iterator().next();
Extent extent = idInfo.getExtents()
.iterator().next();
GeographicExtent bbox = extent.getGeographicElements()
.iterator().next();
System.out.println("La région géographique des données est:");
System.out.println(bbox);
}
Cet exemple produit la sortie suivante (la région est située au Vietnam):
La région géographique des données est: Geographic Bounding Box ├─West bound longitude…………………………… 108°20′10,464″E ├─East bound longitude…………………………… 110°26′39,66″E ├─South bound latitude…………………………… 10°29′59,604″N └─North bound latitude…………………………… 12°37′25,716″N
Le code Java dans cet exemple extrait des éléments de méta-données par des appels à des méthodes Java telles que getExtents()
,
mais les chapitres suivants introduiront d’autres façons utilisant des identifiants sous forme de chaînes de caractères.
Ces approches alternatives sont plus pratiques lorsque l’on ne connaît pas au moment de la compilation quelles méthodes appeler.
La norme ISO 19115 définit des centaines d’éléments.
Certains de ces éléments seront introduits progressivement dans les chapitres suivants.
Mais afin de donner une petite idée de ce qui est disponible, le tableau suivant en liste quelques uns.
La plupart des noeuds acceptent un nombre arbitraire de valeurs.
Par exemple il peut y avoir plusieurs zones géographiques décrites sous le noeud extent
.
Élément | Description |
---|---|
Metadata | Méta-données à propos d’un jeu de données, d’un service ou autres ressources. |
├─Reference system info | Description du système de référence spatial et temporel utilisé dans le jeu de données. |
├─Identification info | Information de base à propos de la ressource décrite par les méta-données. |
│ ├─Citation | Nom selon lequel la ressource est connue, ainsi que des dates de références, la forme de présentation, etc. |
│ │ └─Cited responsible party | Rôle, nom, contact et position des individus ou organisations qui sont responsables de la ressource. |
│ ├─Topic category | Principaux thèmes de la ressource (agriculture, climatologie, environnement, économie, santé, transport, etc.). |
│ ├─Descriptive keywords | Mots-clés, leurs types, et référence vers la source les définissant. |
│ ├─Spatial resolution | Facteur (échelle, taille de pixel) donnant une idée globale de la densité spatiale des données de la ressource. |
│ ├─Temporal resolution | La plus petite période temporelle pouvant être résolue dans la ressource. |
│ ├─Extent | Étendue spatiale et temporelle de la ressource. |
│ ├─Resource format | Description du format de la ressource. |
│ ├─Resource maintenance | Information sur la fréquence des mises-à-jours de la ressources, ainsi que la portée de ces mises-à-jours. |
│ └─Resource constraints | Information sur les contraintes légales ou de sécurités qui s’appliquent à la ressource. |
├─Content info | Information sur le catalogue d’entités ainsi que les caractéristiques des couvertures de données ou images. |
│ ├─Imaging condition | Conditions qui affectent les images (image floue, brouillard, semi-obscurité, etc.). |
│ ├─Cloud cover percentage | Proportion des données masquées par les nuages, comme pourcentage de l’étendue spatiale. |
│ └─Attribute group | Information sur les groupes d’attributs de la ressource. |
│ ├─Content type | Types d’information représentée par les valeurs (classification thématique, mesures physiques, etc.). |
│ └─Attribute | Information sur un attribut d’une ressource. |
│ ├─Sequence identifier | Nom ou numéro unique qui identifie l’attribut dans une couverture de données. |
│ ├─Peak response | Longueur d’onde à laquelle la réponse du capteur est maximale. |
│ ├─Min/max value | Valeur minimale/maximale des données pour chaque dimension d’échantillonage inclue dans la ressource. |
│ ├─Units | Unités de mesures pour chaque dimension d’échantillonage inclue dans la ressource. |
│ └─Transfer function type | Type de fonction de transfert utilisée pour convertir un élément en valeur physique. |
├─Distribution info | Information sur les distributeurs et les façons d’obtenir la ressource. |
│ ├─Distribution format | Description des formats dans lesquels les données peuvent être distribuées. |
│ └─Transfer options | Moyens techniques et médias par lesquels une ressource peut être obtenue à partir de son distributeur. |
├─Data quality info | Évaluation globale de la qualité de la ressource. |
├─Acquisition information | Information sur l’acquisition des données. |
│ ├─Environmental conditions | Conditions environnementales dans lesquels les données ont été acquises. |
│ └─Platform | Information générale sur la plate-forme à partir de laquelle les données ont été acquises. |
│ └─Instrument | Instruments montées sur la plate-forme. |
└─Resource lineage | Information sur la provenance, les sources et/ou les étapes de production de la ressource. |
├─Source | Information sur les données sources utilisées pour créer les données décrites par les méta-données. |
└─Process step | Historique des événements survenues dans la productions des données. |