https://github.com/jblindsay/lidar
A Crystal language library for reading and writing LiDAR data in LAS format
https://github.com/jblindsay/lidar
Last synced: 7 months ago
JSON representation
A Crystal language library for reading and writing LiDAR data in LAS format
- Host: GitHub
- URL: https://github.com/jblindsay/lidar
- Owner: jblindsay
- License: mit
- Created: 2016-05-11T23:46:03.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2017-02-26T21:32:09.000Z (over 8 years ago)
- Last Synced: 2025-04-04T18:22:04.323Z (8 months ago)
- Language: Crystal
- Size: 14 MB
- Stars: 6
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- Awesome-Geospatial - lidar - A Crystal language library for reading and writing LiDAR data in LAS format. (Lidar)
- awesome-gis - lidar - A Crystal language library for reading and writing LiDAR data in LAS format. (Geospatial Library / Crystal)
README
# lidar
This is a small library for reading and writing [LiDAR](https://en.wikipedia.org/wiki/Lidar) data in the widely used [LAS file format](http://www.asprs.org/committee-general/laser-las-file-format-exchange-activities.html). The library has been developed as an experiment to learn the [Crystal programming language](http://crystal-lang.org/).
## Installation
Add this to your application's `shard.yml`:
```yaml
dependencies:
lidar:
github: jblindsay/lidar
```
## Usage
```crystal
require "lidar"
file_name = "path/to/file/test.las"
# Create a new LasFile instance for reading based on the file_name
lf = Lidar::LasFile.new file_name, "r"
# Print the meta data contained in the LAS header
puts("#{lf}")
# Now print the variable length records (VLRs)
if lf.header.number_of_vlrs > 0
(0...lf.header.number_of_vlrs).each { |i|
puts "VLR #{i + 1}:"
puts("#{lf.vlr_data[i]}")
}
end
# Print the first 10 points of the LAS data
(0...10).each do |i|
puts("Point #{i + 1} #{lf.get_xyzi_data(i)}")
end
# Create a new LAS file to write data into
file_name2 = "path/to/file/test2.las"
lf2 = Lidar::LasFile.new file_name2, "w"
# Add the header
lf2.add_header(lf.header)
# Add the VLRs to the file
lf.vlr_data.each do |vlr|
lf2.add_vlr(vlr)
end
# Add the point data to the file that lies within a specified area
north = 4363700.0
south = 4363200.0
east = 659400.0
west = 658900.0
(0...lf.header.number_of_points).each do |i|
p = lf[i]
if (west <= p.point.x <= east) && (south <= p.point.y <= north)
lf2.add_point_record(lf[i])
end
end
# Write the data
lf2.write
```
## Contributing
1. Fork it ( https://github.com/jblindsay/lidar/fork )
2. Create your feature branch (git checkout -b my-new-feature)
3. Commit your changes (git commit -am 'Add some feature')
4. Push to the branch (git push origin my-new-feature)
5. Create a new Pull Request
## Contributors
- [jblindsay](https://github.com/jblindsay) John Lindsay - creator, maintainer