Smooth Polygon (Cartography)
Summary
Smooths sharp angles in polygon outlines to improve aesthetic or cartographic quality.
Illustration
Usage
-
There are two smoothing methods to choose from:
- The PAEK (Polynomial Approximation with Exponential Kernel) method 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.
- The BEZIER_INTERPOLATION method smooths polygons without using a tolerance by creating Bezier curves to match the input lines. If the output is a shapefile, the Bezier curves will be approximated, since true Bezier curves cannot be stored in shapefiles.
-
Smoothing may introduce topological errors such as polygon outline crossings. Use the FLAG_ERRORS option in the Handle Topological Errors parameter to identify these errors. Two fields will be added—InPoly_FID and SmoPlyFlag—to contain input feature IDs and topological errors. Values of 1 in the SmoPlyFlag field indicate a topology error; 0 (zero) indicates no error. The InPoly_FID field links the output polygons to their input polygons. The FLAG_ERRORS option cannot be used within an edit session.
-
Invalid (self-intersecting) geometry may be created during the smoothing process and will be repaired but not improved. For example, if a polygon self-crosses it will become a multipart polygon but will still appear self-crossing.
Syntax
Parameter | Explanation | Data Type |
in_features |
The polygon features to be smoothed. | Feature Layer |
out_feature_class |
The output polygon feature class to be created. | Feature Class |
algorithm |
Specifies the smoothing algorithm.
| String |
tolerance |
Sets a tolerance used by the PAEK algorithm. A tolerance must be specified, and it must be greater than zero. You can specify a preferred unit; the default is the feature unit. You must enter a 0 as a placeholder when using the BEZIER_INTERPOLATION smoothing algorithm. | Linear unit |
endpoint_option (Optional) |
Specifies whether or not to preserve the endpoints for isolated polygon rings. This option works with the PAEK algorithm only.
| Boolean |
error_option (Optional) |
Specifies how the topological errors (possibly introduced in the process, such as line crossing or overlapping) will be handled.
| String |
Code Sample
The following Python window script demonstrates how to use the SmoothPolygon tool in immediate mode.
import arcpy
from arcpy import env
import arcpy.cartography as CA
env.workspace = "C:/data"
CA.SmoothPolygon("soils.shp", "C:/output/output.gdb/smoothed_soils", "PAEK", 100)
The following stand-alone script demonstrates how to use the SmoothPolygon tool.
# Name: SmoothPolygon_Example2.py
# Description: Eliminate small islands before simplifying and smoothing lake boundaries
# Import system modules
import arcpy
from arcpy import env
import arcpy.cartography as CA
import arcpy.management as DM
# Set environment settings
env.workspace = "C:/data/Portland.gdb/Hydrography"
# Set local variables
inLakeFeatures = "lakes"
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.
DM.EliminatePolygonPart(inLakeFeatures, eliminatedFeatures, 100, "OR", 0, "CONTAINED_ONLY")
# Simplify lake polygons.
CA.SimplifyPolygon(eliminatedFeatures, simplifiedFeatures, "POINT_REMOVE", 50, 200, "RESOLVE_ERRORS", "KEEP_COLLAPSED_POINTS", "CHECK")
# Smooth lake polygons.
CA.SmoothPolygon(simplifiedFeatures, smoothedFeatures, "PAEK", 100, "", "FLAG_ERRORS")