SVG : Création Images Vectorielles

Le SVG (Scalable Vector Graphics) est un langage de description à balises permettant de réaliser des graphiques et images vectorielles. Il appartient à la famille des langages dérivés du SGML (Standard Generalized Markup Language). Le langage SVG consiste à décomposer une image ou un graphique en éléments de bases et à mémoriser leurs équation mathématiques.

Contrairement aux images "matricielles" qui sont mémorisées sous formes de tableaux de secteurs colorés (pixels ou groupes de pixels), les images vectorielles ont une qualité constante quelque soit la résolution de l'écran ou l'agrandissement effectué sur l'image; l'image étant recalculée et reconstruite par la navigateur à chaque chargement ou rafraichissement de la page. Egalement le stockage des images vectorielles nécessitent beaucoup moins d'espace mémoire que les images matricielles, cependant elles sont limitées en complexité étant donné que chaque élément, chaque détail de l'image doit pouvoir être décomposé en éléments géométriques simples descriptibles sous forme d'équations mathématiques. De plus le code SVG est directement intégrable dans le DOM (Document Object Model) au sein même du code HTML ou XML, sans avoir à créer un lien vers un document anexe, ce qui facilite grandement la portabilité DOM.

Cette page est construite en s'inspirant des travaux de la communauté MDN Web Docs, pour chaque paragraphes le lien vers la page source est mentionné par les lettres "MDN" mises en apostrophe.


  1. Formes géométriques de base
    1. CIRCLE : Elément "cercle" MDN
      • Attributs propre :
      • cx : Position centre du cercle sur axe horizontal;
      • cy : Position centre du cercle sur axe vertical;
      • r : Rayon du cercle;
      • pathLength : Longueur totale de la circonférence en unité utilisateur.

        Exemple de code :

    2. ELLIPSE : Elément "éllipse" MDN
      • Attributs propre :
      • cx : Position centre de l'éllipse sur axe horizontal;
      • cy : Position centre de l'éllipse sur axe vertical;
      • rx : Rayon de l'éllipse suivant axe horizontal;
      • ry : Rayon de l'éllipse suivant axe vertical.
      • NB: Si un des deux rayons "rx" ou "ry" est ommis sa valeur par défaut est égale à la valeur de l'autre rayon, ce qui revient à tracer un cercle.


        Exemple de code :

    3. RECT : Elément "rectangle"
      • Attributs propre :
      • x : Position coin supérieur gauche du rectangle sur axe horizontal;
      • y : Position coin supérieur gauche du rectangle sur axe vertical;
      • width : Largeur du rectangle;
      • height : Hauteur du rectangle;
      • rx : Rayon coins du rectangle suivant axe horizontal;
      • ry : Rayon coins du rectangle suivant axe vertical.

        Caractéristique attributs propres :
      • Unité de valeur : pixel ("px") ou pourcentage ("%");
      • Valeur par défaut : "0";
      • Modifiables par fonction d'animation "animate".

        Exemple de code :

    4. LINE : Elément "ligne droite"
      • Attributs propre :
      • x1 : Position 1ere extrémité de la ligne sur axe horizontal;
      • y1 : Position 1ere extrémité de la ligne sur axe vertical;
      • x2 : Position 2eme extrémité de la ligne sur axe horizontal;
      • y2 : Position 2eme extrémité de la ligne sur axe vertical;

        Exemple de code :

  2. Tracer de lignes et courbes
    1. PATH : Elément "chemin"
      • Attributs propre :
      • d : Définit le tracé à dessiner au moyen des différentes méthodes ci-dessous:
        • MoveTo : "M x y" (coordonnées absolues)
        • LineTo : "L x y" (coordonnées absolues) | "l dx dy" (coordonnées relatives)
        • HorizontalLineTo : "H x" (coordonnées absolues) | "h dx" (coordonnées relatives)
        • VerticalLineTo : "V y" (coordonnées absolues) | "v dy" (coordonnées relatives)
        • ClosePath : "Z" (coordonnées absolues) | "z" (coordonnées relatives)
        • CurveTo : "C x1 y1, x2 y2, x y" (coordonnées absolues) | "c dx1 dy1, dx2 dy2, dx dy" (coordonnées relatives)
        • ShorthandCurveTo : "S x2 y2, x y" (coordonnées absolues) | "s dx2 dy2, dx dy" (coordonnées relatives)
        • QuadraticBezierCurveTo : "Q x1 y1, x y" (coordonnées absolues) | "q dx1 dy1, dx dy" (coordonnées relatives)
        • ShorthandQuadraticBezierCurveTo : "T x y" (coordonnées absolues) | "t dx dy" (coordonnées relatives)
        • EllipticalArc : "A rx ry x-axis-rotation large-arc-flag sweep-flag x y" (coordonnées absolues) | "a rx ry x-axis-rotation large-arc-flag sweep-flag dx dy" (coordonnées relatives)

        Exemple de code :

      Les paragraphes suivant décrivent chacune des méthodes utilisées dans l'attribut "d" de l'élément "path" présenté précédemment.

    2. MoveTo : Positionner curseur
      • Syntaxe : M x y (coordonnées absolues).
      • Objectif : Positionner le curseur au point de coordonées (x, y) et le fixer comme point de départ du tracé à effectuer.

    3. LineTo : Tracer ligne droite
      • Syntaxe : L x y (coordonnées absolues) | l dx dy (coordonnées relatives).
      • Objectif : Joindre par une ligne droite la position actuelle du curseur au point de coordonnées (x, y).
      • Exemple de code :

    4. HorizontalLineTo : Tracer ligne horizontale
      • Syntaxe : H x (coordonnées absolues) | h dx (coordonnées relatives).
      • Objectif : Joindre par une ligne droite la position actuelle du curseur au point de coordonnées (x) situé sur la même ligne horizontale.
      • Exemple :

    5. VerticalLineTo : Tracer ligne verticale
      • Syntaxe : H x (coordonnées absolues) | h dx (coordonnées relatives).
      • Objectif : Joindre par une ligne droite la position actuelle du curseur au point de coordonnées (x) situé sur la même ligne horizontale.
      • Exemple :

    6. ClosePath : Fermer le chemin
      • Syntaxe : Z | z.
      • Objectif : Fermer le tracé en cours d'éloboration.
      • Exemple :

    7. CurveTo : Tracer courbe
      • Syntaxe : C x1 y1 x2 y2 x y (coordonnées absolues) | c dx1 dy1 dx2 dy2 dx dy (coordonnées relatives).
      • Objectif : Joindre la position actuelle du curseur au point de coordonnées (x, y) en traçant une courbe cubique de Bézier dont les points de contrôle ont pour coordonnés (x1, y1) et (x2, y2).
      • Exemple :

    8. ShorthandCurveTo : Tracer courbe cubique de Bézier
      • Syntaxe : S x2 y2 x y (coordonnées absolues) | s dx2 dy2 dx dy (coordonnées relatives).
      • Objectif : Prolonger un tracé par une courbe cubique de Bézier dont le 1er point de contrôle est construit suivant caractéristiques du tracé à prolonger.
      • Caractéristiques particulières : Si le tracé à prolonger est une courbe cubique de Bézier (construit par les commandes C ou S), le 1er point de contrôle du nouveau tracé s'obtient par symétrie axiale du dernier point de contrôle du tracé à prolonger; si le tracé à prolonger n'est pas une courbe cubique de Bézier, le 1er point de contrôle du nouveau tracé correspondra au point de jonction entre les deux courbes (extrémité de la courbe à prolonger).
      • Exemple :

  3. Caractéristiques des attributs et tracés géométriques
    1. Caractéristiques des attributs propres :

        Cas général:
      • Unité de valeur : pixel ("px") ou pourcentage ("%");
      • Valeur par défaut : "0";
      • Modifiables par fonction d'animation "animate".

        Attributs "rx" et "ry": MDN
      • Cas d'utilisation: avec éléments <ellipse> | <rect>
        définissent un rayon suivant axe "x" ou axe "y";
      • Unité de valeur : pixel ("px") | pourcentage ("%") | automatique ("auto"),
        l'unité automatique attribue à un rayon la valeur du rayon qui lui est orthogonalement opposé ("rx"="ry" | "ry"="rx");
      • Valeur par défaut : "auto",
        si aucun des deux rayons n'est défini, la valeur par défaut est "0";
      • Modifiables par fonction d'animation <animate>.

      Caractéristiques des attributs généraux :

      • fill
      • stroke
      • stroke-width

  4. Eléments d'animation
    1. Elément ANIMATE
    2. Met en mouvement un élément en faisant varier dans le temps un de ses attributs.

      • Syntaxe: <animate attributs/>
      • Attributs propre :
        • de temps : begin; dur; end; min; max;
        • de répétition : restart; repeatCount; repeatDur;
        • de valeurs : attributeName; values; from; to; by; additive; accumulate;
        • de contrôle : fill; calcMode; keyTimes, keySplines;
        • de synchronisation : onbegin; onend; onrepeat.
      • Exemple :

  5. Exemple d'application
  6. Utilisation de tracés SVG en Géomatique

    La Géomatique, techniques de traitement informatique des données géographiques, possèdent de nombreuses applications. Dans le milieu associatif elle peut être utile pour les activités de pleine nature (courses d'orientation, randonnées, ...), pour les activités environnementales et de défense du monde vivant, pour les activités de valorisation de patrimoines, etc... Dans le secteur des services, elle peut être utile pour l'optimisation des déplacements (calcul des temps de trajets ou de la consommation de carburant), l'optimisation des tournées de visite chez les clients, etc...

    Cette page a ainsi vocation de dresser, pour cette discipline, une liste non exhaustive d'application possible y associant l'usage des outils du web.

    Tracés de cartes en SVG

    Dans ce chapitre nous allons proposer une méthodologie de tracé de cartes géographique en langage SVG. Nous prenons en exemple le Bassin d'Arcachon.

    Tout d'abord nous identifions quelques lieux d'intérêt en bord du bassin et relevons leurs coordonnées GPS; nous relevons en même temps les coordonnées GPS de points géographiques quelconques les précédant et les succédants en remontant les bords du bassin (ces derniers points serviront de points de construction pour le tracés SVG).

    Ci-dessous un tableau énumérant les points d'intérêts choisis pour le tracé du Bassin d'Arcachon:

     Lieu d'intérêt  Coord GPS
    Pt précédant 
     Coord GPS
    Lieu d'intérêt 
     Coord GPS
    Pt succédant 
    Plage de la Lagune 44.53,-1.26 44.55,-1.25 44.56,-1.25
    Dune du Pilat 44.58,-1.22 44.59,-1.22 44.60,-1.21
    Plage du Moulleau 44.64,-1.20 44.64,-1.20 44.64,-1.20
    Plage d'Arcachon 44.66,-1.19 44.66,-1.17 44.66,-1.14
    Pointe de l'Aiguillon 44.66,-1.14 44.65,-1.14 44.65,-1.15
    Plage de La Teste 44.65,-1.15 44.65,-1.13 44.65,-1.12
    ... ...,... ...,... ...,...

    L'étape suivant consiste à calculer les coordonnées des points de construction pour le tracé vectoriel des bords du Bassin. Le calcul dépendra du mode de projection cartographique choisie.

     Lieu d'intérêt  Coord SVG
    Pt précédant 
     Coord SVG
    Lieu d'intérêt 
     Coord SVG
    Pt succédant 
    PtA xA1,yA1 xA2,yA2 xA3,yA3
    PtB xB1,yB1 xB2,yB2 xB3,yB3
    PtC xC1,yC1 xC2,yC2 xC3,yC3
    ... ...,... ...,... ...,...
    PtI xI1,yI1 xI2,yI2 xI3,yI3
      où:
    • xIi est la position relative du PtIi par rapport au pôle nord;
      • pour une projection equirectangulaire son unité est le degré et sa valeur est égale à "90°-Latitude du point PtIi";
    • yIi est la position relative du PtIi par rapport au méridien de référence;
      • pour une projection equirectangulaire le méridien de référence est celui de Greenwich, son unité est le degré et sa valeur est égale à la Longitude du point PtIi;

    Ce travail effectué on trace le bord du bassin par la commande PATH.


Commentaires

Posts les plus consultés de ce blog

La Blockchain au service de l'Economie Sociale et Solidaire

Impact du numérique sur l'environnement et le vivant

Promouvoir un Numérique porteur des valeurs de l'Economie Sociale et Solidaire