.. _introduction: Partie 1 : Introduction ************************ Qu'est-ce qu'une base de données spatiales ? ============================================ PostGIS est une base de données spatiales. Oracle Spatial et SQL Server 2008 sont aussi des bases de données spatiales. Mais qu'est-ce que cela signifie, qu'est-ce qui différentie un serveur de base de données spatiales d'un non spatiale ? La réponse courte, est ... **Les base de données spatiales permettent les stocage et la manipulation des objets spatiaux comme les autres objets de la base de données.** Ce qui suit présente brièvement l'évolution des base de données spatiales, puis les liens entre les données spatiales et la base de données (types de données, indexes et fonctions). #. **Types de données spatiales** fait référence aux géométries de type point, ligne et polygone; #. L'**indexation spatiale** est utilisée pour améliorer les performance d'exécution des opérations spatiales; #. Les **fonctions spatiales**, au sens :term:`SQL`, sont utilsées pour accéder à des propriétées ou des relations spatiales. Conbiné, les types de données spatiales, les indexes et les fonctions fournissent une structure flexible pour optimiser les performance et les analyses. Au commencement ---------------- Dans les premières implémentations :term:`SIG` historiques, toutes les données spatiales étaient stoquées sous la forme de fichiers plats et certaines applications :term:`SIG` spécifiques étaient nécessaires pour interpréter et manipuler les données. Ces outils de gestion de première génération, avaient été conçu pour répondre aux besoins des utilisateurs pour lesquels toute les données étaient localisé au sein de leur agence. C'est outils étaient propriétaire, des système specifiquement créé pour gérer les données spatiales. La seconde génération des systèmes de gestion de données spatiales stoquaient certaines données dans une base de données relationelle (habituellement les "attributs" ou autres parties non spatiales) mais ne founissaient pas encore la fléxibilité offerte par une intégration complète des données spatiales. **Effectivement, les bases de données spatiales sont nés lorsque les gens ont commencé à considérer les objet spatiaux comme les autres objets d'une base de données .** Les bases de données spatiales intègre les données spatiales sous formes d'objets de la base de données relationelle. Le changement opéré passe d'une vision centrée sur le SIG à une vision centrée sur les bases de données. .. image:: ./introduction/beginning.png .. note:: Un système de gestion de base de données peut être utilisée dans d'autre cadre que celui des SIG. Les bases de données spatiales sont utilisées dans divers domaines : l'anatomie humaine, les circuits intégrés de grandes envergures, les structures moléculaires, les champs electomaniétiques et bien d'autre encore. Les types de données spatiales ------------------------------ Une base de données classique propose les types chaînes de caractères et date par exemple. Une base de données spatiales ajoute les types de données (spatiales) pour représenter les **entités géographiques**. Ces types de données spatiales permettre d'accéder à des propriétés de l'entité géographique comme les contours ou la dimension. Pour bien des aspects, les types de données spatiales peuvent être vu simplement comme des formes. .. image:: ./introduction/hierarchy.png :align: center Les types de données spatiales sont organisés par une hierarchie de type. Chaque sous-types hérite de la structure (les atrributs) et du comportement (les méthodes et fonctions) de son type supérieur dans hierarchie. Indexes spatiaux et étendue --------------------------- Une base de données ordinaire fournit des "méthodes d'accès" -- connues sous le nom d'**index** -- pour permettre un accès efficace et non séquentiel à un sous ensemble de données. L'indexation des type non géographique (nombre, chaînes de caractères, dates) est habituellement faite à l'aide des index de type `arbres binaires `__. Un arbre binaire est un partitionnement des données utilisant l'ordre naturel pour stoquer les données hierarchiequement. L'ordre naturel des nombres, des chaînes de caractères et des dates est assez simple à déterminer -- chaque valeur est inférieure, plus grande ou égale à toutes les autres valeurs. Mais, étant donné que les polygones peuvent se chevaucher, peuvent être contenu dans un autre et sont représenté par un tableau en deux dimensions (ou plus), un arbre binaire ne convient pas pour indexer les valeurs. Les vraies bases de données spatiales fournissent un "index spatial" qui répond plutôt à la question : "quel objet se trouve dans une étendue spécifique ?" Une **étendue** correspond au rectangle de plus petite taille capable de contenir un objet géographique. .. image:: ./introduction/boundingbox.png :align: center Les étendues sont utilisées car répondre à la question : "est-ce que A se trouve à 'intérieur de B ? " est une opération couteuse pour les polygones mais rapide dans le cas ou ce sont des rectangles. Même des polgones et des lignes complex peuvent être représenté par une simple étendue. Les index spatiaux doivent réalisé leur ordanencement rapidement afin d'être utile. Donc au lien de fournir des résultats extacts, comme le font les arbres binaires, les index spatiaux fournisse des résultats approximatifs. La question "quelles lignes sont à l'intérieur de ce polygone" sera interprété par un index spatial comme : "quelles lignes ont une étendue qui est contenue dans l'étendue de ce polygone ?" Les incréments spatiaux réels mis en application par de diverses bases de données varient considérablement. Les index spatiaux actuellement utilisés par les différents système de gestion de bases de données varient considérablement. L'implémentation la plus commune est l'`arbre R `_ (utilisé dans PostGIS), mais il existe aussi des implémentations de type `Quadtrees `_, et des `indexes basés sur une grille `_. Les Fonctions spatiales ------------------- Pour manipuler les données lors d'une requête, une base de données classique fournit des **fonctions** comme la concaténation de chaînes de caractères, le cacul de la clef md5 d'une chaîne, la réalisation d'opérations mathématiques sur les nombres ou l'extraction d'informations spécifiques sur une date. Une base de données spatiales fournit un ensemble complet de fonctions pour analyser les composants géographiques, déterminer les relations spatiales et manipuler les objets géographiques. Ces fonctions spatiales servent de pièce de légo pour de noombreux projet SIG. La majorité des fonctions spatiales peuvent être regroupées dans l'une des cinq catégories suivantes : #. **Conversion**: fonctions qui *convertissent* les données géographiques dans un format externe.. #. **Gestion**: fonctions qui permettre de *gérer* les informations relatives aux tables spatiales et l'administration de PostGIS. #. **Récupération**: fonctions qui permettent de *récupérer* les propriété et les mesures d'une géométrie. #. **Comparaison**: fonctions qui permettent de *comprer* deux géométries en respectant leur relations spatiales. #. **Contruction**: fonctions qui permettent de *construire* de nouvelles géométrie à partir d'autre. La liste des fonctions possibles est très vaste, mais un ensemble communs à l'ensemble des implémentation est défini par la spécification term:`OGC` :term:`SFSQL` et sont implémentées (ainsi que certaines supplémentaires) dans PostGIS. Quest-ce que PostGIS ? ====================== PostGIS confère au `système de gestion de base de données PostgreSQL `_ le status de base de données spatiales en ajoutant les trois supports suivants : les types de données spatiales, les indexes et les fonctions. Étant donné que cela est basé sur PostgreSQL, PostGIS bénéficie automatiquement des capacités orienté "entreprise" ainsi que le respect des standards de cette implémentation. Mais qu'est-ce que PostgreSQL ? ------------------------------- PostgreSQL est une puissant système de gestion de données relationel à objets (SGBDRO). Il a été publié sous la licence de style BSD et est donc un logiciel libre. Comme avec beaucoup de logiciels libres, PostgreSQL n'est pas controlé par une société unique mais par une communauté de développeurs et de sociétés qui le développer. PostgreSQL a été conçu depuis le début en conservant à l'esprit qu'il serait potentiellement nécessaire de l'étendre à l'aide d'extensions particulières -- la possibilité d'ajouter de nouveau types, des nouvelles fonctions et des méthodes d'accès à chaud. Grâce à cela, une extension de PostgreSQL peut être développé par une équipe de développement séparé, bien que le lien soit encore très fortement lié au coeur de la base de données PostgreSQL. Pourquoi choisir PostgreSQL ? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Une question que se pose souvent les gens familliés avec les bases de données libres est : "Pourquoi PostGIS n'a pas été basé sur MySQL ?" PostgreSQL a: * prouvé sa fiabilité et respect l'intégrité des données ( propriétés ACID) * un support soigneux des standard SQL (respecte la norme SQL92) * un support pour le développement d'extensions et de nouvelles fonctions * un modèle de développement orienté communauté * pas de limite sur la taille des colonne (les tuples peuvent être "TOAST"és) pour supporter des objets géographiques * un structure d'index générique (GiST) permettant l'indéxation à l'aide d'abres R * facile ajout de fonctions personalisées Tout ceci combiné, PostgreSQL permet un cheminement simple du développement nécessaire à l'ajout des types spatiaux. Dans le monde propriétaires, seul Illustra (maintenant Informix Universal Server) permet une extension aussi simple. Ceci n'est pas une cohincidence, Illustra estune version propriétaire modifiées du code original de PostgreSQL publié dans les années 1980. Puisque le cheminement du développement nécessaire à l'ajout de types à PostgreSQL est direct, il semblé naturel de commencer par là. Lorsque MySQL a publié des types de données spatiales de base dans sa version 4.1, l'équipe de PostGIS a jeuté un coup d'oueil dans leur code et cela a confirmé le choix initial d'utiliser PostgreSQL. Puisque les objets géographiques de MySQL doivent être considérés comme un cas particulier de chaînes de caractères, le code de MySQL a été diffus dans l'intégralité du code de base. Le développement de PostGIS version 0.1 a prit un mois. Réaliser un projet "MyGIS" 0.1 aurait prit beaucoup plus de temps, c'est sans doute pourquoi il n'a jamais vu le jour. Pourquoi pas des fichier Shapefile ? ------------------------------------ Les fichiers `shapefile `_ (et les autres formats) ont été la manière standard de stoquer et d'interragir avec les données spatiales depuis l'origine des SIG. Néanmoins, ces fichiers "plats" ont les inconvénients suivants : * **Les fichier au formats SIG requièrent un logiciel spécifique pour les lire et les écrire.** Le langage SQL est une abstraction de l'accès alléatoire au données et à leur analyse. Sans cette bastraction, vous devrez développer l'accès et l'anayse par cos propre moyens. * **L'accès concurent au données peut entraine foier un stoquage de données corrompues.** Alors qu'il est possible d'écrire du code supplémentaire afin de garantir la cohérence des données, une fois ce problème solutionné et celui de la performance associée, vous aurez re-écrit la partie la plus important d'un système de base de données. Pourquoi ne pas simplement utilisé une base de données standard dans ce cas ? * **Les questions compliquées nécessitent des logiciels compliqués pour y répondre.** Les question intéressantes et compliquées (jointures spatiales, aggrégations, etc) qui sont exprimables en une ligne de SQL grâce à la base de données, nécessitent une centaines de lignes de code spécifiques pour y répondre dans le cas de fichiers. La plupart des utilisateurs de PostGIS ont mis en place des systèmes où diverses applications sont succeptible d'accéder aux données, donc avoir les méthodes d'accès SQL standard simplifit le déploiement et le développement. Certains utilisateurs travaille avec de grand jeux de données, avec des fichiers, qui peuvent être segmenté en plusieurs fichiers, mais dans une base de données ces données peuvent être stoqué dans une seule grande table. En résumé, la combinaison du support de l'accès cocurent, des requêtes complexes spécifiques et de la performance sur de grand jeux de données sont ce qui différencies les base de données spatiales des systèmes utilisant des fichiers. Un bref histoirique de PostGIS ------------------------------ En mai 2001, la société `Refractions Research `_ publie la permière version de PostGIS. PostGIS 0.1 fournissait les objets, les indexes et des fonctions utilies. Le résultat était une base de données permettant le stockage et l'accès mais pas encore l'analyse. Comme le nombre de fonctions augmenté, le besoin d'un principe d'organisation devint clair. La spécification "Simple Features for SQL" (:term:`SFSQL`) publiée par l'Open Geospatial Consortium fournit une telle structure avec des indications pour le nommage des fonctions et les pré-requis. Avec le support dans PostGIS de simples fonctions d'analises et de jointures spatiales, `Mapserver `_ devint la première application externe permettant de visualiser les données de la base de données. Au cours de ces dernières années le nombre de focntions fournies par PostGIS grandit, mais sa puissance restait limité. La plupart des fonctions interressantes (ex : ST_Intersects(), ST_Buffer(), ST_Union()) étaient difficile à implémenter. Les écrire en repartant du début promettait des années de travail. Heureusement un second projet, la librarie "Geometry Engine, Open Source" or `GEOS `_ arriva. Cette librairie fournit l'ensemble des algorythmes nécessaire à l'implémentation de la spécification :term:`SFSQL` . En se liant à GEOS, PostGIS fournit alors le support complet de la :term:`SFSQL` depuis la version 0.8. As PostGIS data capacity grew, another issue surfaced: the representation used to store geometry proved relatively inefficient. For small objects like points and short lines, the metadata in the representation had as much as a 300% overhead. For performance reasons, it was necessary to put the representation on a diet. By shrinking the metadata header and required dimensions, overhead greatly reduced. In PostGIS 1.0, this new, faster, lightweight representation became the default. Recent updates of PostGIS have worked on expanding standards compliance, adding support for curve-based geometries and function signatures specified in the ISO :term:`SQL/MM` standard. Through a continued focus on performance, PostGIS 1.4 significantly improved the speed of geometry testing routines. Who uses PostGIS? ----------------- For a complete list of case studies, see the `PostGIS case studies `_ page. Institut Geographique National, France ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IGN is the national mapping agency of France, and uses PostGIS to store the high resolution topographic map of the country, "BDUni". BDUni has more than 100 million features, and is maintained by a staff of over 100 field staff who verify observations and add new mapping to the database daily. The IGN installation uses the database transactional system to ensure consistency during update processes, and a `warm standby system `_ to maintain uptime in the event of a system failure. GlobeXplorer ~~~~~~~~~~~~ GlobeXplorer is a web-based service providing online access to petabytes of global satellite and aerial imagery. GlobeXplorer uses PostGIS to manage the metadata associated with the imagery catalogue, so queries for imagery first search the PostGIS catalogue to find the location of the relevant images, then pull the images from storage and return them to the client. In building their system, GlobeXplorer tried other spatial databases but eventually settled on PostGIS because of the great combination of price and performance it offers. What applications support PostGIS? ---------------------------------- PostGIS has become a widely used spatial database, and the number of third-party programs that support storing and retrieving data using it has increased as well. The `programs that support PostGIS `_ include both open source and proprietary software on both server and desktop systems. The following table shows a list of some of the software that leverages PostGIS: +-------------------------------------------------+----------------------------------------------+ | Open/Free | Closed/Proprietary | +=================================================+==============================================+ | | | | * Loading/Extracting | * Loading/Extracting | | | | | * Shp2Pgsql | * Safe FME Desktop Translator/Converter | | * ogr2ogr | | | * Dxf2PostGIS | | | | * Web-Based | | * Web-Based | | | | * Ionic Red Spider (now ERDAS) | | * Mapserver | * Cadcorp GeognoSIS | | * GeoServer (Java-based WFS / WMS -server ) | * Iwan Mapserver | | * SharpMap SDK - for ASP.NET 2.0 | * MapDotNet Server | | * MapGuide Open Source (using FDO) | * MapGuide Enterprise (using FDO) | | | * ESRI ArcGIS Server 9.3+ | | * Desktop | | | | * Desktop | | * uDig | | | * QGIS | * Cadcorp SIS | | * mezoGIS | * Microimages TNTmips GIS | | * OpenJUMP | * ESRI ArcGIS 9.3+ | | * OpenEV | * Manifold | | * SharpMap SDK for Microsoft.NET 2.0 | * GeoConcept | | * ZigGIS for ArcGIS/ArcObjects.NET | * MapInfo (v10) | | * GvSIG | * AutoCAD Map 3D (using FDO) | | * GRASS | | | | | +-------------------------------------------------+----------------------------------------------+