Сводка
Нормализует полигоны контуров зданий путем исключения нежелательных артефактов в их геометрии.
Иллюстрация
Использование
Этот инструмент использует алгоритм сжатия полилиний для исправления искажений в полигонах контуров зданий, созданных во время рабочего процесса извлечения объектов, который может производить нежелательные артефакты.
Если контуры зданий содержат круглые структуры, обработайте их в первую очередь. Показатель компактности может применяться для определения круглых строений. Чтобы вычислить это значение, выполните следующее:
- Добавьте поле двойной точности.
- В калькуляторе поля вычислите следующее выражение:
(4 * 3.14159265358979 * !shape.area!) / !shape.length! ** 2
- Идеальный круг будет иметь значение 1; но поскольку полигоны, обычно обрабатываемые этим инструментом, имеют некоторую неровность, значения, близкие к 1, с большей вероятностью будут иметь круглую форму. Оцените свои результаты, чтобы определить минимальное значение круглого здания, и выберите значения, которые больше или равны этому значению, перед запуском инструмента с методом Окружность .
Рассмотрите возможность использования метода Любой угол, если контуры здания представляют геометрию с ребрами, образующими комбинацию углов, которые включают, помимо прочего, изгибы 45° и 90°. Начните с выбора поднабора объектов, содержащих неровные ребра, и оцените, какое значение диагонального штрафного коэффициента дает желаемый результат. Если результат неадекватно обозначает диагональные ребра, рассмотрите возможность изменения значения допуска, чтобы ограничить зону упорядочивания и постепенно снизить диагональный штрафной коэффициент. Если выходные данные содержат нежелательные ребра с острыми внутренними углами, повторно запустите инструмент, увеличивая при этом диагональный штрафной коэффициент до тех пор, пока не будет достигнут желаемый результат, а затем используйте это значение для обработки всего набора данных.
Когда метод Любые углы используется на компьютере с графической картой NVIDIA, которая поддерживает CUDA и имеет более 2 ГБ памяти, инструмент будет использовать графический процессор для выполнения своей операции. Вы можете изменить это поведение в параметре среды Тип процессора . Если присутствует несколько графических процессоров, желаемый можно указать с помощью параметра среды Идентификатор графического процессора .
Если с указанными параметрами для входных данных не получаются упорядоченные полигоны, в выходные данные копируются исходные объекты. Значение, указанное в поле STATUS будет показывать, был ли объект упорядочен следующим образом::
- 0 – Упорядоченный объект
- 1 – Исходный объект
Синтаксис
arcpy.3d.RegularizeBuildingFootprint(in_features, out_feature_class, method, tolerance, densification, precision, diagonal_penalty, min_radius, max_radius)
Parameter | Объяснение | Тип данных |
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 это значение определяет вероятность построения прямых углов или диагональных ребер между двумя соседними сегментами. При использовании метода ANY_ANGLES это значение определяет вероятность построения диагональных ребер, которые не соответствуют предпочтительным ребрам, определенным алгоритмом инструмента. Как правило, чем выше значение, тем меньше вероятность того, что будет построено диагональное ребро. | Double |
min_radius | Наименьший радиус, допустимый для упорядоченной окружности. Значение 0 подразумевает, что нет ограничений минимального размера. Эта опция доступна только для метода CIRCLE. | Double |
max_radius | Наибольший радиус, допустимый для упорядоченной окружности. Эта опция доступна только для метода CIRCLE. | Double |
Пример кода
В следующем примере показано использование этого инструмента в окне 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)
В следующем примере показано использование этого инструмента в автономном скрипте 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())
Environments
Информация о лицензиях
- Basic: Требуется 3D Analyst
- Standard: Требуется 3D Analyst
- Advanced: Требуется 3D Analyst