Как преобразовать лидарный формат las в data.frame?

Данные лидара — это просто 3D-координаты, обычно в формате файла las. Пример контента

library(rgdal)
library(raster)
library(tmap)
library(tmaptools)
library(lidR)
library(RStoolbox)
las_cat <- readLAScatalog("C:/1/078-638.las")
summary(las_cat)
opt_chunk_size(las_cat) <- 500
plot(las_cat, chunk_pattern = TRUE)
las_cat
#> class       : LAScatalog (v1.2 format 1)
#> extent      : 637999, 638240.5, 6077999, 6079999 (xmin, xmax, ymin, ymax)
#> coord. ref. : NA 
#> area        : 483081.1 units²
#> points      : 3.68 million points
#> density     : 7.6 points/units²
#> density      : 5.6 pulses/units²
#> num. files  : 1

Есть ли способ получить координаты точки в типичном data.frame для R? В качестве примера мы можем использовать данные из этого http://data.wvgis.wvu.edu/elevation/. Кроме того, есть ли способ получить угол отражения, количество отражений в data.frame из файла лидара?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Пожалуйста, найдите ниже одно из возможных решений, чтобы получить data.table,data.frame со всей информацией. Вы можете использовать as.data.frame(), чтобы получить чистый data.frame, но data.tableявляется a data.frame

Репрекс

NB: я использовал набор данных .las, встроенный в библиотеку lidR, так как он более удобен.

  • Пример набора данных из lidR
library(lidR)

LASfile <- system.file("extdata", "example.laz", package = "rlas")
las <- readLAS(LASfile)

summary(las)
#> class        : LAS (v1.0 format 1)
#> memory       : 21.2 Kb 
#> extent       : 339002.9, 339015.1, 5248000, 5248001 (xmin, xmax, ymin, ymax)
#> coord. ref.  : NAD83 / UTM zone 17N 
#> area         : 16 m²
#> points       : 30  points
#> density      : 1.88 points/m²
#> density      : 1.62 pulses/m²
#> File signature:           LASF 
#> File source ID:           0 
#> Global encoding:
#>  - GPS Time Type: GPS Week Time 
#>  - Synthetic Return Numbers: no 
#>  - Well Know Text: CRS is GeoTIFF 
#>  - Aggregate Model: false 
#> Project ID - GUID:        00000000-0000-0000-0000-000000000000 
#> Version:                  1.0
#> System identifier:        LAStools (c) by rapidlasso GmbH 
#> Generating software:      las2las (version 201011) 
#> File creation d/y:        343/2011
#> header size:              227 
#> Offset to point data:     323 
#> Num. var. length record:  1 
#> Point data format:        1 
#> Point data record length: 28 
#> Num. of point records:    30 
#> Num. of points by return: 26 4 0 0 0 
#> Scale factor X Y Z:       0.001 0.001 0.001 
#> Offset X Y Z:             6e+05 6500000 0 
#> min X Y Z:                339002.9 5248000 973.145 
#> max X Y Z:                339015.1 5248001 978.345 
#> Variable Length Records (VLR):
#>    Variable Length Record 1 of 1 
#>        Description: by LAStools of rapidlasso GmbH 
#>        Tags:
#>           Key 1024 value 1 
#>           Key 3072 value 26917 
#>           Key 3076 value 9001 
#>           Key 4099 value 9001 
#> Extended Variable Length Records (EVLR):  void
  • Предлагаемый код
payload(las)
  • Выход
#>          Z  gpstime Intensity ReturnNumber NumberOfReturns ScanDirectionFlag
#> 1  975.589 269347.3        82            1               1                 1
#> 2  974.778 269347.3        54            1               1                 1
#> 3  974.471 269347.3        27            2               2                 1
#> 4  974.025 269347.3        55            2               2                 1
#> 5  974.298 269347.3       117            1               1                 0
#> 6  974.985 269347.3        81            1               1                 0
#> 7  975.182 269347.3        84            1               1                 1
#> 8  974.434 269347.3       104            1               1                 1
#> 9  974.159 269347.3        91            1               1                 1
#> 10 973.145 269347.3        99            1               1                 1
#> 11 976.739 269347.5        87            1               1                 1
#> 12 976.823 269347.5        83            1               1                 1
#> 13 977.227 269347.5        87            1               1                 1
#> 14 975.873 269347.5        87            1               1                 1
#> 15 975.782 269347.5       107            1               1                 1
#> 16 975.353 269347.5        76            1               1                 1
#> 17 974.704 269347.5       113            1               1                 1
#> 18 977.170 269347.5        64            1               1                 0
#> 19 977.757 269347.5        89            1               1                 0
#> 20 978.212 269347.5        98            1               1                 0
#> 21 978.309 269347.5        50            1               2                 0
#> 22 974.816 269347.5        31            2               2                 0
#> 23 978.345 269347.5        51            1               2                 1
#> 24 974.824 269347.5        32            2               2                 1
#> 25 978.014 269347.5        85            1               1                 1
#> 26 977.781 269347.5        94            1               1                 1
#> 27 976.455 269347.5        78            1               1                 1
#> 28 976.313 269347.7        71            1               1                 1
#> 29 975.735 269347.7        75            1               1                 1
#> 30 975.674 269347.7       106            1               1                 1
#>    EdgeOfFlightline Classification Synthetic_flag Keypoint_flag Withheld_flag
#> 1                 1              1          FALSE         FALSE         FALSE
#> 2                 0              1          FALSE         FALSE         FALSE
#> 3                 0              1          FALSE         FALSE         FALSE
#> 4                 0              1          FALSE         FALSE         FALSE
#> 5                 0              1          FALSE         FALSE         FALSE
#> 6                 0              1          FALSE         FALSE         FALSE
#> 7                 1              1          FALSE         FALSE         FALSE
#> 8                 0              1          FALSE         FALSE         FALSE
#> 9                 0              1          FALSE         FALSE         FALSE
#> 10                0              1          FALSE         FALSE         FALSE
#> 11                1              1          FALSE         FALSE         FALSE
#> 12                0              1          FALSE         FALSE         FALSE
#> 13                0              1          FALSE         FALSE         FALSE
#> 14                0              1          FALSE         FALSE         FALSE
#> 15                0              1          FALSE         FALSE         FALSE
#> 16                0              1          FALSE         FALSE         FALSE
#> 17                0              1          FALSE         FALSE         FALSE
#> 18                0              1          FALSE         FALSE         FALSE
#> 19                0              1          FALSE         FALSE         FALSE
#> 20                0              1          FALSE         FALSE         FALSE
#> 21                0              1          FALSE         FALSE         FALSE
#> 22                0              2          FALSE         FALSE         FALSE
#> 23                1              1          FALSE         FALSE         FALSE
#> 24                1              2          FALSE         FALSE         FALSE
#> 25                0              1          FALSE         FALSE         FALSE
#> 26                0              1          FALSE         FALSE         FALSE
#> 27                0              1          FALSE         FALSE         FALSE
#> 28                1              1          FALSE         FALSE         FALSE
#> 29                0              2          FALSE         FALSE         FALSE
#> 30                0              1          FALSE         FALSE         FALSE
#>    ScanAngleRank UserData PointSourceID        X       Y
#> 1            -21       32            17 339002.9 5248001
#> 2            -21       32            17 339003.0 5248000
#> 3            -21       32            17 339002.9 5248000
#> 4            -21       32            17 339002.9 5248000
#> 5            -21       32            17 339003.6 5248000
#> 6            -21       32            17 339003.5 5248000
#> 7            -21       32            17 339003.6 5248000
#> 8            -21       32            17 339003.7 5248000
#> 9            -21       32            17 339003.6 5248000
#> 10           -21       32            17 339003.7 5248000
#> 11           -22       32            17 339009.6 5248001
#> 12           -22       32            17 339009.5 5248001
#> 13           -22       32            17 339009.2 5248000
#> 14           -22       32            17 339009.4 5248001
#> 15           -22       32            17 339009.3 5248000
#> 16           -22       32            17 339009.3 5248000
#> 17           -22       32            17 339009.3 5248000
#> 18           -22       32            17 339009.5 5248000
#> 19           -22       32            17 339009.5 5248000
#> 20           -22       32            17 339009.5 5248000
#> 21           -22       32            17 339009.6 5248000
#> 22           -22       32            17 339010.7 5248001
#> 23           -22       32            17 339009.6 5248000
#> 24           -22       32            17 339010.6 5248001
#> 25           -22       32            17 339009.5 5248000
#> 26           -22       32            17 339009.4 5248000
#> 27           -22       32            17 339009.7 5248000
#> 28           -22       32            17 339015.1 5248000
#> 29           -22       32            17 339015.1 5248000
#> 30           -22       32            17 339015.0 5248000

Created on 2022-03-18 by the reprex package (v2.0.1)

Я отредактировал ваш ответ, потому что с точки зрения памяти не стоит преобразовывать в SpatialPointsDataFrame, а затем в data.frame. Он создает 2 копии облаков точек, в то время как объект LAS уже содержит data.frame, который только и ждет извлечения.

JRR 19.03.2022 10:01

@JRR Вау, большое спасибо за то, что поделились и за время, потраченное на улучшение ответа. Действительно ценится. Ваше здоровье.

lovalery 19.03.2022 12:46

Если вы не хотите играть с lidR и хотите использовать голую кость data.frame, просто используйте rlas вместо lidR.

library(rlas)
read.las("C:/1/078-638.las")

Другие вопросы по теме