.. _`gdal.ogr.formats.vrt`: Virtual Format ============== Le format Virtuel d'OGR est un pilote qui transforme les objets lu à partir d'autres pilotes sur des critères définie dans un fichier de contrôle XML. Il est d'abord utilisé pour profiter des couches spatiales provenant de tables à plat avec des informations spatiales dans des colonnes attributaires. Il peut être également utilisé pour associer des information de système de coordonnées avec une source de données, merger des couches de sources de données différentes dans une seule source de données, ou même juste fournir un fichier de soutient pour l'accès à une source de données pas sous forme de fichier. Les fichiers virtuel sont pour l'instant normalement préparés à la main. Problèmes de création ---------------------- Avant GDAL 1.7.0, le pilote VRT d'OGR était en lecture seule. Depuis GDAL 1.7.0, les opération *CreateFeature()*, *SetFeature()* et *DeleteFeature()* sont gérées sur la couche d'un jeu de données VRT, si les conditions suivantes sont remplies : * le jeu de données VRT est ouvert en mode update ; * la couche source sous-jascente gère ces opérations ; * l'élément *SrcLayer* est utilisé (en opposition à l'élément *SrcSQL*) ; * le FID des features VRT est le même que le FID des features sources, c'est à dire, l'élément *FID* n'est pas définie. Format de fichier virtuel -------------------------- L'élément racine d'un fichier de contrôle XML est *OGRVRTDataSource*. il a un enfant *OGRVRTLayer* pour chaque couche dans la source de données virtuelle. Cet élément doit avoir un attribut **name** avec le nom de la couche, et peut avoir les sous-éléments suivants : * **SrcDataSource (obligatoire) :** La valeur est le nom de la source de données dont cette couche sera dérivée. L'élément peut en option avoir un attribut *relativeToVRT* dont la valeur par défaut est "0", mais "1" indique que la source de données doit être interprétée comme relative au fichier virtuel. Cela peut être un jeu de données géré par OGR, incluant ODBC, CSV, etc. L'élément peut également avoir un attribut partagé pour contrôler si la source de données doit être ouverte en mode partagé. OFF par défaut pour l'utilisation de *SrcLayer* et ON pour l'utilisation de *SrcSQL*. * **SrcLayer (optionnel) :** la valeur est le nom de la couche dans la source de données dont cette couche virtuelle sera dérivée. Si cet élément n'est pas fournit, alors l'élément *SrcSQL* doit être fournit. * **SrcSQL* (optionnel) :** une requête SQL pour exécuter la génération de la couche désirée résultante. Ceci doit être fournie à la place de *StcLayer* pour les résultats dérivés de requêtes. certaines limitations peuvent s'appliquer pour les couches dérivées du SQL. * **FID (optionnel) :** nom de la colonne attributaire à partir duquel le FID . des objets doivent être dérivés. S'il n'est pas fourni, le FID des objets sources sera utilisé directement. * **Style (optionnelle) :** nom de la colonne attributaire à partir duquel le style des features doit être dérivé. Si non fournie, le style de la feature source sera utilisé directement. * **GeometryType (optionnel) :** le type de la géométrie à assigner à la couche. S'il n'est pas fournie il sera récupéré à partir de la couche source. La valeur doit être un parmi *wkbNone*, *wkbUnknown*, *wkbPoint*, *wkbLineString*, *wkbPolygon*, *wkbMultiPoint*, *wkbMultiLineString*, *wkbMultiPolygon, ou *wkbGeometryCollection"*. En option *25D* peut ajouté pour marquer l'utilisation des coordonnées Z. Par défaut *wkbUnknown* indique que n'importe quelle géométrie est autorisée. * **LayerSRS (optionnel) :** la valeur de cet élément est la référence spatiale à utiliser pour la couche. Si elle n'est pas fournie, elle est héritée de la couche source. La valeur peut être en WKT ou dans n'importe quel autre format accepté par la méthode *OGRSpatialReference::SetUserInput()*. Si la valeur est NULL, alors aucun SRS ne sera utilisé pour la couche. * **GeometryField (optionnel) :** cet élément est utilisé pour définir comment la géométrie pour les objets doit être dérivée. Si elle n'est pas fournie la géométrie de l'objet source est copié directement. Le type de l'encodage de la géométrie est indiqué avec l'attribut d'encodage qui peut avoir les valeurs *WKT*, *WKB* ou *PointFromColumns*. Si l'encodage est *WKT* ou *WKB* alors le champ attributaire aura le nom du champ contenu la géométrie WKT ou le WKB. Si l'encodage est *PointFromColumns* alors les attributs x, y et z aura les noms des colonnes à utilisées pour les coordonnées X, Y et Z. L'attribut z est optionnel. À partir de GDAL 1.7.0, l'attribut optionnel **reportSrcColumn** peut être utilisé pour définir si les champs géométriques sources (l'ensemble des champs dans les attributs **field**, **x**, **y** ou **z**) doivent être reporté comme champs de la couche vrt. TRUE par défaut. Si définie à FALSE, les champs géométriques sources seront utilisé seulement pour construire la géométrie de la feature de la couche VRT. * **SrcRegion (optionnel, à partir de GDAL 1.7.0) :** Cet élément est utilisé pour définir un filtre spatial initial pour les features sources. Ce filtre spatial sera combiné avec n'importe quel filtre spatial explicitement définie sur la couche VRT avec la méthode *SetSpatialFilter()*. La valeur de l'élément doit être une chaîne WKT valide définissant un polygone. Un attribut *clip* optionnel peut être définie à "TRUE" pour découper les géométries à la région source, sinon les géométries sources ne sont pas modifiées. * **Field (optionnel, à partir de GDAL 1.7.0) :** un ou plusieurs champs attributaires peuvent être définie avec les éléments Field. Si aucun élément Field ne sont définie, les champs de ma couche/sql source sera définie sur la couche vrt. L'élément Field peut avoir les attributs suivants : * **name (nécessaire) :** le nom du champs. * **type :** le type du champs, un parmi "Integer", "IntegerList", "Real", "RealList", "String", "StringList", "Binary", "Date", "Time", ou "DateTime" - "String" par défaut. * **width :** la largeur du champ, inconnus par défaut. * **precision :** la précision du champs, 0 par défaut. * **src :** le nom du champ source qui doit être copié dans celui-ci. par défaut, la valeur de "name". Exemple : couche ponctuelle ODBC ---------------------------------- Dans l'exemple suivant (disease.ovf) la mauvaise table à partir de la base de données ODBC DISEASE est utilisée pour créer une couche spatiale. Le fichier virtuel utilise les colonnes "x" et "y" pour obtenir la localisation spatiale. La couche est également définie comme une couche point, et comme étant dans le système de coordonnées WGS84. :: ODBC:DISEASE,worms worms wkbPoint WGS84 Exemple : renommer des attributs --------------------------------- Il peut être utile dans certaines circonstance de pouvoir renommer les noms des champs à partir d'une couche source en un nom différent. Cela est particulièrement vrai quand on veut traduire vers un format dont les schéma est imposé, tel que le format GPX (, , etc.). Cela peut être accomplit en utilisant SQL de cette manière : :: your_source.shp SELECT src_field_1 AS name, src_field_2 AS desc FROM your_source_layer_name Cela peut aussi être accomplie (à partir de GDAL 1.7.0) en utilisant des définitions de champs explicites : :: your_source.shp your_source Exemple : Filtre spatial transparent (GDAL >= 1.7.0) ----------------------------------------------------- L'exemple suivant retournera seulement les features à partir de la couche source qui intersecte la région (0,40)-(10,50). De plus, les géométries retournées seront découpées pour correspondre à cette région. :: source.shp POLYGON((0 40,10 40,10 50,0 50,0 40)) Autres remarques ----------------- * Quand *GeometryField* est *WKT*, les filtres spatiaux sont appliqués après extractions de toutes les lignes à partir de la source de données. Essentiellement, cela signifie qu'il n'y a pas de filtre spatial rapide sur les géométries dérivées WKT. * Quand *GeometryField* est *PointFromColumns*, et qu'un *SrcLayer* (en opposition à *SrcSQL*) est utilisé, et qu'un filtre spatial est effectif sur la couche virtuelle alors le filtre spatial sera traduit en interne en un filtre attribut sur les colonnes X et Y dans *SrcLayer*. Au cas où des filtres spatiaux rapide soient importants, il peut être utile d'indexer les colonnes X et Y dans le stockage des données source, si cela est possible. Par exemple si la source est un RDBMS. Vous pouvez désactiver cette fonctionnalité en définissant l'attribut *useSpatialSubquery* de l'élément GeometryField à FALSE. * Normalement la *SrcDataSource* est au format tabulaire non-spatial (tel que MySQL, SQLite, CSV, OCI, ou ODBC) mais il peut être également une base de données spatiales auquel cas la géométrie peut être directement copiée. .. yjacolin at free.fr, Yves Jacolin - 2011/08/04 (trunk 17729)