Smooth Polygon (Cartography)

Summary

Smooths sharp angles in polygon outlines to improve aesthetic or cartographic quality.

Learn more about how the Smooth Line and Smooth Polygon tools work

Illustration

Smooth Polygon tool illustration
The sharp angles of a polygon can be smoothed using either the PAEK or Bezier interpolation method.

Usage

  • The Smoothing Algorithm parameter has the following options:

    • Polynomial Approximation with Exponential Kernel (PAEK)—Smooths polygons based on a smoothing tolerance. Each smoothed polygon may have more vertices than its source polygon. The Smoothing Tolerance parameter controls the length of a moving path used in calculating the new vertices. The shorter the length, the more detail that will be preserved and the longer the processing time.
    • Bezier interpolation—Smooths polygons without using a tolerance by creating approximated Bezier curves to match the input polygons.
  • Use the Input Barrier Layers parameter to identify features that must not be crossed by smoothed polygons. Barrier features can be points, lines, or polygons.

  • Processing large datasets may exceed memory limitations. In such cases, consider processing input data by partition by identifying a relevant polygon feature class in the Cartographic Partitions environment setting. Portions of the data, defined by partition boundaries, will be processed sequentially. The resulting feature class will be seamless and consistent at partition edges. See Generalizing large datasets using partitions for more information.

    Caution:

    The Cartographic Partitions environment setting is ignored when the Handling Topological Errors parameter is set to Do not check for topological errors or Check and flag topological errors.

  • Domains and subtypes will be copied to the output even if the Transfer field domain, subtypes, and attributes rules environment is unchecked.

  • The output polygon feature class will be topologically correct. Any topological errors in the input data are flagged in the output polygon feature class. The output feature class will include the following additional fields:

    • InPoly_FID—Contains the feature IDs of the input.
    • SmoPgnFlag—Contains the topological errors of the input. A value of 1 indicates that a topological error is present; a value of 0 (zero) indicates that no errors are present.

    Legacy:

    Prior to the ArcGIS Pro 2.2 version of this tool, the Preserve endpoint for rings parameter was used to specify whether the endpoint of a resulting isolated polygon ring would be preserved. This parameter is still included in the tool's syntax for compatibility in scripts and models but is now ignored and hidden on the tool's dialog box.

Parameters

LabelExplanationData Type
Input Features

The polygon features that will be smoothed.

Feature Layer
Output Feature Class

The output polygon feature class that will be created.

Feature Class
Smoothing Algorithm

Specifies the smoothing algorithm that will be used.

  • Polynomial Approximation with Exponential Kernel (PAEK)A smoothed polygon that will not pass through the input polygon vertices will be calculated. This is the default.
  • Bezier interpolationBezier curves will be fitted between vertices. The resulting polygons pass through the vertices of the input polygons. This algorithm does not require a tolerance. Bezier curves will be approximated in the output.
String
Smoothing Tolerance

The tolerance used by the Smoothing Algorithm parameter's Polynomial Approximation with Exponential Kernel (PAEK) option. A tolerance must be specified, and it must be greater than zero. You can choose a preferred unit; the default is the feature unit. This parameter is unavailable when the Bezier interpolation option is used for the Smoothing Algorithm parameter.

Linear Unit
Preserve endpoint for rings
(Optional)

This is a legacy parameter that is no longer used. It was formerly used to specify whether the endpoint of an isolated polygon ring would be preserved. This parameter is still included in the tool's syntax for compatibility in scripts and models but is hidden from the Geoprocessing pane.

Specifies whether the endpoints of isolated polygon rings will be preserved. This option works with the Smoothing Algorithm parameter's Polynomial Approximation with Exponential Kernel (PAEK) option only.

  • Checked—The endpoint of an isolated polygon ring will be preserved. This is the default.
  • Unchecked—The endpoint of an isolated polygon ring will not be preserved; it will be smoothed.
Boolean
Handling Topological Errors
(Optional)

Specifies how topological errors (possibly introduced in the process, such as line crossing or overlapping) will be handled.

  • Do not check for topological errorsTopological errors will not be identified. This is the default.
  • Check and flag topological errorsIf topological errors are found, they will be flagged.
  • Resolve topological errorsIf topological errors are found, they will be resolved.
String
Input Barrier Layers
(Optional)

The inputs containing features that will act as barriers for smoothing. The resulting smoothed polygons will not touch or cross barrier features.

Feature Layer

arcpy.cartography.SmoothPolygon(in_features, out_feature_class, algorithm, tolerance, {endpoint_option}, {error_option}, {in_barriers})
NameExplanationData Type
in_features

The polygon features that will be smoothed.

Feature Layer
out_feature_class

The output polygon feature class that will be created.

Feature Class
algorithm

Specifies the smoothing algorithm that will be used.

  • PAEKA smoothed polygon that will not pass through the input polygon vertices will be calculated. This is the default.
  • BEZIER_INTERPOLATIONBezier curves will be fitted between vertices. The resulting polygons pass through the vertices of the input polygons. This algorithm does not require a tolerance. Bezier curves will be approximated in the output.
String
tolerance

The tolerance used by the algorithm parameter's PAEK option. A tolerance must be specified, and it must be greater than zero. You can choose a preferred unit; the default is the feature unit. You must enter a 0 as a placeholder when using the BEZIER_INTERPOLATION option for the algorithm parameter.

Linear Unit
endpoint_option
(Optional)

This is a legacy parameter that is no longer used. It was formerly used to specify whether the endpoint of an isolated polygon ring would be preserved. This parameter is still included in the tool's syntax for compatibility in scripts and models.

Specifies whether the endpoints of isolated polygon rings will be preserved. This option works with the algorithm parameter's PAEK option only.

  • FIXED_ENDPOINTThe endpoint of an isolated polygon ring will be preserved. This is the default.
  • NO_FIXEDThe endpoint of an isolated polygon ring will not be preserved; it will be smoothed.
Boolean
error_option
(Optional)

Specifies how topological errors (possibly introduced in the process, such as line crossing or overlapping) will be handled.

  • NO_CHECKTopological errors will not be identified. This is the default.
  • FLAG_ERRORSIf topological errors are found, they will be flagged.
  • RESOLVE_ERRORSIf topological errors are found, they will be resolved.
String
in_barriers
[in_barriers,...]
(Optional)

The inputs containing features that will act as barriers for smoothing. The resulting smoothed polygons will not touch or cross barrier features.

Feature Layer

Code sample

SmoothPolygon example 1 (Python window)

The following Python window script demonstrates how to use the SmoothPolygon function in immediate mode.

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.cartography.SmoothPolygon("soils.shp", "C:/output/output.gdb/smoothed_soils", "PAEK", 100)
SmoothPolygon example 2 (stand-alone script)

The following stand-alone script demonstrates how to use the SmoothPolygon function.

# Name: SmoothPolygon_Example2.py
# Description: Eliminate small islands before simplifying and smoothing lake boundaries

# Import system modules.
import arcpy

# Set environment settings.
arcpy.env.workspace = "C:/data/Portland.gdb/Hydrography"

# Set local variables.
inLakeFeatures = "lakes"
barriers = "C:/data/Portland.gdb/Structures/buildings"
eliminatedFeatures = "C:/data/PortlandOutput.gdb/lakes_eliminated"
simplifiedFeatures = "C:/data/PortlandOutput.gdb/lakes_simplified"
smoothedFeatures = "C:/data/PortlandOutput.gdb/lakes_smoothed"

# Eliminate small islands in lake polygons.
arcpy.management.EliminatePolygonPart(
    inLakeFeatures, eliminatedFeatures, 100, "OR", 0, "CONTAINED_ONLY")

# Simplify lake polygons.
arcpy.cartography.SimplifyPolygon(
    eliminatedFeatures, simplifiedFeatures, "POINT_REMOVE", 50, 200, 
    "RESOLVE_ERRORS", "KEEP_COLLAPSED_POINTS", barriers)

# Smooth lake polygons.
arcpy.cartography.SmoothPolygon(
    simplifiedFeatures, smoothedFeatures, "PAEK", 100, "", "FLAG_ERRORS",
    barriers)

Licensing information

  • Basic: No
  • Standard: Yes
  • Advanced: Yes

Related topics