Добавление индекса в файл laspy (.las)

У меня есть два файла, один шейп-файл esri (.shp), другой облако точек (.las).

Используя модули laspy и shapefile, мне удалось выяснить, какие точки файла.las попадают в определенные полигоны шейп-файла. Теперь я хочу добавить индексный номер, позволяющий идентифицировать два набора данных. Так, например, все точки, которые попадают в полигон 231, должны получить число 231.

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

outFile1 = laspy.file.File("laswrite2.las", mode = "w",header = inFile.header)
outFile1.points = truepoints
outFile1.points.append(indexfromshp)
outFile1.close()

Ошибка, которую я получаю сейчас: AttributeError: у объекта 'numpy.ndarray' нет атрибута 'append'. Я уже пробовал несколько вещей, включая np.append, но я действительно в растерянности относительно того, как добавить что-либо в файл las.

Любая помощь высоко ценится!

1 ответ

Есть несколько способов сделать это.

Las файлы имеют поле классификации, вы можете хранить индексы в этом поле

las_file = laspy.file.File("las.las", mode="rw")
las_file.classification = indexfromshp

Однако, если файл Las имеет версию <= 1.2, поле классификации может хранить только значения в диапазоне [0, 35], но вы можете использовать поле 'user_data', которое может содержать значения в диапазоне [0, 255].

Или, если вам нужно сохранить значения выше 255 / вам нужно отдельное поле, вы можете определить новое измерение (см. Документ laspy о том, как добавить дополнительные измерения). Ваш код должен быть примерно таким

outFile1 = laspy.file.File("laswrite2.las", mode = "w",header = inFile.header)
# copy fields
for dimension in inFile.point_format:
    dat = inFile.reader.get_dimension(dimension.name)
    outFile1.writer.set_dimension(dimension.name, dat)

outFile1.define_new_dimension(
    name="index_from_shape",
    data_type=7, # uint64_t
    description = "Index of corresponding polygon from shape file"
 )
outFile1.index_from_shape = indexfromshp
outFile1.close()
Другие вопросы по тегам