Partager via


Reduce (type de données geometry)

Retourne une approximation de l'instance geometry donnée produite en exécutant l'algorithme de Douglas-Peucker sur l'instance avec la tolérance donnée.

Syntaxe

.Reduce ( tolerance )

Arguments

  • tolerance
    Valeur de type float. tolerance est la tolérance à entrer dans l'algorithme Douglas-Peucker.

Types des valeurs de retour

SQL Server type de retour : geometry

Type de retour CLR : SqlGeometry

Notes

Pour les types collection, cet algorithme fonctionne indépendamment sur chaque geometry contenue dans l'instance.

Cet algorithme ne modifie pas d'instances Point.

Sur les instances LineString, l'algorithme de Douglas-Peucker conserve les points de départ et de fin d'origine de l'instance, et l'algorithme rajoute de manière itérative le point de l'instance d'origine qui dévie le plus du résultat, jusqu'à ce qu'aucun point ne dévie plus de la tolérance donnée.

AttentionAttention

L'algorithme de Douglas-Peucker peut se traduire par une instance LineString non valide, mais la méthode Reduce appellera en interne la méthode MakeValid sur l'instance résultante. Cela peut provoquer la suppression des points de début et de fin d'origine de l'instance résultante. Pour obtenir un exemple, consultez Showing an example where the original start and end points are lost.

Sur les instances Polygon, l'algorithme de Douglas-Peucker est appliqué indépendamment à chaque anneau. La méthode produira un FormatException si l'instance Polygon retournée n'est pas valide ; par exemple, une instance MultiPolygon non valide est créée si Reduce() est appliquée pour simplifier chaque anneau dans l'instance et que les anneaux résultants se chevauchent.

Exemples

Simplification d'une instance LineString avec Reduce()

L'exemple suivant crée une instance LineString et utilise Reduce() afin de simplifier l'instance.

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(0 0, 0 1, 1 0, 2 1, 3 0, 4 1)', 0);
SELECT @g.Reduce(.75).ToString();

Affichage d'un exemple où les points de début et de fin d'origine sont perdus

L'exemple suivant illustre la manière dont les points de début et de fin d'origine ne peuvent pas être conservés par l'instance résultante. Cela est dû au fait que la conservation des points de début et de fin d'origine provoquerait une instance LineString non valide.

DECLARE @g geometry = 'LINESTRING(0 0, 4 0, 2 .01, 1 0)';
DECLARE @h geometry = @g.Reduce(1);
SELECT @g.STIsValid() AS Valid
SELECT @g.ToString() AS Original, @h.ToString() AS Reduced;

Voir aussi

Autres ressources