добавление индекса в laspy файл (.las) - PullRequest
0 голосов
/ 12 июня 2018

У меня есть два файла: один шейп-файл 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 Ответ

0 голосов
/ 20 июня 2018

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

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

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

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

Или, если вам нужно сохранитьзначения выше 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()
...