Smooth Polygon (Cartography)
Smooths sharp angles in polygon outlines to improve aesthetic or cartographic quality.
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.
The polygon features to be smoothed.
The output polygon feature class to be created.
Specifies the smoothing algorithm.
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.
Specifies whether or not to preserve the endpoints for isolated polygon rings. This option works with the PAEK algorithm only.
Specifies how the topological errors (possibly introduced in the process, such as line crossing or overlapping) will be handled.
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 # Author: ESRI # 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")