from IPython.display import IFrame, Image, YouTubeVideo, SVG
import pandas
import matplotlib.pyplot as plt
import json
import gmaps
The dataset contains the following components:
Merits and potential usefulness
Demerits
The flight paths of the scan are plotted in the map below and their features are compared against the other 2 scans of Dublin in the Table 1. I thought the flight was deployed at a higher altitude and that was thought as the reason for the insufficient density. But the flight trajectory data shows that the average altitude was actually around 300 m. Except the wider spacing between adjacent flight paths (140 m vs. 100 m spacing of the 2015 scan), all other features (e.g. flight speed) are not worse than the 2007 or the 2015 scan. A remaining factor likely to contribute to the low density is the pulse repetition frequency of the LiDAR equipment. The exact scanning instrument is not known so I cannot validate that argument right away but would be able to do some reverse engineering from the captured point data (which will take some time).
One notable feature that makes the 2014 scan potentially useful is its different flight path direction compared to the other flights. The 2014 flight grid makes an angle of about 25o with the 2015 scan (Figure 1) making it potentially useful for works that require flight path analyses such as validating flight path optimization strategies.
Features | 2014 | 2007 | 2015 |
---|---|---|---|
Number of flight paths | 36 | 44 | 42 |
Flight date | 7&9-Mar-2014 | 20-Feb-2007 | 26-Mar-2015 |
Flight speed (m/s) | 13-18 | 15-19 | 15-18 |
Flight altitude (m) | 300 | 400 | 300 |
Flight path spacing (m) | 140 | ? | 100 |
IFrame('https://www.google.com/maps/d/embed?mid=1Bb7R9s84yLWikEHHoeGu3mPh8j8', width='100%', height=600)
The 2014 point cloud covers the same area as for the 2015 scan but at a much lower density (170 vs. 280 points/m2). The local surface density indexes of all 3 scans are presented in Table 2. Figure 2 overlays the 3 scans for visual comparison. The surface density histograms are computed and plotted in Figure 3. All of those prove that the 2014 scan is much sparser than the other 2 scans.
Features | 2014 | 2007 | 2015 |
---|---|---|---|
Total no. points (millions) | 353 | 225 | 1,423 |
Domiant surface density* (points/m2) | 170 | 290 | 280 |
(*) There are more than one way to compute density. The surface density values in this table are computed using CloudCompare's surface density computation with the radius value of 0.25 m.
$density=\frac{numberOfNeighbors}{\pi*r^2}$
#fields = ['Surface density (r=0.2)']
df07 = pandas.read_csv('data/d07-surface-density-r25.csv', sep=',', usecols=['Surface density (r=0.25)'])
df14 = pandas.read_csv('data/d14-surface-density-r25.csv', sep=',', usecols=['Surface density (r=0.25)'])
df15 = pandas.read_csv('data/d15-surface-density-r25.csv', sep=',', usecols=['Surface density (r=0.25)'])
plt.rcParams['figure.figsize'] = (15,10)
n_bins = 500
plt.hist(df07['Surface density (r=0.25)'], 200, color='r',normed=False, histtype='stepfilled',alpha=0.5,fill=True,label='2007')
plt.hist(df14['Surface density (r=0.25)'], 100, color='g',normed=False, histtype='stepfilled',alpha=0.5,fill=True,label='2014')
plt.hist(df15['Surface density (r=0.25)'], 500, color='b',normed=False, histtype='stepfilled',alpha=0.5,fill=True,label='2015')
xv=25
xh=290
c='red'
plt.axvline(xv,ls='--',linewidth=3, color=c)
plt.text(xv+3,350000,xv,rotation=90)
plt.axvline(xh,ls='-',linewidth=3, color=c)
plt.text(xh-7,350000,xh,rotation=90)
xv=20
xh=170
c='green'
plt.axvline(xv,ls='--',linewidth=3, color=c)
plt.text(xv-7,350000,xv,rotation=90)
plt.axvline(xh,ls='-',linewidth=3, color=c)
plt.text(xh-7,350000,xh,rotation=90)
xv=65
xh=280
c='blue'
plt.axvline(xv,ls='--',linewidth=3, color=c)
plt.text(xv-7,350000,xv,rotation=90)
plt.axvline(xh,ls='-',linewidth=3, color=c)
plt.text(xh-7,350000,xh,rotation=90)
axes = plt.gca()
axes.set_xlim([0,500])
plt.xlabel('Surface density')
plt.ylabel('Number of points')
plt.legend()
plt.show()
To compare the levels of noise of the 3 point clouds, I take 3 identical flat roof segments of the TCD's Long Room building, perform a plane fitting and compare the RMS of the point deviation from the fitting planes (i.e. residual
). Since the roof patches are supposed to be (relatively) flat, the residual
value can be taken as an indicator of the level of noise in the data. Table 3 presents the plane fitting results. The 2014 appears to be better than the 2007 scan but worse than the 2015 scan. That can also be observed visually in Figure 4.
Features | 2014 | 2007 | 2015 |
---|---|---|---|
RMSD (m) | 0.025 | 0.038 | 0.018 |
Inlier ratio (%) | 59.8 | 43.0 | 75.1 |
There are ortho-rectified aerial photos for the entire project area as seen in Figure 5 below. The resolution is slightly lower than the 2015 dataset (6 cm vs. 5 cm). The images has 3 bands RGB, and does not have infra-red. The ortho-rectification is imperfect as seen in Figure 6. Since some of the orthophoto files in the 2015 datasets are defected, we can consider the 2014 imagery dataset as a replacement. However, we cannot expect complete matching between the 2 scans due to the temporal divergence.