{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "In this demo, we follow [Tyler Sloan](https://quorumetrix.blogspot.com/2018/06/visualizing-lidar-data-with-datashader.html)'s walkthrough where he downloads LiDAR data from the City of Montreal (featuring the 1976 Olympic Stadium) and visualize it ([original notebook here](https://github.com/tsloan1377/montreal_open_data/blob/master/lidar_datashader_blog.ipynb)).\n", "\n", "This notebook depends on the LAStools for working with LiDAR - we only really need the LASzip tool, but we've installed the entire suite. You can see what other tools are available from the filemanager in the [LAStools/bin](Lastools/bin) directory." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits.mplot3d import Axes3D\n", "\n", "import os\n", "import imageio\n", "from laspy.file import File\n", "import datashader as ds\n", "import datashader.transfer_functions as tf\n", "from matplotlib import cm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use `curl` to get the `.laz`, the compressed lidar data from the city of Montreal which we save as mtl.lz" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " % Total % Received % Xferd Average Speed Time Time Time Current\n", " Dload Upload Total Spent Left Speed\n", "100 67.8M 100 67.8M 0 0 14.0M 0 0:00:04 0:00:04 --:--:-- 15.1M 0:00:04 0:00:01 12.9M\n" ] } ], "source": [ "!curl http://depot.ville.montreal.qc.ca/geomatique/lidar_aerien/2015/300-5046_2015.laz > mtl.laz\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we need to make the LASzip file executable; you'll need to do this to the other tools individually if you wish to use any of the other tools in that bin, by the way." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "!chmod 755 LAStools/bin/laszip" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We unzip the lidar data, specifying the input and outputs:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "!LAStools/bin/laszip -i mtl.laz -o mtl.las" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load LIDAR file with LasPy" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "sample_data = 'mtl.las'\n", "export_path = 'export//'" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | X | \n", "Y | \n", "Z | \n", "class | \n", "
---|---|---|---|---|
0 | \n", "19680 | \n", "998190 | \n", "41630 | \n", "1 | \n", "
1 | \n", "18250 | \n", "999920 | \n", "41600 | \n", "1 | \n", "
2 | \n", "18390 | \n", "999690 | \n", "41570 | \n", "2 | \n", "
3 | \n", "18530 | \n", "999460 | \n", "41540 | \n", "2 | \n", "
4 | \n", "18690 | \n", "999220 | \n", "41580 | \n", "2 | \n", "
5 | \n", "18830 | \n", "998990 | \n", "41600 | \n", "2 | \n", "
6 | \n", "18980 | \n", "998750 | \n", "41620 | \n", "1 | \n", "
7 | \n", "19130 | \n", "998510 | \n", "41620 | \n", "2 | \n", "
8 | \n", "17870 | \n", "999760 | \n", "41600 | \n", "2 | \n", "
9 | \n", "18030 | \n", "999500 | \n", "41600 | \n", "2 | \n", "
10 | \n", "18170 | \n", "999280 | \n", "41600 | \n", "1 | \n", "
11 | \n", "18320 | \n", "999030 | \n", "41600 | \n", "1 | \n", "
12 | \n", "18460 | \n", "998810 | \n", "41610 | \n", "1 | \n", "
13 | \n", "18600 | \n", "998590 | \n", "41620 | \n", "1 | \n", "
14 | \n", "18900 | \n", "998110 | \n", "41610 | \n", "2 | \n", "
15 | \n", "19050 | \n", "997880 | \n", "41620 | \n", "2 | \n", "
16 | \n", "19200 | \n", "997650 | \n", "41610 | \n", "2 | \n", "
17 | \n", "19340 | \n", "997410 | \n", "41620 | \n", "1 | \n", "
18 | \n", "19770 | \n", "996730 | \n", "41620 | \n", "2 | \n", "
19 | \n", "17440 | \n", "999740 | \n", "41620 | \n", "2 | \n", "
20 | \n", "17590 | \n", "999490 | \n", "41630 | \n", "1 | \n", "
21 | \n", "17730 | \n", "999280 | \n", "41620 | \n", "1 | \n", "
22 | \n", "17880 | \n", "999040 | \n", "41590 | \n", "1 | \n", "
23 | \n", "18020 | \n", "998820 | \n", "41550 | \n", "2 | \n", "
24 | \n", "18170 | \n", "998570 | \n", "41580 | \n", "2 | \n", "
25 | \n", "18320 | \n", "998330 | \n", "41600 | \n", "1 | \n", "
26 | \n", "18470 | \n", "998100 | \n", "41590 | \n", "2 | \n", "
27 | \n", "18610 | \n", "997870 | \n", "41590 | \n", "2 | \n", "
28 | \n", "18760 | \n", "997640 | \n", "41600 | \n", "1 | \n", "
29 | \n", "18900 | \n", "997420 | \n", "41580 | \n", "2 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
16803645 | \n", "999370 | \n", "121710 | \n", "24190 | \n", "2 | \n", "
16803646 | \n", "999530 | \n", "121440 | \n", "24180 | \n", "2 | \n", "
16803647 | \n", "999680 | \n", "121160 | \n", "24180 | \n", "2 | \n", "
16803648 | \n", "999840 | \n", "120870 | \n", "24170 | \n", "2 | \n", "
16803649 | \n", "997900 | \n", "124970 | \n", "24170 | \n", "2 | \n", "
16803650 | \n", "999010 | \n", "122970 | \n", "24190 | \n", "2 | \n", "
16803651 | \n", "999180 | \n", "122670 | \n", "24200 | \n", "1 | \n", "
16803652 | \n", "999320 | \n", "122400 | \n", "24210 | \n", "1 | \n", "
16803653 | \n", "999480 | \n", "122110 | \n", "24200 | \n", "1 | \n", "
16803654 | \n", "999630 | \n", "121850 | \n", "24200 | \n", "1 | \n", "
16803655 | \n", "999800 | \n", "121550 | \n", "24200 | \n", "1 | \n", "
16803656 | \n", "999950 | \n", "121260 | \n", "24180 | \n", "2 | \n", "
16803657 | \n", "998150 | \n", "125140 | \n", "24150 | \n", "2 | \n", "
16803658 | \n", "998310 | \n", "124860 | \n", "24180 | \n", "1 | \n", "
16803659 | \n", "999260 | \n", "123130 | \n", "24180 | \n", "2 | \n", "
16803660 | \n", "999410 | \n", "122870 | \n", "24190 | \n", "2 | \n", "
16803661 | \n", "999560 | \n", "122580 | \n", "24180 | \n", "1 | \n", "
16803662 | \n", "999720 | \n", "122300 | \n", "24180 | \n", "1 | \n", "
16803663 | \n", "999890 | \n", "121990 | \n", "24190 | \n", "1 | \n", "
16803664 | \n", "998490 | \n", "125390 | \n", "24160 | \n", "2 | \n", "
16803665 | \n", "999610 | \n", "123370 | \n", "24280 | \n", "1 | \n", "
16803666 | \n", "999760 | \n", "123090 | \n", "24180 | \n", "2 | \n", "
16803667 | \n", "999920 | \n", "122790 | \n", "24190 | \n", "1 | \n", "
16803668 | \n", "999040 | \n", "125260 | \n", "24200 | \n", "1 | \n", "
16803669 | \n", "999730 | \n", "124030 | \n", "24530 | \n", "1 | \n", "
16803670 | \n", "999990 | \n", "123540 | \n", "24180 | \n", "2 | \n", "
16803671 | \n", "999290 | \n", "125390 | \n", "24090 | \n", "2 | \n", "
16803672 | \n", "999550 | \n", "125560 | \n", "24170 | \n", "1 | \n", "
16803673 | \n", "999710 | \n", "125270 | \n", "24130 | \n", "2 | \n", "
16803674 | \n", "999910 | \n", "125790 | \n", "24140 | \n", "2 | \n", "
16803675 rows × 4 columns
\n", "