Классифицировать перекрытие LAS (3D Analyst)

Сводка

Классифицирует точки LAS из перекрывающихся сканов лазерной аэрофотосъемки.

Иллюстрация

Классифицировать перекрытие LAS

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

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

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

  • Наличие неклассифицированных точек перекрытия может привести к нежелательным результатам в операциях, где подразумевается равномерное распределение точек. Данные, полученные из обрабатываемых точек с нерегулярной плотностью и распределением, могут привести к появлению нежелательной погрешности. Классификация перекрывающихся точек позволяет фильтровать данные LAS для получения более однородной плотности точек и сокращает возможность возвращения точек с высокой погрешностью.

  • Исходный атрибут идентификатора точки для точки LAS предоставляет информацию о линии полета, вдоль которой она была собрана. Этот инструмент обрабатывает данные LAS в листах, определяя, присутствуют ли исходные идентификаторы множества точек, а затем определяя идентификатор с наибольшей величиной угла сканирования в качестве перекрытия. Если в обрабатываемой области существует несколько точек с одинаковым идентификатором источника точек, все точки с общим идентификатором источника точек с наибольшим углом сканирования будут классифицированы как перекрывающиеся. По этой причине рекомендуется использовать размер листа для вычисления точек LAS, равный двойному или тройному размеру номинального интервала между точками в данных LAS. Следует избегать больших размеров листов, поскольку это может привести к неправильной классификации точек с меньшими значениями угла сканирования. Меньшие размеры выборки могут не захватывать достаточное количество точек для правильного определения и классификации точек перекрытия.

  • Перекрывающимся точкам в файлах LAS версии 1.4 и форматом записи точек между 6 и 8 будет присвоен флаг классификации перекрытия, и их исходное значение кода классов будет сохранено. Точкам перекрытия во всех других поддерживаемых файлах LAS будет присвоено значение кода классов, равное 12. Если значение кода класса, равное 12, уже используется входными файлами LAS для представления данных, отличных от перекрывающихся сканов, рассмотрите использование инструмента Изменить коды классов LAS для переназначения этим точкам другого значения до выполнения данного инструмента.

Синтаксис

arcpy.3d.ClassifyLasOverlap(in_las_dataset, sample_distance, {extent}, {process_entire_files}, {compute_stats})
ParameterОбъяснениеТип данных
in_las_dataset

Обрабатываемый набор данных в листах LAS.

LAS Dataset Layer
sample_distance

Расстояние или измерение квадратной области, используемой для оценки данных LAS. Это значение можно выразить как число и значение линейных единиц, например, 3 метра. Если линейные единицы не указаны или выбрано Unknown, то единицы будут определены по пространственной привязке входных файлов LAS.

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

Указывает экстент данных, который будет обработан этим инструментом.

  • MAXOF - будет использоваться максимальный экстент всех входных данных.
  • MINOF - будет использоваться минимальная область, общая для всех входных данных.
  • DISPLAY– экстент будет равен видимому отображению.
  • Имя слоя - будет использоваться тот же экстент, что и в указанном слое.
  • Объект Extent - будет использоваться тот же экстент, что и в указанном объекте.
  • Строка координат, разделенных пробелами – будет использоваться экстент из заданной строки. Координаты должны быть выражены в таком порядке: x-min, y-min, x-max, y-max.
Extent
process_entire_files
(Дополнительный)

Указывает, как применяется экстент обработки.

  • PROCESS_EXTENTБудут обработаны только те точки LAS, что пересекают область интереса. Используется по умолчанию.
  • PROCESS_ENTIRE_FILESЕсли какая-либо часть файла LAS пересекает область интереса, будут обработаны все точки файла LAS, включая те, что находятся вне области интереса.
Boolean
compute_stats
(Дополнительный)

Определяет, следует ли вычислять статистику для файлов LAS, на которые ссылается набор данных LAS. Вычисление статистики определяет пространственный индекс для каждого файла LAS, что улучшает производительность анализа и отображения. Статистика также улучшает фильтрацию и символы, ограничивая отображение таких атрибутов LAS, как коды классификации и возвращаемая информация, значениями, которые присутствуют в файле LAS.

  • COMPUTE_STATSСтатистика будет рассчитана.
  • NO_COMPUTE_STATSСтатистика не будет рассчитана. Используется по умолчанию.
Boolean

Производные выходные данные

NameОбъяснениеТип данных
out_las_dataset

Набор данных LAS, который будет изменен.

Слой набора данных LAS

Пример кода

ClassifyLasOverlap, пример 1 (окно Python)

В следующем примере показано использование этого инструмента в окне Python.

arcpy.env.workspace = 'C:/data'

arcpy.ddd.ClassifyLasOverlap('Denver_2.lasd', '1 Meter')
ClassifyLasOverlap, пример 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

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