Resolve Building Conflicts (Cartography)
Summary
Resolves symbol conflicts among buildings and with respect to linear barrier features by moving or hiding buildings.
Learn more about how Resolve Building Conflicts works
This tool does not produce output layers but instead alters the source feature classes of the input layers. If the input layers are drawn with a representation (whose editing behavior is set to store shape overrides), the modified features are stored as shape overrides in the representation. If the layer is not drawn with a representation, the geometry of the input features is modified. Using representations is recommended when working with the conflict resolution tools. That way, if the results are not acceptable, or to rerun the tool with different parameters, simply remove the overrides using the Remove Override tool. It is strongly suggested that you make a copy of your input features if you are not using representations whose editing behavior is set to store shape overrides.
A warning is raised if the input features are not in a projected coordinate system. This tool relies on linear distance units, which will create unexpected results in an unprojected coordinate system. It is strongly suggested that you run this tool on data in a projected coordinate system to ensure valid results. An error is raised and the tool will not process if the coordinate system is missing or unknown.
Illustration
Usage
-
This tool operates by assessing graphic conflicts of symbolized features. The symbology extent and the reference scale are considered in conjunction with one another. Run this tool only after you have finalized the appearance of your symbols and ensure that the reference scale corresponds to the final intended output scale.
-
The Invisibility Field must be present and named the same for all input feature classes. Features that should remain visible are assigned a value of 0; those that should be removed from the display are assigned a value of 1. Use a layer definition query or a selection to display the resulting simplified collection (that is, invisibility <> 1). You can use multiple invisibility fields to store different results—corresponding to different output scales—on the same feature class.
Before conflicts are assessed, polygonal buildings are enlarged to a minimum size specified by the Minimum Allowable Building Size parameter. Minimum size is measured as a linear distance along the shortest side of a rotated bounding box best fit to the feature. To review the final size of buildings in the output results, add a double or float field to any of the input building feature classes called RBC_SIZE. As the tool processes, this field will be updated with the shortest side of a rotated bounding box around each feature.
-
The Hierarchy Field parameter is optional. If it is not specified, buildings will be assigned a relative importance based on the perimeter of the building and proximity to barriers. Larger buildings closer to more than one barrier will be assessed as more significant than smaller buildings relatively far from a barrier. You can use a partially populated Hierarchy field where only the significant buildings are attributed with a hierarchical value and all other features (with a NULL hierarchy value) will have their relative significance internally calculated.
-
If the Hierarchy Field parameter is used, buildings can be forced to stay visible by assigning them a hierarchy value of 0 (zero). They will not be masked by the tool. A building with hierarchy of zero is considered locally important, so nearby buildings may be compromised more than they would if that building was not forced to stay visible. Hierarchy zero buildings may still be transformed (moved, rotated, or resized) in order to resolve conflicts and match other required parameters.
Any buildings that are geometrically in conflict with barriers (that is, the actual geometry—not just symbology—of the building overlaps that of a barrier feature such as a road) will not be moved off of the barrier feature. These buildings may be flagged for masking in the course of conflict resolution processing, but they won't be moved. A conflict will remain.
If the symbology of the barrier features is not symmetrically distributed across the geometry—that is, the symbol is thicker on one side of the line than the other—a larger building-to-barrier gap may appear on the side of the barrier with the thinner symbology.
Processing large datasets or a number of barrier layers together may exceed memory limitations. In this case, consider processing input building data by partition by identifying a relevant polygon feature class in the Partition Features environment setting. Portions of the building data, defined by partition boundaries, will be processed sequentially. The resulting layers will be seamless and consistent at partition edges. See How_Resolve_Building_Conflicts_works for more information about running this tool with partitioning.
Syntax
Parameter | Explanation | Data Type |
in_buildings [in_buildings,...] |
The input layers containing building features that may be in conflict, or smaller than allowable size. Buildings can be either points or polygons. Buildings will be modified to resolve conflicts with other buildings and with barrier features. | Layer |
invisibility_field |
The field that stores the invisibility values that can be used to remove some buildings from display in order to resolve symbol conflicts. Buildings with a value of 1 should be removed from display; those with a value of zero should remain. Use a definition query on the layer to display visible buildings only. No features are deleted. | String |
in_barriers [[Layer, Boolean, Linear Unit],...] |
The layers containing the linear or polygon features that are conflict barriers for input building features. Buildings will be modified to resolve conflicts between buildings and barriers. Orient value is Boolean, specifying whether buildings should be oriented to the barrier layer. Gap specifies the distance that buildings should move toward or away from the barrier layer. A unit must be entered with the value.
Note: If no unit is entered with the Gap value (that is, 10 instead of 10 meters), the linear unit from the input feature's coordinate system will be used. | Value Table |
building_gap |
The minimum allowable distance between symbolized buildings at scale. Buildings that are closer together will be displaced or hidden to enforce this distance. The minimum allowable distance is set relative to the reference scale (that is, 15 meters at 1:50,000 scale). The value is 0 if reference scale is not set. | Linear unit |
minimum_size |
The minimum allowable size of the shortest side of a rotated best-fit bounding box around the symbolized building feature drawn at the reference scale. Buildings with a bounding box side smaller than this value will be enlarged to meet it. Resizing may happen nonproportionally resulting in a change to building morphology. | Linear unit |
hierarchy_field (Optional) |
The field that contains hierarchical ranking of feature importance, where 1 is very important and larger integers reflect decreasing importance. A value of 0 (zero) forced the building to retain visibility, although it may be moved somewhat to resolve conflicts. If this parameter is not used, feature importance will be assessed by the tool based on perimeter length and proximity to barrier features. | String |
Code Sample
The following Python window script demonstrates how to use the ResolveBuildingConflicts tool in immediate mode.
import arcpy
from arcpy import env
env.workspace = "C:/data"
env.referenceScale = "50000"
arcpy.ResolveBuildingConflicts("C:/data/footprints.lyr; \
C:/data/bldg_points.lyr",
"invisible",
"'C:/data/roads.lyr' \
'true' \
'5 Meters'; \
'C:/data/trails.lyr' \
'false' \
'10 Meters'; \
'C:/data/streams.lyr' \
'false' \
'5 Meters'",
"10 meters",
"15 meters",
"bldg_hierarchy")
This stand-alone script shows an example of using the ResolveBuildingConflicts tool.
# Name: ResolveBuildingConflicts_standalone_script.py
# Description: Resolves the symbology conflicts between
# buildings and nearby barriers,
# in this case - roads
# Import system modules
import arcpy
from arcpy import env
# Set environment settings
env.workspace = "C:/data"
env.referenceScale = "50000"
# Set local variables
in_buildings = "C:/data/footprints.lyr;C:/data/bldg_pts.lyr"
invisibility_field = "invisible"
in_barriers = "'C:/data/roads.lyr' 'true' '5 Meters';\
'C:/data/trails.lyr' 'false' '10 Meters';\
'C:/data/streams.lyr' 'false' '5 Meters'"
building_gap = "10 meters"
minimum_size = "15 meters"
hierarchy_field = "bldg_hierarchy"
# Execute Resolve Building Conflicts
arcpy.ResolveBuildingConflicts(in_buildings,
invisibility_field,
in_barriers,
building_gap,
minimum_size,
hierarchy_field)