Краткая информация
Нормализует полигоны контуров зданий путем исключения нежелательных артефактов в их геометрии.
Иллюстрация
Использование
Этот инструмент задействует алгоритм сжатия полилиний для исправления искажений в полигонах контуров зданий, созданных во время рабочего процесса извлечения объектов, который может производить нежелательные артефакты.
Значение допуска определяет регион, окружающий границу полигона, в который должен вписываться упорядоченный полигон. Такой регион лучше всего визуализировать путем конвертации границ полигона в линейный объект с последующим построением буфера вокруг линии с желаемым допуском.
Если контуры зданий содержат круглые элементы, они будут обработаны первыми. Показатель компактности может применяться для определения круглых строений. Чтобы вычислить это значение, выполните следующее:
- Добавьте поле двойной точности.
- В калькуляторе поля вычислите следующее выражение:
(4 * 3.14159265358979 * !shape.area!) / !shape.length! ** 2
- У идеальной окружности значение будет равно 1, но поскольку обычно обрабатываемые этим инструментом полигоны обычно не являются правильными, круглые элементы скорее всего характерны для значений, близких к 1. Оцените полученные результаты, чтобы определить минимальное значение для круглого строения и выбрать значения, большие или равные этому, перед выполнением инструмента с методом CIRCLE.
Если с указанными параметрами для входных данных не получаются упорядоченные полигоны, в выходные данные копируются исходные объекты. Значение в поле STATUS будет указывать был объект упорядочен или нет:
- 0 – Упорядоченный объект
- 1 – Исходный объект
Синтаксис
RegularizeBuildingFootprint(in_features, out_feature_class, method, tolerance, densification, precision, diagonal_penalty, min_radius, max_radius)
Параметр | Объяснение | Тип данных |
in_features | Полигоны для упорядочивания, представляющие контуры зданий. | Feature Layer |
out_feature_class | Класс объектов, который будет получен в результате работы инструмента. | Feature Class |
method | Метод упорядочивания, используемый для обработки входных объектов.
| String |
tolerance | Максимальное расстояние, на которые упорядоченный контур может отступать от границы его исходного объекта. Указанные значения будут основываться на линейных единицах системы координат входных объектов. | Double |
densification | Интервал выборки, который будет использован для оценки того, будет ли упорядоченный объект прямым или искривленным. Уплотнение должно быть меньше или равно значению допуска. Этот параметр используется только для методов, поддерживающих определение прямых углов. | Double |
precision | Точность, используемая пространственной сеткой, примененной в процессе упорядочивания. Действительные значения находятся в диапазоне от 0.05 до 0.25. | Double |
diagonal_penalty | Управляет расстоянием смещения для создания соединений под прямым углом. Расстояние, меньшее диагонального штрафного коэффициента, будет использоваться для создания прямых углов. Этот параметр используется только для метода RIGHT_ANGLES_AND_DIAGONALS. | Double |
min_radius | Наименьший радиус, который может быть у упорядоченных окружностей. Значение 0 подразумевает, что нет ограничений минимального размера. Эта опция доступна только для метода CIRCLE. | Double |
max_radius | Наибольший радиус, который может быть у упорядоченных окружностей. Эта опция доступна только для метода Окружностей. | Double |
Пример кода
RegularizeBuildingFootprint, пример 1 (окно Python)
В следующем примере показано использование этого инструмента в окне Python.
arcpy.env.workspace = 'c:/data'
arcpy.ddd.RegularizeBuildingFootprint('rough_footprints.shp',
'regularized_footprints.shp',
method='Circle', tolerance=1.5, min_radius=10,
max_radius=20)
RegularizeBuildingFootprint, пример 2 (автономный скрипт)
В следующем примере показано использование этого инструмента в автономном скрипте 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