Premier projet¶
Une fois que vous avez installé QGIS, lancez le programme et passez par les étapes suivantes pour faire les paramètres fondamentaux:
Ouvrir QGIS
Créer un nouveau projet (Nouveau projet vide)
Vérifier Propriétés du projet:
Dans le menu supérieur, allez à Projet > Produits
Définir le système de référence des coordonnées Système de coordonnées à EPSG:4326:
WGS84 (Système de référence coordonné) Bounds: -180.0000, -90.0000, 180.0000, 90.0000
Bounds prévus: -180.0000, -90.0000, 180.0000, 90.0000
Portée : Composante horizontale d’un système 3d. Utilisé par le système GPS de navigation par satellite et pour les levés géodésiques militaires de l’OTAN.
Dernière révision : 27 août 2007
Zone : Monde
Pour en savoir plus à http://epsg.io
Récupérer les coordonnées point dans n’importe quel format Système de coordonnées
Convertir entre différents Système de coordonnées (par exemple, convertir 48.745, 9.103 de EPSG 3857 en EPSG 4326)
Enregistrer le projet en tant que qgis-project.qgz dans un nouveau dossier qgis-exercice
Sebastian Schwindt@hydroinformatics on YouTube.
Tous les fichiers créés dans ce tutoriel peuvent être téléchargés à partir du dépôt QGIS tutoriel.
Panneaux, barres d’outils et greffons¶
Suivez les instructions illustrées ci-dessous pour activer le QGIS Toolbox.

Figure 1:Ouvrez la boîte à outils QGIS depuis le menu principal.
De plus, la barre d’outils Digitizing (View > Toolbars > check Digitizing Toolbar) est requise pour compléter ce tutoriel.
La conversion entre les types de données géospatiales et les grilles numériques (computationnelles) peut être facilitée par des plugins. Pour installer n’importe quel plugin dans QGIS, allez dans le menu Plugins > Gérer et installer des plugins... > All onglet > Rechercher... pour un plugin pertinent et l’installer.
Dans le cadre de l’analyse fluviale, les plugins suivants sont recommandés et utilisés à plusieurs endroits sur ce site:
Le plugin Crayfish pour post-traitement de la sortie numérique du modèle.
Le plugin BASEmesh2 fournit des routines pour créer des maillages de calcul pour des simulations numériques avec BASE.
Le plugin PostTelemac permet la visualisation géospatiale et la conversion des résultats des modèles numériques produits avec TELEMAC.
BASEmesh n’est qu’un seul générateur de mailles (très performant) pour QGIS et Tab. 1 listes d’autres plugins pour générer des mailles de calcul pour les modèles numériques ainsi que des formats de fichiers cibles et des modèles
Table 1:A list of QGIS mesh generator plugins.
Nom et lien du plugin Mesh | Compatibilité du modèle | Format de fichier Mesh de sortie | Caractéristiques du mesh |
|---|---|---|---|
| 3D éléments finis (Netgen et Mmg3d), compatibilité avec SALOME | ||
| Objectif: Modélisation météorologique et atmosphérique | ||
TULOW (propriétaire) |
| TUFLOW génère automatiquement des maillages (volumes finis / différences finies) | |
| Plonge dans plusieurs algorithmes de maillage (entre autres : Shewchuk (1996)) | ||
DEMto3D | Raster vers STL (style) fichiers pour Blender |
| Créer des jumeaux numériques dans Blender |
Cartes de base pour QGIS (Google ou cartes de rue ouvertes)¶
Une connexion Internet rapide est nécessaire pour ajouter des cartes de base en ligne.
Pour ajouter une carte de base (p. ex., données satellite, rues ou limites administratives), allez au Browser, faites un clic droit sur XYZ Tiles, sélectionnez Nouvelle connexion..., ajoutez un nom et une URL d’une carte de base en ligne. Une fois la nouvelle connexion ajoutée, elle peut être ajoutée à un projet QGIS par glisser-déposer comme n’importe quelle autre couche de géodonnées. La figure ci-dessous illustre la procédure d’ajout d’une nouvelle connexion et ses tuiles XYZ comme couche au projet. Pour superposer plusieurs cartes de base (ou n’importe quel autre calque), droit-clic sur un calque, puis Propriétés de calque > Transparence > modifier l’opacité** (par exemple à 50 %).

Ajoutez une carte de base à QGIS : (1) localisez le navigateur (2) clic droit sur XYZ-Tiles et sélectionnez Nouvelle connexion... (3) saisissez un nom et une URL (voir tableau ci-dessous) pour la nouvelle connexion, cliquez sur OK (4) glisser et déposer la nouvelle tuile (ici : Google Satellite) dans le panneau Calques.
Expand to watch the video tutorial on basemaps
Sebastian Schwindt@hydroinformatics on YouTube.
L’URL suivante peut être utilisée pour récupérer des tuiles XYZ en ligne (plus d’URL peuvent être trouvées sur Internet).
Table 2:Providers of XYZ basemap tiles
Fournisseur (nom de l’éditeur) | URL |
|---|---|
Imagerie par satellite Bing | https:// |
Imagerie du monde ESRI | https:// |
Rue ESRI | https:// |
ESRI Topo | https:// |
Google Satellite | |
Google Street | |
OpenStreetMap (OSM) | |
OSM Noir et blanc |
La plupart des cartes de base sont fournies dans le système de coordonnées EPSG:3857 -WGS84 / Pseudo Mercator. Pour utiliser des produits géodonnées personnalisés, assurez-vous que toutes les autres couches ont le même système de coordonnées. En savoir plus sur les systèmes de coordination et les projections dans les sections Données géospatiales et shapefile projection.
Créer un fichier de formes¶
Cette section guide la création d’un point, d’une ligne et d’un polygone Fichier de forme (données vectorielles). Pour en savoir plus sur ces données vectorielles et d’autres types de données spatialement explicites, lisez la section Données géospatiales.
Créer un fichier de formes point¶
Commencez par charger des images satellite et une carte de base de rue (voir ci-dessus) dans le panneau des calques. Zoom sur l’Europe centrale et à peu près localiser Stuttgart dans le sud-ouest de l’Allemagne. Trouvez la rivière Neckar très perturbée au nord de Stuttgart et déplacez-vous en direction en amont (c.-à-d. direction orientale), passez les villes d’Esslingen et Plochingen jusqu’à la confluence du Neckar et des fleuves Fils. De là, suivez la rivière Fils en direction en amont pendant quelques centaines de mètres et localisez le PEGELHAUS (c.-à-d. une station de jaugeage à la rivière Fils - cliquez pour visiter). Pour faciliter la recherche de la station de mesure à l’avenir, nous allons maintenant créer un fichier de forme de point comme expliqué dans la vidéo suivante et les instructions analogues ci-dessous la vidéo.
Sebastian Schwindt@hydroinformatics on YouTube.
Dans le menu supérieur de QGIS aller à Layer > Créer un calque > Nouveau calque de fichier de forme
Définir un nom de fichier (par exemple gauges.shp - ne peut pas dépasser 13 caractères), par exemple, dans un dossier appelé qgis-exercice.
Type de géométrie:
MultiPointDimensions supplémentaires:
Z(+M Values)Ajouter deux nouveaux champs :
StnName(* Données textuelles*)StnID(Numéro du trou)
Éditer/draw points
Toggle Editing (c.-à-d., activer en cliquant sur le stylo jaune
) > Digitizing Toolbar > Add Point Feature 
Cliquez sur le PEGELHAUS pour dessiner un point et définir
StnName:PlochingenFilsStnID:00025
Ajoutez plus de points si vous voulez.
Finaliser les modifications en cliquant sur Enregistrer les modifications de calque
> Arrêter (Toggle) Modifier en cliquant sur le stylo jaune
symbole.
Améliorer la visualisation en changeant la symlogie :
** Double-cliquez sur** les jauges couche > Symbiologie
Mettre en évidence Simple Marqueur, changer le symbole + et changer la couleur et la taille de remplissage.
Mettre en évidence Marquer et changer l’opacité**
Cliquez sur Appliquer et OK
Vérifiez les paramètres des points dans la table Attribute (cliquez à droite sur le calque gauges et sélectionnez Attribute Table).
Créer un fichier de formes de ligne¶
Créer un Line Shapefile appelé CenterLine.shp pour dessiner une ligne centrale du Fil ± 200 m autour de la jauge PEGELHAUS, semblable au shapefile point créé ci-dessus. Ajouter un champ text et l’appeler RiverName. Puis tracer une ligne le long de la rivière Fils commençant à 200 m en amont et se terminant à 200 m en aval du PEGELHAUS en suivant la rivière sur la couche OpenStreetMap. Voir plus dans la vidéo suivante.
Sebastian Schwindt@hydroinformatics on YouTube.
Créer un fichier de formes Polygon¶
Pour délimiter différentes zones de rugosité (p. ex., au besoin pour un modèle numérique bidimensionnel), créer un fichier de formes Polygon appelé FlowAreas.shp. Le fichier contiendra des polygones zonant la section considérée des Fils dans la plaine inondable et le lit du canal principal. Nommez le premier champ AreaType (type: Text) et le deuxième champ ManningN (type: Numéro de décret). Voir plus dans la vidéo suivante et les instructions ci-dessous la vidéo.
Sebastian Schwindt@hydroinformatics on YouTube.
Pour dessiner les polygones:
Activer le claquage pour éviter les écarts entre la plaine inondable et les polygones du canal principal
Activer la barre d’outils ** snapping**: Voir > Barres d’outils > Barre d’outils d’échantillonnage
Activer le snapping à partir de la barre d’outils Snapping > Enable Snapping et Éviter le chevauchement en polygone
Pour dessiner un polygone, allez à la barre d’outils Digitation > Ajouter une fonctionnalité en polygone avec l’option Digitiser avec l’option Segment activée
Commencez à dessiner en cliquant sur la carte (clic droit final Polygon)
Dessinez un polygone du canal principal et après la finalisation:
AreaType:MainChannelManningN:0.028
Dessinez deux autres polygones des plaines inondables de la rive droite (RB) et de la rive gauche (LB) et définissez :
AreaType:FloodPlainRBetFloodPlainLBManningN:0.05(les deux)
Si vous avez fait une erreur de dessin, utilisez soit la table Attribute pour sélectionner et supprimer des polygones entiers, soit utilisez l’outil vertex
de la barre de menus.Après avoir dessiné tous les polygones, Enregistrer les éditions et Toggle Editing (désactiver).
Pour améliorer la visualisation, modifiez la Symbologie en Catégorie en fonction du champ
AreaType: Keep Random Colors > Cliquez sur Classifier > Appliquer et si vous aimez la visualisation, cliquez sur OK.
Conversion: Rasterize (Polygon en Raster)¶
De nombreux modèles numériques exigent que la rugosité soit fournie au format Données sur les cellules broyées. À cette fin, cette section présente la conversion du fichier de forme polygone créé ci-dessus (FlowAreas.shp) en une rugosité Données sur les cellules broyées. La vidéo suivante et les instructions ci-dessous décrivent le fonctionnement de la conversion.
Sebastian Schwindt@hydroinformatics on YouTube.
Pour convertir un ensemble de données vectorielles géospatiales, utilisez l’outil Rasterize :
Dans la barre de menu QGIS, assurez-vous d’activer le panneau Processing Toolbox (View > Panels > Processing Toolbox)
Dans la Boîte à outils de traitement > recherche (tap) Rasterize > sélectionner Rasterize (vecteur à raster)
Si le plugin Crayfish est installé, un autre outil Rasterize apparaîtra, que nous n’utiliserons pas dans ce tutoriel (c.-à-d., assurez-vous de sélectionner Rasterize (vecteur à raster)).
Dans la fenêtre Rasterize (Vector to Raster) :
Couche d’entrée:
FlowAreasField to use for a burn-in value:
ManningN** Unités de taille de raster de sortie**:
Pixels** Résolution width/horizontale** :
100(le plus petit, le plus grossier du raster)Hauteur/résolution verticale:
100(le plus petit, le plus grossier du raster)... défiler vers le bas ...
Étendue des résultats : cliquez sur le bouton ... > Calculer à partir du calque >
FlowAreasRasterized (NOM DU DOSSIER) > cliquez sur le bouton ... > Enregistrer dans le fichier... >
roughness.tifCliquez sur Run
Réglez la Symbologie à Singleband pseudocolor avec Interpolation:
Discrete, Colorramp:Magma, Mode:Equal Interval> Appliquer. Si la visualisation est satisfaisante, cliquez sur OK.
La conversion entre les types de données géospatiales peut être facilitée en utilisant Python. Lisez la section sur Vectoriser et rastériser pour en savoir plus.
Polygonize¶
The inverse operation of Rasterize is called Raster to Vector, which is documented at https://
Aller à Raster (menu supérieur) > Conversion > Polygonize (Raster to Vector)...
Couche d’entrée : sélectionnez le raster à convertir
** Numéro de bande**: la bande de raster pour l’insertion de la valeur de polygone (c.-à-d. champ dans la table d’attribut); quelques notes:
cet algorithme va arrondir les décimales aux entiers (voir vidéo ci-dessous)
Sinon, recherchez Raster pixels vers polygones dans Processing Toolbox, mais cela créera un nombre excessif de polygones
Nom du champ à créer : sélectionnez un nom pour le champ de valeur polygone dans la table des attributs (pas plus de 10 caractères)
Vectorized: définir le répertoire et le nom du nouveau fichier de formes polygones
Cliquez sur Run
Pour convertir un Raster en une ligne/point (vecteur) shapfile, les options sont l’outil Contour (Raster menu > Extraction > Contour) ou Raster pixels to points algorithme (Processing toolbox > enter raster pixels to points). Regardez aussi les tutoriels sur geo file conversion with Python.
Travailler avec Rasters¶
Calculatrice de grille QGIS (algèbre carte)¶
Certains modèles de préférence (utilisation par défaut) n de Manning, d’autres utilisent le coefficient de rugosité Strickler , qui est l’inverse de n de Manning (c.-à-d. - lire plus sur les coefficients de rugosité dans l’exercice 1d Hydraulique (formule Manning-Strickler)). Ainsi, transformer un raster de rugosité Strickler en raster de rugosité Manning nécessite d’effectuer une opération de raster algébrique (pixel par pixel). La vidéo suivante et les instructions ci-dessous présentent l’utilisation du QGIS Raster Calculator pour effectuer de telles opérations algébriques.
Sebastian Schwindt@hydroinformatics on YouTube.
Commencez par l’ouverture de la barre de menus QGIS (Raster > Raster Calculator...). Puis, convertissez le raster roughness.tif créé ci-dessus des valeurs n de Manning en un raster de rugosité Strickler :
Définir une couche Output (par exemple, qgis-exercise/roughness-stickler.tif) et conserver le format Output de GeoTIFF.
Sélectionnez en option une étendue de couche correspondant au raster roughness.tif créé ci-dessus.
Dans le type de cadre Raster Calculator Expression 1, puis cliquez sur le bouton / (cadreOperators), puis sélectionnez roughness@1 dans le cadre Raster Bands.
Le cadre Raster Calculatrice Expression doit maintenant contenir :
1 / "roughness@1", où le signe@se réfère au numéro de bande1.Cliquez sur OK pour lancer Raster Calculator.
Après un calcul réussi, modifiez en option la symlogie de la nouvelle couche (roughness-stickler).
Pour mettre en œuvre une calculatrice sur mesure pour le traitement par lots de fichiers raster avec Python lire la section Créer et combiner des rasoirs HSI dans l’exercice Scripter une carte des caractéristiques de l’habitat.
Raster à XYZ¶
Les formats de données scientifiques, tels que HDF, fonctionnent mieux avec des ensembles de données géospatiales brutes comme *.xyz fichiers. Un fichier .*xyz contient uniquement des coordonnées X, Y et Z de points (c.-à-d. des nuages de points) avec ou sans en-tête simple. Par exemple, ce livre électronique utilise des données *.xyz pour l’interpolation d’altitude d’une maille de calcul pour le logiciel de modélisation numérique scientifique TELEMAC. Pour générer un *.xyz à partir d’un GeoTIFF raster utiliser le workflow suivant:
Dans le panneau Layers, assurez-vous d’importer la couche raster pour la conversion et ** identifiez sa valeur de Non-Données** (** Propriétés de Layer** > Informations > Section Bands > No-Données afficher par défaut le champ
-9999dans QGIS).Dans le menu supérieur QGIS aller à Raster > Conversion > Traduit par la Rédaction...
Dans la fenêtre Translate (Format Convert), effectuez les réglages suivants :
Couche d’entrée = le raster (par exemple, un DEM) à convertir
** Paramètres avancés** cadre > Type de données de sortie > sélectionner Float32 (correspond à une seule précision dans les modèles numériques)
Converti > ... bouton (à la fin de la ligne) > Enregistrer dans le fichier... > définir un nom de fichier** tel que
dem-pointset sélectionnerXYZ files (*.xyz)dans le champ Enregistrer comme type.Save et Run la traduction (conversion).
Le fichier résultant *.xyz contient également des points avec No-Data pour remplir des espaces vides dans l’image rectangulaire de GeoTIFF (que QGIS a reconnu comme des pixels sans données). Les points sans données peuvent rendre le fichier *.xyz inutilement lourd, en particulier lorsqu’il s’agit d’un DEM d’une rivière naturelle proche du recensement. Pour éliminer les points inutiles de données, ouvrez le fichier *.xyz dans un logiciel de tableur, comme Calc in LibreOffice et utilisez l’outil Sort (en Calc mettre en évidence tous les points aller à Données > Sort...) pour trier par Z valeurs (plus petites à plus petites) et ensuite supprimer toutes les lignes qui ont la valeur No-Data identifiée ci-dessus (-9999) comme Z valeur. Enregistrer le fichier *.xyz et fermer le logiciel de tableur.
Shapefile to XYZ
Les formulaires ne doivent pas être convertis en GeoTIFF pour créer un fichier *.xyz. Pour créer un fichier *.xyz à partir d’un fichier shapefile :
Faites un clic droit sur le shapefile dans le panneau Layer > Export > Enregistrez la fonctionnalité sous....
Sélectionnez Comma Valeur séparée (CSV) dans le champ Format.
Définissez un nom de fichier** en cliquant sur le bouton ....
Dans le cadre ** Options Layer**, sélectionnez AS XYZ dans le champ GEOMETRY et conservez toutes les autres valeurs par défaut.
Cliquez sur OK pour convertir CSV.
Open the CSV file in a text editor and use its find and replace function (usually
CTRL+ForCTRL+H) to replace all COMMA,by a space symbol. Note that this action requires that the comma has not been used as decimal separator.Enregistrer le fichier CSV en tant que fichier
*.xyz.
Pour finaliser le fichier *.xyz, ouvrez-le dans un text editor et ajoutez un en-tête. Par exemple, utilisez l’en-tête suivant pour travailler avec Blue Kenue:
:FileType xyz ASCII EnSim 1.0
:EndHeaderEnregistrer les changements. Le fichier *.xyz est maintenant mince et prêt à être utilisé, par exemple, pour le fichier TELEMAC pre-processing.
Créer la mise en page et les cartes PDF / JPG (ou autre)¶
Les images géoréférencées dans GeoTIFF ou d’autres formats raster, éventuellement avec des fichiers de forme superpositionnés sur le dessus, sont pratiques et flexibles pour une utilisation avec des logiciels géospatials, comme QGIS, mais ne conviennent pas pour les présentations ou les rapports. À des fins de présentation, les images ou cartes géospatiales devraient de préférence être exportées vers des formats communs, tels que le Portable Doccument Format (PDF) ou JPEG/JPG. Pour créer des cartes généralement formatées avec QGIS, il faut d’abord créer une nouvelle mise en page (imprimée), qui peut ensuite être exportée vers un format de carte commun (par exemple, avec une légende, une barre d’échelle et une flèche nord). La vidéo suivante et les descriptions ci-dessous le guide vidéo à travers le processus de création de carte avec QGIS.
Sebastian Schwindt@hydroinformatics on YouTube.
Commencez par créer une nouvelle mise en page en cliquant sur le menu déroulant Project, puis sélectionnez Nouvelle mise en page. Dans la nouvelle mise en page, préparer la carte et l’exporter comme suit :
Définir un titre Layout (par exemple, exercice-layout).
Dans la nouvelle (* exercice-layout*) Disposition:
Aller à Ajouter un élément > Ajouter une carte.
Dessinez un rectangle qui contiendra la carte.
Ajouter un élément > Ajouter une barre d’échelle
Pour contrôler les échelles et les unités indiquées dans la barre d’échelle:
Dans le panneau Items, surlignez
<Scalebar>et trouvez l’onglet Item Properties ci-dessous.Dans l’onglet Propriétés de l’article **, modifiez les unités à votre convenance.
Ajouter un élément > Ajouter une légende
Pour contrôler les éléments de la légende :
Dans le panneau Items, surlignez
<Legend>et trouvez l’onglet Item Properties ci-dessous.Dans l’onglet Propriétés de l’article, trouvez Articles législatifs > désactivés Mise à jour automatique > supprimer OpenStreetMap et Google Satellite.
Passez par d’autres Items dans la barre de menu Ajouter l’élément (p. ex. Arrow pour Northing).
Enregistrer le projet de mise en page (dans le menu supérieur Enregistrer > Enregistrer le projet)
Exporter la carte aux formats communs:
Pour JPG ou PNG: Layout > Exporter en tant qu’image
Pour PDF : Layout > Exporter en format PDF
En option, pour les graphiques SVG-vector: Layout > Exporter en tant que SVG
QGIS a beaucoup d’autres capacités, mais ce tutoriel fondamental aurait dû vous fournir les connaissances nécessaires pour tirer parti de la puissance de QGIS pour de nombreuses applications.
PyQGIS: QGIS et Python¶
L’interface utilisateur graphique QGIS (GUI) fournit une ligne de commande Python (Plugins > Python Console), qui permet d’automatiser presque n’importe quel clic de souris dans l’interface graphique. Cette ligne de commande Python est appelée PyQGIS et le QGIS developer docs fournit des instructions sur la façon d’importer et d’exécuter des scripts Python autonomes en dehors de l’interface graphique QGIS. Voici le modèle Python de base pour exécuter un script PyQGIS :
from qgis.core import *
# define qgis installation location
QgsApplication.setPrefixPath("/path/to/qgis/installation", True)
# instantiate a QgsApplication, where the second argument (False) disables the GUI
qgs = QgsApplication([], False)
# load providers
qgs.initQgis()
# HERE GOES YOUR CUSTOM CODE
# exit the QGIS application to remove the provider and layer registries from memory
qgs.exitQgis()Cependant, lorsque vous ouvrez le terminal de votre système ou Anaconda Prompt pour lancer un code PyQGIS, vous pouvez être bloqué sur la première ligne de code déjà: from qgis.core import * rendements ImportError: No module named qgis.core. Selon le QGIS developer docs, cette erreur se produit parce que le Python de votre système ne sait pas où vit l’environnement PyQGIS. Pour que votre terminal reconnaisse PyQGIS, prenez les mesures suivantes selon votre système :
Ouvrir le terminal et installer python-qgis:
sudo apt install python-qgisAprès l’installation réussie, essayez si vous pouvez maintenant importer qgis.core:
USER@computer:~$ python
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from qgis.core import *
>>> exit()If from qgis.core import * did not throw any error, you are all set and can stop reading. Otherwise, find and open your .bashrc file (Debian/Ubuntu/Mint: /home/USERNAME/.bashrc). Note that files starting with a . name are hidden on Linux and become visible by toggling with simultaneously pressing the CTRL+H keys.
Au bas de .bashrc ajouter ce qui suit
export PYTHONPATH=/<qgispath>/share/qgis/pythonL’expression <qgispath> devrait être remplacée par l’endroit où vit l’environnement PyQGIS. Pour savoir où c’est, tapez (dans Terminal):
dpkg-query -L python-qgisCeci indique où vit PyQGIS, qui, sur Ubuntu/Mint est typiquement:
/usr/lib/python3/dist-packages/Dans ce cas, ajoutez .bashrc:
export PYTHONPATH=/usr/lib/python3/dist-packages/Ensuite, connectez-vous et reconnectez-vous à votre système (c.-à-d. rechargez .bashrc). La commande from qgis.core import * devrait maintenant fonctionner en Python.
Assurez-vous que votre système sache où vit PyGIS en ajoutant la ligne suivante aux variables d’environnement (Windows 10 : Mon ordinateur > Propriétés > Paramètres avancés du système > variables d’environnement). Remplacer <qgispath> par le chemin où QGIS vit sur votre système.
Nom variable =
PYTHONPATHValeur variable =
C:\<qgispath>\python
Ou utilisez l’invite Windows :
set PYTHONPATH=C:\<qgispath>\python- Shewchuk, J. R. (1996). Triangle: Engineering a 2D quality mesh generator and Delaunay triangulator. In M. C. Lin & D. Manocha (Eds.), Applied Computational Geometry Towards Geometric Engineering (pp. 203–222). Springer. 10.1007/BFb0014497