Da das Generalisieren von Daten viele sich wiederholende, arbeitsintensive Aufgaben beinhaltet, bietet es sich an, den Vorgang zu automatisieren. Generalisierung ist jedoch vom Kontext und subjektiven Faktoren abhängig, und dies erschwert die Automatisierung. Das menschliche Gehirn kann sehr gut Prioritäten bestimmen und gleichzeitig den Kontext berücksichtigen. Es ist jedoch weitaus schwieriger, einen Computer mit einer Reihe diskontinuierlicher Befehle diese Aufgabe ausführen zu lassen.
Die Geoverarbeitungsumgebung in ArcGIS eignet sich gut zum Erstellen eines Generalisierungs-Frameworks, da sie die Transformation von Daten in einzelnen isolierten Schritten, gesteuert durch daten-, maßstabs- und produktspezifische Variablen, bewältigen kann. Diese Schritte können logisch verknüpft oder sogar in Skripten oder Modellen in Schleifen ausgeführt werden, um einen komplexen Workflow zu erzeugen. Dieser kann auf einen Datenbereich angewendet werden, um Datenbanken mit mehreren Maßstäben für die Druck- oder Bildschirmausgabe zu erstellen. Aufgaben können einfach sequenziell für verschiedene Gruppen von Features oder mit unterschiedlichen, auf vielfältige Weise kombinierten Parametern, wiederholt werden. Es lassen sich gesamte Workflows automatisieren. Sie können auch in kleinere Teile mit manueller Bearbeitung unterteilt werden, oder zwischen ihnen kann eine Überprüfung erfolgen.
Zusammenfassen von Generalisierungsaufgaben zu kartografischen Workflows
Bevor eine Karte mit einem kleineren Maßstab als der ursprünglich für die Daten vorgesehene Maßstab erstellt werden kann, müssen einige Festlegungen getroffen werden: der gewünschte Maßstab, die Anzeigespezifikationen, einschließlich der Symbolisierung, und der Zweck der Karte. Anschließend werden Vorgänge ausgeführt, um die Gesamtzahl der Features zu verringern, ohne die Konnektivität oder Beschaffenheit des Datasets zu beeinflussen. Dann wird durch das Entfernen von Stützpunkten oder anderer Feature-Details die Komplexität einzelner Features verringert. Dies kann beinhalten, dass Feature-Attribute durch das Zusammenfassen ähnlicher Feature-Unterkategorien vereinfacht werden, um sie mit demselben Symbol anzuzeigen. Wenn die Kartenerstellung beginnt und die Daten mit ihrer endgültigen Symbolisierung im endgültigen Maßstab angezeigt werden, können grafische Konflikte erkannt und gelöst werden.
Im folgenden Flussdiagramm werden eine vereinfachte Version des Generalisierungs-Workflows und einige wichtige Werkzeuge aus der Toolbox "Cartography" gezeigt, die zum Generalisieren von Daten für die Anzeige in einem kleineren Maßstab genutzt werden können.
Es ist wichtig zu wissen, dass die meisten Geoverarbeitungswerkzeuge i. d. R. neue Daten als Ausgabe generieren, die dann als Eingabe für anschließend genutzte Werkzeuge verwendet werden kann. Der Workflow von Kartografen ist hingegen dadurch gekennzeichnet, dass Feature-Layers, die bereits in einem Kartendokument festgelegt sind, schrittweise verbessert werden. Da Symbolisierung, Layer-Eigenschaften und Maskierungsbeziehungen bereits definiert sind, empfiehlt es sich, Eingabe-Layer beim Ausführen von Konfliktlösungs- und Generalisierungsvorgängen zu ändern, damit diese Informationen nicht verloren gehen. Aus diesem Grund werden mit einigen der Werkzeuge in der Toolbox "Cartography" Eingabedaten in symbolisierten Layern geändert, statt Daten zu erstellen. Dieser Ansatz ist in Verbindung mit kartografischen Repräsentationen besonders einfach umzusetzen und effektiv.
Verwenden von Repräsentationen zur Unterstützung der Generalisierung
Repräsentationen sind eine Eigenschaft von Geodatabase-Feature-Classes, die eine alternative Anzeige der Feature-Geometrie unterstützen. Feature-Classes können mehrere Repräsentationen zugeordnet sein, sodass sie mehrere Anzeigen derselben Daten unterstützen. Repräsentationen unterstützen die Generalisierung, jedoch ist zu beachten, dass für einen bestimmten Maßstab (oder einen kleinen Bereich von Maßstäben) eine einzelne Feature-Class erstellt wird, unabhängig von der Anzahl der dem Maßstab zugeordneten Repräsentationen. Möglicherweise wird aus der Tatsache, dass Repräsentationen mehrere Anzeigen einer Gruppe von Features unterstützen, geschlossen, dass mithilfe von Repräsentationen dieselben Features mit unterschiedlichen Maßstäben gezeichnet werden können. Kleinere Änderungen des Maßstabs lassen sich problemlos durchführen, indem an den Formen einiger Repräsentations-Features kleinere Änderungen vorgenommen oder einige Formen sogar ausgeblendet werden. Jedoch besteht auch mit Repräsentationen weiterhin eine 1:1-Beziehung. Für jedes Feature können eine oder mehrere alternative Anzeigen vorhanden sein, Features können jedoch nicht zu neuen Features kombiniert werden. Beispielsweise kann eine Gruppe einzelner Gebäude nicht allein mithilfe der Anzeige von Repräsentationen als bebaute Fläche modelliert werden. Für die echte Unterstützung von Karten mit mehreren Maßstäben müssen Features entsprechend verarbeitet werden, um eine sinnvolle Dichte und Detailgenauigkeit der Features sicherzustellen und Symbolisierungskonflikte zu vermeiden. Die Werkzeuge in den Toolsets Generalisierung und Grafikkonflikte können Sie dabei unterstützen.
Weitere Informationen zu Konfliktlösung und Generalisierung
Für Repräsentationen kann eine von zwei Einstellungen des Bearbeitungsverhaltens festgelegt werden. Die Bearbeitungseinstellung ist eine Eigenschaft einer Repräsentation, und sie wird beim Erstellen einer Repräsentation für eine Feature-Class festgelegt.
- Geometrieänderung als Repräsentations-Override speichern: Dies ist die Standardeinstellung. Mit ihr werden Änderungen an der Geometrie von Features in einem eigenen BLOB-Feld der Feature-Class-Attributtabelle, auf die nur die aktuelle Repräsentation Zugriff hat, gespeichert. Die Grundgeometrie des im Shape-Feld gespeicherten Features bleibt unverändert.
- Geometrie von zugrunde liegendem Feature ändern: Mit dieser Einstellung wird das Shape-Feld der Feature-Class durch Änderungen der Geometrie von Features geändert, und dies wirkt sich auf andere Repräsentationen der Feature-Class aus.
Mit einigen Generalisierungswerkzeugen werden die Eingabe-Layer geändert. Es werden keine neuen Datasets erstellt. Dies wird als abgeleitete In/Out-Daten bezeichnet. Es wird dringend empfohlen, für Layer, die auf Repräsentationen verweisen, die Einstellung Geometrieänderung als Repräsentations-Override speichern zu verwenden, insbesondere, wenn Sie mit den Grafikkonflikt-Werkzeugen (Straßenkonflikte lösen, Versatz propagieren oder Gebäudekonflikte lösen) arbeiten, da durch diese Werkzeuge die Geometrie der Eingabe-Layer geändert wird. Mit dieser Einstellung werden die mit diesen Werkzeugen an Features vorgenommenen Änderungen als Overrides in der Repräsentation gespeichert, und die ursprüngliche Geometrie bleibt unverändert. Diese Vorgehensweise bietet den Vorteil, dass die ursprünglichen Formen von Features unmittelbar verfügbar sind (im Shape-Feld), um sie visuell zu vergleichen oder sogar wiederherzustellen, wenn die Ergebnisse ungeeignet sind.
Repräsentationen sind auch beim Generalisieren von Daten eines recht großen Bereichs von Vorteil. Idealerweise sollten Generalisierungsprozesse starke Verringerungen des Maßstabs direkt bewältigen können, jedoch ist i. d. R. ein Zwischenmaßstab erforderlich. Durch die Aufbereitung von Daten mit Zwischenmaßstäben für die Überbrückung können Ungenauigkeiten verstärkt werden, da aufgrund des Ausblendens von Detaildaten unterschiedliche Entscheidungen getroffen werden müssen. Betrachten Sie beispielsweise einen Fall, in dem auf Feature A ein Versatz angewendet wird, um Feature B auf einer Karte mit großem Maßstab darstellen zu können. Feature B wird auf einer Karte mit kleinerem Maßstab nicht mehr angezeigt, es lässt ich jedoch nicht leicht feststellen, dass auf Feature A ein Versatz angewendet wurde oder wo seine ursprüngliche Position war. In diesem Fall wird eine mittlerweile nicht mehr erforderliche Ungenauigkeit an den nächstkleineren Maßstab weitergegeben. In dieser Situation sind Repräsentations-Overrides hilfreich, da Sie die Anfangsposition eines Features schnell und einfach bestimmen und ggf. wiederherstellen können.
Verketten von Generalisierungswerkzeugen in ModelBuilder
Generalisierungswerkzeuge nutzen Eingaben mit mehreren Werten, d. h. eine Liste mit einer oder mehreren Feature-Classes. Viele Geoverarbeitungswerkzeuge akzeptieren mehrere Werte (z. B. das Werkzeug Vereinigen (Union)), Geoverarbeitungswerkzeuge zeichnen sich jedoch dadurch aus, dass sie auch mehrere Werte ausgeben. Dies erfordert die Kenntnis einiger ModelBuilder-Verfahren, um das gewünschte Modell zu erstellen. Diese Verfahren werden nachfolgend erläutert.
Verketten von Werkzeugen mit mehreren Eingaben und Ausgaben
Die Werkzeuge Straßennetzwerk ausdünnen, Straßenkonflikte lösen und Gebäudekonflikte lösen geben mehrere Werte aus. Deshalb kann die Ausgabe dieser Werkzeuge nur von Werkzeugen direkt verwendet werden, die Eingaben mit mehreren Werten akzeptieren. Wenn beispielsweise im Werkzeug Straßennetzwerk ausdünnen drei Layer als Eingaben verwendet werden und Sie diese drei Layer nach dem Ausdünnen als Eingaben für das Werkzeug Straßenkonflikte lösen verwenden möchten, können Sie die Ausgabe des Werkzeugs Straßennetzwerk ausdünnen direkt mit dem Werkzeug Straßenkonflikte lösen verketten.
Mit dem Werkzeug Werte erfassen können Sie einer Ausgabe mehrerer Werte weitere Layer hinzufügen. Im folgenden Beispiel werden der Ausgabe von Straßennetzwerk ausdünnen zwei weitere Layer hinzugefügt, um die Eingabe von Straßenkonflikte lösen zu erzeugen.
Verketten mehrerer Ausgaben zu einer einzelnen Eingabe
Verwenden Sie das Werkzeug Anhängen zum Vereinigen mehrerer Feature-Classes, um Werkzeuge, deren Ausgabe mehrere Werte umfasst, mit einem Werkzeug zu verketten, das eine einzelne Eingabe akzeptiert. Ein Beispiel für diesen Workflow ist das Anhängen mehrerer Straßen-Eingabe-Layer, die mit dem Werkzeug Straßennetzwerk ausdünnen verarbeitet wurden, um sie als Eingabe des Werkzeugs Getrennte Fahrbahnen zusammenführen, das nur eine einzelne Eingabe akzeptiert, zu verwenden.
Einzelnes Verketten mehrerer Eingaben
In manchen Fällen empfiehlt es sich, mehrere Ausgaben eines Werkzeugs einzeln an ein anderes Werkzeug zu übergeben. Dies ist der Fall, wenn nicht alle Ausgaben des ersten Werkzeugs im zweiten Werkzeug verarbeitet werden sollen oder wenn Sie für jede Eingabe des zweiten Werkzeugs bestimmte Parameter festlegen möchten. Beispielsweise lässt sich mit dem Werkzeug Gebäudekonflikte lösen vollständig steuern, wie jeder Eingabe-Layer als Barriere definiert wird. Verwenden Sie in solchen Fällen für beide Werkzeuge denselben Satz von Layern als Eingabe, legen Sie jedoch die Ausgabe des ersten Werkzeugs als Vorbedingung für das zweite Werkzeug fest, um die richtige Verarbeitungsreihenfolge zu erzwingen, wie unten veranschaulicht. Dieser Ansatz lässt sich nur verwenden, wenn das erste Werkzeug, z. B. das Werkzeug Straßenkonflikte lösen, die Eingabe-Layer ändert, statt neue Ausgabe-Layer zu erstellen.
Weitere Informationen zum Verwenden von Vorbedingungen in ModelBuilder
Im folgenden Beispiel werden die drei Verkehrswesen-Layer als Eingaben für beide Werkzeuge verwendet. Dies ist möglich, da diese Layer durch das Werkzeug Straßenkonflikte lösen geändert werden. Es werden keine neuen Ausgabe-Feature-Classes erstellt. Die Ausgabe des Werkzeugs Straßenkonflikte lösen wird als Vorbedingung für die Verarbeitung durch das Werkzeug Gebäudekonflikte lösen verwendet. Dies stellt sicher, dass die Ausführung des Werkzeugs Straßenkonflikte lösen abgeschlossen ist, bevor das Werkzeug Gebäudekonflikte lösen gestartet wird.
Symbolisierte Ausgaben
Um Werkzeuge zu verketten, die nur symbolisierte Layer akzeptieren, müssen Sie mit dem Werkzeug Feature-Layer erstellen und dem Werkzeug Symbolisierung aus Layer anwenden einen Ausgabe-Layer zum Verketten in ModelBuilder sowie in Skriptumgebungen erstellen.
Ein Python-Beispielskript zum Vorbereiten von Daten für die Anzeige mit kleinerem Maßstab
Beispiel-Workflow der Toolbox "Cartography" (eigenständiges Skript)
Dieses eigenständige Skript steuert einen Beispiel-Workflow mit einer Reihe von Werkzeugen aus der Toolbox "Cartography", um Daten mit einem Maßstab von 1:25.000 zu generalisieren und grafische Konflikte für die Anzeige mit einem Maßstab von 1:50:000 zu lösen.
# Name: cartography_workflow_script.py
# Description: Process features in order to resolve graphic conflicts when
# changing scales from 25K to 50K.
#
# Tools used = Aggregate Polygons, Align Marker To Stroke Or Fill, Apply
# Symbology From Layer, Create Overpass, Create Underpass, Calculate
# Line Caps, Eliminate Polygon Part, Make Feature Layer, Merge
# Divided Roads, Propagate Displacement, Resolve Building Conflicts
# Resolve Road Conflicts, Select, Select Layer By Attribute, Set
# Representation Control Point At Intersect, Set Representation
# Control Point By Angle, Simplify Building,Simplify Line, Simplify
# Polygon, Smooth Line, Smooth Polygon, Thin Road Network
# Minimum ArcGIS version = 10
# Author: ESRI
#
# The geodatabase used in this workflow is assumed to be in c:\data
# - please replace this path to your machine specific folder.
# Import system modules
import arcpy, sys, os
from arcpy import env
# Start the processing
env.workspace = "C:/data/cartography.gdb"
# The data was captured at a scale of 1:24000, and this workflow will produce
# data appropriate for a scale of 1:50000.
# Most of the geoprocessing tools in this workflow require a reference scale
env.referenceScale = "50000"
env.cartographicCoordinateSystem = ""
###############
# HYDROGRAPHY #
###############
# A subset of linear features (rivers/streams) will be processed
# for simplification and smoothing
# A subset of polygonal features (reservoirs/lakes) will be procesed
# for simplification and smoothing
# The workspace is set to the hydrography feature dataset
env.workspace = "C:/data/cartography.gdb/hydrography"
# Linear hydrographic features
arcpy.MakeFeatureLayer_management("streamnetwork", "streamlayer", "", "", "")
# A selection is made for features which are rivers/streams
arcpy.SelectLayerByAttribute_management("streamlayer", "NEW_SELECTION",
'"FCsubtype" = 1')
# In order to reduce the complexity from the streams, vertices are removed using
# the Simplify Line tool
arcpy.SimplifyLine_cartography("streamlayer", "streams_simplified",
"BEND_SIMPLIFY", "100 meters", "RESOLVE_ERRORS")
# In order to reduce the amount or severity of sharp angles, Smooth Line is used
# to improve the shape of the streams
arcpy.SmoothLine_cartography("streams_simplified", "streams",
"BEZIER_INTERPOLATION", "#", "0", 'FLAG_ERRORS')
# Some of the processed features are intermittent rivers or streams and are
# symbolized as dashed lines. When symbolized with representations, the dashes
# can be centered around corners to improve the look of the features. The corners
# are identified as vertices which will be flagged as representation control
# points. Representation symbology is applied to a feature layer in order to be
# processed for control points.
# To place dashes at corners, representation symbology needs to be used by
# the feature layer.
arcpy.MakeFeatureLayer_management("streams", "streamslayer", "", "", "")
# Representation symbology is applied to a feature layer in order to be
# processed for control points.
arcpy.ApplySymbologyFromLayer_management("streamslayer",
"C:/data/stream_symbols.lyr")
# The dashes in the stream symbol will be placed at control points created
# anywhere an angle is less than (or equal to) 130 degrees.
arcpy.SetRepresentationControlPointByAngle_cartography("streamslayer", "130")
# Polygonal hydrographic features
# A selection is made to create a new feature class for reservoirs.
arcpy.Select_analysis("openwater", "reservoirs", '"FCsubtype" = 4')
# A selection is made to create a separate feature class for processing in order
# to generate lakes.
arcpy.Select_analysis("openwater", "water_select", '"FCsubtype" <> 4')
# In order to reduce the complexity from the lakes, vertices are removed using
# the Simplify Line tool.
arcpy.SimplifyPolygon_cartography("water_select", "water_simplified",
"BEND_SIMPLIFY", "100 meters", "0",
"RESOLVE_ERRORS")
# In order to reduce the amount (or severity) of sharp angles, Smooth Line is
# used to improve the shape of the lakes.
arcpy.SmoothPolygon_cartography("water_simplified", "lakes",
"BEZIER_INTERPOLATION", "0", "", "FLAG_ERRORS")
#############
# RAILROADS #
#############
# Set the workspace to the transportation feature dataset
env.workspace = "C:/data/cartography.gdb/transportation"
# In order to reduce the complexity from the railroads, vertices are removed
# using the Simplify Line tool.
arcpy.SimplifyLine_cartography("railnetwork", "rail_simplified",
"BEND_SIMPLIFY", "100 meters", "RESOLVE_ERRORS")
# The Merge Divided Roads tool requires symbolized features, so pre-made
# symbology is provided to the feature layer.
arcpy.MakeFeatureLayer_management("rail_simplified", "railwaylayer", "", "", "")
# In this workflow, the symbology being applied is Representations
arcpy.ApplySymbologyFromLayer_management("railwaylayer",
"C:/data/rail_symbols.lyr")
# The Merge Divided Roads tool will be used to generates single line railroad
# features in place of multiple divided railroad lanes.
arcpy.MergeDividedRoads_cartography("railwaylayer", "level", "25 Meters",
"railways")
# To place markers at corners, representation symbology needs to be used by
# the feature layer.
arcpy.MakeFeatureLayer_management("railways", "railwayslayer", "", "", "")
# Representation symbology is applied to a feature layer in order to be
# processed for control points.
arcpy.ApplySymbologyFromLayer_management("railwayslayer",
"C:/data/rail_symbols.lyr")
# The tick marks in railroad symbol (markers) will be placed at control points
# created anywhere an angle is less than (or equal to) 130 degrees.
arcpy.SetRepresentationControlPointByAngle_cartography("railwayslayer", "130")
###########
# LANDUSE #
###########
# Set the workspace to the landuse feature dataset
env.workspace = "C:/data/cartography.gdb/landuse"
# The polygons which represent landcover have holes in them where buildings are
# located. The holes need to be removed so they will not appear after buildings
# have moved. In this example, any hole which is less than 50 percent of the
# feature's area will be removed.
arcpy.EliminatePolygonPart_management("cultural", "urban_area", "PERCENT", "0",
"50", "CONTAINED_ONLY")
##############
# BOUNDARIES #
##############
# The boundary features have dashed outlines which are not in phase with each
# other on shared edges between features. To make the dashed outlines in phase
# with each other, representation control points are added wherever features
# share coincident vertices. The control points are then added to the features
# symbolized with Representations.
arcpy.SetRepresentationControlPointAtIntersect_cartography
("C:/data/boundaries.lyr", "C:/data/boundaries.lyr")
#########
# ROADS #
#########
# Set the workspace to the transportation feature dataset
env.workspace = "C:/data/cartography.gdb/transportation"
# Linear features
# Roads which are dead ends (or cul-de-sacs) should have their Line ending
# property set to BUTT.
arcpy.CalculateLineCaps_cartography("C:/data/road_symbols.lyr", "BUTT",
"CASED_LINE_DANGLE")
# Thin Road Network identifies a subset of road segments that can be removed from
# the display to create a simplified road network that retains the connectivity
# and general character of the input collection. Features are flagged for removal
# when their attribute value in the "invisible" field equals one. A layer
# definition query can be used to display the resulting simplified feature class.
arcpy.ThinRoadNetwork_cartography("roadnetwork", "500 meters", "invisible",
"level")
# The Merge Divided Roads tool will be used to generates single line road
# features in place of multiple divided road lanes.
arcpy.MergeDividedRoads_cartography("C:/data/road_symbols.lyr", "level",
"25 meters", "roads")
# The Resolve Road Conflicts tool requires symbolized features, so pre-made
# symbology is provided to the feature layer.
arcpy.MakeFeatureLayer_management("roads", "roadslayer", "", "", "")
# In this workflow, the symbology being applied is Representations
arcpy.ApplySymbologyFromLayer_management("roadslayer",
"C:/data/road_symbols.lyr")
# The Resolve Road Conflicts tool does not produce output road layers but instead
# alters the source feature classes of the input road layers. The Resolve Road
# Conflicts tool adjusts line features to ensure that they are graphically
# distinguishable when symbolized at output scale.
arcpy.ResolveRoadConflicts_cartography
("roadslayer", "level", "C:/data/cartography.gdb/buildings/displacement")
# The dashes in the road symbols will be placed at control points created
# anywhere an angle is less than (or equal to) 130 degrees.
arcpy.SetRepresentationControlPointByAngle_cartography("roadslayer", "130")
# Create bridges
# The Create Overpass tool will create a bridge for the roads and a mask for the
# streams wherever a road goes over a steam.
arcpy.CreateOverpass_cartography("roadslayer", "streamslayer", "2 points",
"1 points", "over_mask_fc", "over_mask_rc",
'"BridgeCategory" = 1', "bridges",
"ANGLED", "1 points")
# Create tunnels
# The Create Overpass tool will create a tunnel for the railroads and a mask for
# the railroads wherever a railroad goes under a road.
arcpy.CreateUnderpass_cartography("roadslayer", "railwayslayer", "2 points",
"1 points", "under_mask_fc", "under_mask_rc",
'"RelationshipToSurface" = 3', "tunnels",
"ANGLED", "1 points")
#############
# BUILDINGS #
#############
# Set the workspace to the buildings feature dataset
env.workspace = "C:/data/cartography.gdb/buildings"
# Point features
# When the road features were adjusted by the Resolve Road Conflicts tool, the
# spatial relationship with nearby buildings was affected. A displacement feature
# class was created by that tool in order to record the change applied to the
# roads. This information can be used by the Propagate Displacement tool to apply
# the same change to the point buildings.
# The road displacement is propagated to the point buildings
arcpy.PropagateDisplacement_cartography("point_bldg", "displacement", "AUTO")
# Point buildings will be rotated against nearby linear roads
# The Align Markers To Stroke Or Fill tool can do this with features symbolized
# with Representations.
# A feature layer is made for point buildings
arcpy.MakeFeatureLayer_management("point_bldg", "bldglayer", "", "", "")
# The symbology is switched to Representations
arcpy.ApplySymbologyFromLayer_management("bldglayer", "C:/data/bldg_symbols.lyr")
# The Align Marker to Stroke Or Fill tool is used to align point buildings to
# face road features within 5 points of the buildings
arcpy.AlignMarkerToStrokeOrFill_cartography("bldglayer", "roadslayer",
"5 points", "PERPENDICULAR")
# Polgyonal features
# When the road features were adjusted by the Resolve Road Conflicts tool, the
# spatial relationship with nearby buildings was affected. A displacement
# feature class was created by that tool in order to record the change applied
# to the roads. This information can be used by the Propagate Displacement tool
# to apply the same change to the polygonal buildings.
# The road displacement is propagated to polygon buildings
arcpy.PropagateDisplacement_cartography("footprints", "displacement", "SOLID")
# A selection is made to create a feature class with buildings larger than
# a minimum size
# The small buildings are not appropriate at the new map scale of 1:50,000
arcpy.Select_analysis("footprints", "buildings_select", '"Shape_Area" > 100')
# There is a need to create better spacing between polygon buildings and combine
# them when they share edges or are very close together
# The Aggregate Polygons tool is used to accomplish this task
arcpy.AggregatePolygons_cartography("buildings_select", "large_buildings",
"20 meters", "", "", "ORTHOGONAL")
# In order to reduce the complexity of the buildings, indentations, extensions
# and extra vertices are removed using the Simplify Building tool.
# Buildings require less visible detail at the new scale of 1:50,000.
arcpy.SimplifyBuilding_cartography("large_buildings", "area_bldg", "20 meters",
"0 unknown", "CHECK_CONFLICTS")
# All buildings require further improvements to achieve better spacing between
# themselves and other nearby features. At the new scale of 1:50,000 the
# symbolized buildings may overlap other features and create a visually congested
# map. To improve the visual congestion, the Resolve Building Conflicts tool is
# used. Buildings are improved in the context of their surrounding features.
# These features are considered barriers to buildings. The Resolve Building
# Conflicts tool requires symbolized features and has several options available
# to improve the buildings. Options include: moving or resizing the buildings,
# orienting or snapping the buildings to nearby features, as well as making the
# buildings invisible. Buildings from multiple feature classes can be used as
# inputs to the tool. Barriers from multiple feature classes can be used as
# inputs to the tool. For each barrier, the option is available to specify a snap
# or orient action for the buildings when they are within a specified distance.
# For each barrier, the option is available to specify a minimum distance for
# buildings to maintain between them.
# A feature layer is made for the polygon buildings
arcpy.MakeFeatureLayer_management("area_bldg", "footprintlayer", "", "", "")
# The symbology is switched to Representations
arcpy.ApplySymbologyFromLayer_management("footprintlayer",
"C:/data/footprint_symbols.lyr")
# The Resolve Building Conflicts tool is run with point and polygon buildings
# against roads, streams and railroads. The buildings will be moved away from
# streams and railroads until they reach a minimum distance. The buildings
# within a maximum distance from the roads will be rotated. Further movement
# and rotation may still be required by the tool in order to resolve any
# remaining graphic conflict.
arcpy.ResolveBuildingConflicts_cartography("footprintlayer; bldglayer", "invisible",
"'roadslayer' 'true' '5 meters';'streamslayer' 'false' '5 meters';'railwayslayer' 'false' '10 meters'",
"10 meters", "20 meters", "level")