Сводка
Согласует контуры зданий с общими границами.
Использование
Этот инструмент использует алгоритм сжатия полилиний для исправления искажений в полигонах контуров зданий, созданных во время рабочего процесса извлечения объектов, который может производить нежелательные артефакты.
При согласовании контуров зданий, полученных из растровых данных, допуск упорядочения должен быть больше разрешения исходного растра.
У объектов со смежными границами для создания упорядоченной границы, не накладывающейся на другой объект, должно быть одинаковое значение атрибута. Если общего атрибута нет, выполните следующие действия:
- Воспользуйтесь инструментомБуфер с буферным расстоянием, соответствующем нужному допуску упорядочения.
- Обработайте полигоны буферов инструментом Объединение для создания из перекрывающихся полигонов одного объекта.
- Воспользуйтесь инструментом Пространственное соединение для добавления уникального ID объединенных полигонов ко входным для инструмента упорядочения объектам.
- Запустите инструмент Упорядочить контуры зданий с указанием поля уникального ID в параметре Поле группировки (параметр group в Python).
Используйте метод Любые углы для входных объектов с острыми и обратными углами, либо когда угол между двумя сегментами не попадает интервал 45° между 90° и 180°.
Если с указанными параметрами для входных данных не получаются упорядоченные полигоны, в выходные данные копируются исходные объекты. Значение, указанное в поле STATUS будет показывать, был ли объект упорядочен следующим образом::
- 0 – Упорядоченный объект
- 1 – Исходный объект
Синтаксис
arcpy.3d.RegularizeAdjacentBuildingFootprint(in_features, group, out_feature_class, method, tolerance, precision, angular_limit)
Parameter | Объяснение | Тип данных |
in_features | Обрабатываемые входные объекты. | Feature Layer |
group | Поле, использующееся для определения того, какие объекты имеют совпадающие, не накладывающиеся друг на друга границы. | Field |
out_feature_class | Класс объектов, который будет получен в результате работы инструмента. | Feature Class |
method | Метод, который будет использоваться для упорядочения входных объектов.
| String |
tolerance | Максимальное расстояние, на которые упорядоченный контур может отступать от границы его исходного объекта. | Linear Unit |
precision | Точность пространственной сетки, используемой в процессе упорядочивания. Действительные значения находятся в диапазоне от 0.05 до 0.25. | Double |
angular_limit | Максимальное смещение внутренних углов наилучшей линии, использующееся при использовании метода Прямые углы и диагонали (RIGHT_ANGLES_AND_DIAGONALS). Для получения наилучших результатов это значение не должно превышать 5°. Этот параметр отключен для других методов упорядочения. | Double |
Пример кода
В следующем примере показано использование этого инструмента в окне Python.
arcpy.env.workspace = 'c:/data'
arcpy.ddd.RegularizeAdjacentBuildingFootprint('rough_footprints.shp', 'Block_ID',
'regularized_footprints.shp',
'RIGHT_ANGLES_AND_DIAGONALS',
'2 Meters', 0.10)
В следующем примере показано использование этого инструмента в автономном скрипте Python.
'''****************************************************************************
Name: Classify Lidar & Extract Building Footprints
Description: Extract footprint from lidar points classified as buildings,
regularize its geometry, and calculate the building height.
****************************************************************************'''
import arcpy
lasd = arcpy.GetParameterAsText(0)
dem = arcpy.GetParameterAsText(1)
footprint = arcpy.GetParameterAsText(2)
try:
desc = arcpy.Describe(lasd)
if desc.spatialReference.linearUnitName in ['Foot_US', 'Foot']:
unit = 'Feet'
else:
unit = 'Meters'
ptSpacing = desc.pointSpacing * 2.25
sampling = '{0} {1}'.format(ptSpacing, unit)
# Classify overlap points
arcpy.ddd.ClassifyLASOverlap(lasd, sampling)
# Classify ground points
arcpy.ddd.ClassifyLasGround(lasd)
# Filter for ground points
arcpy.management.MakeLasDatasetLayer(lasd, 'ground', class_code=[2])
# Generate DEM
arcpy.conversion.LasDatasetToRaster('ground', dem, 'ELEVATION',
'BINNING NEAREST NATURAL_NEIGHBOR',
sampling_type='CELLSIZE',
sampling_value=desc.pointSpacing)
# Classify noise points
arcpy.ddd.ClassifyLasNoise(lasd, method='ISOLATION', edit_las='CLASSIFY',
withheld='WITHHELD', ground=dem,
low_z='-2 feet', high_z='300 feet',
max_neighbors=ptSpacing, step_width=ptSpacing,
step_height='10 feet')
# Classify buildings
arcpy.ddd.ClassifyLasBuilding(lasd, '7.5 feet', '80 Square Feet')
#Classify vegetation
arcpy.ddd.ClassifyLasByHeight(lasd, 'GROUND', [8, 20, 55],
compute_stats='COMPUTE_STATS')
# Filter LAS dataset for building points
lasd_layer = 'building points'
arcpy.management.MakeLasDatasetLayer(lasd, lasd_layer, class_code=[6])
# Export raster from lidar using only building points
temp_raster = 'in_memory/bldg_raster'
arcpy.management.LasPointStatsAsRaster(lasd_layer, temp_raster,
'PREDOMINANT_CLASS', 'CELLSIZE', 2.5)
# Convert building raster to polygon
temp_footprint = 'in_memory/footprint'
arcpy.conversion.RasterToPolygon(temp_raster, temp_footprint)
# Regularize building footprints
arcpy.ddd.RegularizeBuildingFootprint(temp_footprint, footprint,
method='RIGHT_ANGLES')
except arcpy.ExecuteError:
print(arcpy.GetMessages())
Информация о лицензиях
- Basic: Требуется 3D Analyst
- Standard: Требуется 3D Analyst
- Advanced: Требуется 3D Analyst