Упорядочить контуры зданий (3D Analyst)

Краткая информация

Нормализует контуры полигонов зданий путем исключения нежелательных артефактов в их геометрии.

Иллюстрация

Иллюстрация инструмента Упорядочить контуры зданий

Использование

  • Этот инструмент использует алгоритм сжатия полилиний для исправления искажений в полигонах контуров зданий, созданных во время рабочего процесса извлечения объектов, который может производить нежелательные артефакты.

  • Если контуры зданий содержат круглые структуры, обработайте их в первую очередь. Показатель компактности может применяться для определения круглых строений. Чтобы вычислить это значение, выполните следующее:

    1. Добавьте поле двойной точности.
    2. В калькуляторе поля вычислите следующее выражение:
      (4 * 3.14159265358979 * !shape.area!) / !shape.length! ** 2
    3. Правильный круг будет иметь значение 1. Но поскольку полигоны, обработанные этим инструментов, будут с некоторыми неровностями, значения, близкие к 1, вероятно будут иметь круглую форму. Оцените полученные результаты, чтобы определить минимальное значение для круглого строения. Затем выберите значения, большие или равные этому, перед выполнением данного инструмента с параметром Метод, установленным на Окружность.
  • Задайте параметр Метод на Любые углы, если контуры здания представляют геометрию с ребрами, образующими комбинацию углов, которые включают, помимо прочего, изгибы 45° и 90°. Начните с выбора поднабора объектов, содержащих ребра неправильной формы, и оцените, какое значение диагонального штрафного коэффициента дает желаемый результат. Если результат неверно обозначает диагональные ребра, измените значения допуска, чтобы ограничить зону упорядочивания и постепенно снизить диагональный штрафной коэффициент. Если выходные данные содержат нежелательные ребра с острыми внутренними углами, повторно запустите инструмент, увеличивая при этом диагональный штрафной коэффициент до тех пор, пока не будет достигнут желаемый результат. Затем используйте это значение для обработки всего набора данных.

  • Когда опция Любые углы используется на компьютере с графической картой NVIDIA, которая поддерживает CUDA и имеет более 2 ГБ памяти, инструмент будет использовать графический процессор для выполнения своей операции. Вы можете изменить это поведение в параметре среды Тип процессора. При наличии нескольких графических процессоров, необходимый графический процессор можно указать с помощью параметра среды GPU ID.

  • Если инструмент не производит упорядоченные полигоны с заданными входными данными, в выходные данные копируются исходные объекты. Значение, указанное в поле STATUS будет показывать, был ли объект упорядочен следующим образом:

    • 0 – Упорядоченный объект
    • 1 – Исходный объект
  • При использовании метода Окружности с геометрией, где есть большие различия в размерах, использование опции Отношение площади для параметра Тип допуска может дать лучшие результаты, чем параметр Расстояние, поскольку построение выходных объектов будет ограничено размером исходной геометрии в отличие от фиксированного размера, который может работать для ограниченного поднабора исходных объектов.

Параметры

ПодписьОписаниеТип данных
Входные объекты

Полигоны для упорядочивания, представляющие контуры зданий.

Feature Layer
Выходной класс объектов

Класс объектов, который будет создан.

Feature Class
Метод

Указывает метод упорядочивания, используемый для обработки входных объектов.

  • Прямые углыБудут построены формы, состоящие из углов 90° между смежными ребрами.
  • Прямые углы и диагоналиБудут построены формы, состоящие из углов 45° и 90° между смежными ребрами.
  • Любые углыБудут построены формы, состоящие из любых углов между смежными ребрами.
  • ОкружностьБудет построен наиболее подходящий круг вокруг входных объектов.
String
Допуск

Для большинства методов это значение представляет максимальное расстояние, на которые упорядоченный контур может отступать от границы его исходного объекта. Указанные значения будут основываться на линейных единицах системы координат входных объектов. При использовании метода Круг эта опция также интерпретируется как отношение разности между исходным объектом и его регуляризованным результатом, в отличие от площади регуляризоанного результата, основанной на значении, указанном в параметре Тип допуска.

Double
Уплотнение

Интервал выборки, который будет использован для оценки того, будет ли упорядоченный объект прямым или искривленным. Уплотнение должно быть меньше или равно значению допуска.

Этот параметр используется только для методов, поддерживающих определение прямых углов.

Double
Точность

Точность пространственной сетки, используемой в процессе упорядочивания. Действительные значения находятся в диапазоне от 0.05 до 0.25.

Double
Диагональный штрафной коэффициент

При использовании метода Прямые углы и диагонали это значение определяет вероятность построения прямых углов или диагональных ребер между двумя смежными сегментами. При использовании метода Любые углы это значение определяет вероятность построения диагональных ребер, которые не соответствуют предпочтительным ребрам, определенным алгоритмом инструмента. Если значение штрафа равно 0, предпочтительные ребра не будут использоваться, что приведет к получению упрощенного неправильного полигона. Как правило, чем выше значение, тем меньше вероятность того, что будет построено диагональное ребро.

Double
Минимальный радиус

Наименьший радиус, допустимый для упорядоченной окружности. Значение 0 подразумевает, что нет ограничений минимального размера. Эта опция доступна только для метода Окружность.

Double
Максимальный радиус

Наибольший радиус, допустимый для упорядоченной окружности. Эта опция доступна только для метода Окружность.

Double
Объект выравнивания
(Дополнительный)

Линейный объект, который будет использоваться для выравнивания ориентации упорядоченных полигонов. Каждый полигон будет выровнен только по одному линейному объекту.

Feature Layer
Допуск выравнивания
(Дополнительный)

Максимальное пороговое расстояние, которое будет использоваться для поиска ближайшего объекта выравнивания. Например, значение 20 метров указывает, что для выравнивания упорядоченного полигона будет использоваться ближайшая линия в пределах 20 м.

Linear Unit
Тип допуска
(Дополнительный)

Определяет допуск, который будет применен, если параметр Метод установлен на Круг.

  • РасстояниеДопуск представляет максимальное расстояние от границ обрабатываемого объекта. Это значение по умолчанию
  • Отношение площадейДопуск будет представлять максимальное ограничение для отношения между площадью исходного объекта, которая отличается от упорядоченного круга, и площадью упорядоченного круга.
String

arcpy.ddd.RegularizeBuildingFootprint(in_features, out_feature_class, method, tolerance, densification, precision, diagonal_penalty, min_radius, max_radius, {alignment_feature}, {alignment_tolerance}, {tolerance_type})
ИмяОписаниеТип данных
in_features

Полигоны для упорядочивания, представляющие контуры зданий.

Feature Layer
out_feature_class

Класс объектов, который будет создан.

Feature Class
method

Указывает метод упорядочивания, используемый для обработки входных объектов.

  • RIGHT_ANGLESБудут построены формы, состоящие из углов 90° между смежными ребрами.
  • RIGHT_ANGLES_AND_DIAGONALSБудут построены формы, состоящие из углов 45° и 90° между смежными ребрами.
  • ANY_ANGLEБудут построены формы, состоящие из любых углов между смежными ребрами.
  • CIRCLEБудет построен наиболее подходящий круг вокруг входных объектов.
String
tolerance

Для большинства методов это значение представляет максимальное расстояние, на которые упорядоченный контур может отступать от границы его исходного объекта. Указанные значения будут основываться на линейных единицах системы координат входных объектов. При использовании метода CIRCLE эта опция также интерпретируется как отношение разности между исходным объектом и его регуляризованным результатом, в отличие от площади регуляризоанного результата, основанной на значении, указанном в параметре tolerance_type.

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
alignment_feature
(Дополнительный)

Линейный объект, который будет использоваться для выравнивания ориентации упорядоченных полигонов. Каждый полигон будет выровнен только по одному линейному объекту.

Feature Layer
alignment_tolerance
(Дополнительный)

Максимальное пороговое расстояние, которое будет использоваться для поиска ближайшего объекта выравнивания. Например, значение 20 метров указывает, что для выравнивания упорядоченного полигона будет использоваться ближайшая линия в пределах 20 м.

Linear Unit
tolerance_type
(Дополнительный)

Определяет допуск, который будет применен, если параметр method установлен на CIRCLE.

  • DISTANCEДопуск представляет максимальное расстояние от границ обрабатываемого объекта. Это значение по умолчанию
  • AREA_RATIOДопуск будет представлять максимальное ограничение для отношения между площадью исходного объекта, которая отличается от упорядоченного круга, и площадью упорядоченного круга.
String

Пример кода

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

Связанные разделы