feat: add lidar course
@@ -0,0 +1,5 @@
|
|||||||
|
*.las
|
||||||
|
*.laz
|
||||||
|
*.xyz
|
||||||
|
venv/
|
||||||
|
.ipynb_*
|
||||||
|
After Width: | Height: | Size: 119 KiB |
|
After Width: | Height: | Size: 216 KiB |
@@ -10,12 +10,13 @@
|
|||||||
<link rel="stylesheet" href="plugin/highlight/monokai.css">
|
<link rel="stylesheet" href="plugin/highlight/monokai.css">
|
||||||
<link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" />
|
<link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" />
|
||||||
<style>
|
<style>
|
||||||
|
.reveal h3 { font-size: 32px;}
|
||||||
th, td { font-size:24px; }
|
th, td { font-size:24px; }
|
||||||
li{ font-size: 28px; }
|
li{ font-size: 28px; }
|
||||||
#map { width: 100%; height: 480px; }
|
#map { width: 100%; height: 480px; }
|
||||||
cite {
|
cite {
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-size: 0.35em;
|
font-size: 0.5em;
|
||||||
color: #6b7280;
|
color: #6b7280;
|
||||||
background: #f3f4f6;
|
background: #f3f4f6;
|
||||||
padding: 0.1em 0.35em;
|
padding: 0.1em 0.35em;
|
||||||
@@ -23,6 +24,17 @@
|
|||||||
margin-left: 0.15em;
|
margin-left: 0.15em;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
p {
|
||||||
|
font-size: 28px;
|
||||||
|
}
|
||||||
|
b {
|
||||||
|
color: #004682;
|
||||||
|
}
|
||||||
|
.reveal .slide-number {
|
||||||
|
font-size: 24px;
|
||||||
|
background: none;
|
||||||
|
color: #004682;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -34,34 +46,104 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<small>Joaquin Gottlebe</small>
|
<small>Joaquin Gottlebe</small>
|
||||||
<small>24.04.2026</small>
|
<small>24.04.2026</small>
|
||||||
|
<br>
|
||||||
|
<img src="https://www.enerparc.de/img/static/logo_enerparc.png" width="200px"></img>
|
||||||
|
</section>
|
||||||
|
<section >
|
||||||
|
|
||||||
|
<h3>Basics: Geographic Information (Geodata)</h3>
|
||||||
|
<div class="r-stack">
|
||||||
|
|
||||||
|
<img class="fragment fade-out r-stretch" src="images/geodata_features.png"></img>
|
||||||
|
|
||||||
|
<table class="fragment current-visible" border="1" cellpadding="6" cellspacing="0">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>id</th>
|
||||||
|
<th>name</th>
|
||||||
|
<th>category</th>
|
||||||
|
<th>elevation_m</th>
|
||||||
|
<th>geometry</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>1</td>
|
||||||
|
<td>Berlin Center</td>
|
||||||
|
<td>city</td>
|
||||||
|
<td>34</td>
|
||||||
|
<td>POINT(13.4050 52.5200)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2</td>
|
||||||
|
<td>Potsdam Station</td>
|
||||||
|
<td>transport</td>
|
||||||
|
<td>38</td>
|
||||||
|
<td>POINT(13.0657 52.3914)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>3</td>
|
||||||
|
<td>Forest Plot A</td>
|
||||||
|
<td>sample_site</td>
|
||||||
|
<td>72</td>
|
||||||
|
<td>POINT(12.9876 52.4123)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>4</td>
|
||||||
|
<td>Lake View</td>
|
||||||
|
<td>observation</td>
|
||||||
|
<td>29</td>
|
||||||
|
<td>POINT(13.1025 52.4568)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>5</td>
|
||||||
|
<td>Weather Sensor 01</td>
|
||||||
|
<td>sensor</td>
|
||||||
|
<td>45</td>
|
||||||
|
<td>POINT(13.2211 52.3347)</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<p><cite>Minn, Michael. Visualizing Terrain in ArcGIS Pro. https://michaelminn.net/tutorials/arcgis-pro-terrain/</cite></p>
|
||||||
|
<p>Data and information which has an <b>association with a location relative to Earth</b></p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h3>Basics: Geographic Information Systems (GIS)</h3>
|
||||||
|
<img src="images/qgis.png" class="r-stretch"></img>
|
||||||
|
<p>Consists of integrated computer hardware and software that <b>store, manage, analyze, edit, output, and visualize geographic data.</b></p>
|
||||||
|
<p><cite>©OpenStreetMap contributors</cite></p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h3>Internship Overview</h3>
|
<h3>Internship Overview</h3>
|
||||||
<p class="fragment">Company: <b>Enerparc AG</b></p>
|
<p class="fragment">Company: <b>Enerparc AG</b></p>
|
||||||
<p class="fragment">Industry domain: <b>Solar industry</b></p>
|
<p class="fragment">Industry domain: <b>Solar industry</b></p>
|
||||||
<p class="fragment">Duration: <b>360 hours over 4 months</b></p>
|
<p class="fragment">Duration: <b>360 hours over 4 months</b></p>
|
||||||
<p class="fragment">Role: <b>Developing Geo-ETL-Pipelines</b></p>
|
<p class="fragment">Role: <b>GIS Developer</b></p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h3>My Background</h3>
|
<h3>My Background</h3>
|
||||||
<p class="fragment">Bachelor in <b>Geography</b></p>
|
<p class="fragment">Bachelor in <b>Geography</b></p>
|
||||||
<p class="fragment">Specialised in <b>Remote Sensing</b> and <b>Geographic Information Systems</b></p>
|
<p class="fragment">Specialised in <b>Remote Sensing</b> and <b>Geographic Information Systems</b></p>
|
||||||
|
<p class="fragment"><b>4</b> years of experience in <b>tutoring</b> RS/GIS</p>
|
||||||
<p class="fragment">Currently pursuing Master in <b>Computational Science</b></p>
|
<p class="fragment">Currently pursuing Master in <b>Computational Science</b></p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h3>Motivation</h3>
|
<h3>Motivation</h3>
|
||||||
<p class="fragment">First industry <b>experience</b></p>
|
<p class="fragment">First industry <b>experience</b></p>
|
||||||
<p class="fragment">How to handle big <b>Geodata-ETL-Pipelines</b>?</p>
|
<p class="fragment">How to handle <b>geodata pipelines</b>?</p>
|
||||||
<p class="fragment">How is the dev experience in a <b>non-tech company</b>?</p>
|
<p class="fragment">How is the dev experience in a <b>non-tech company</b>?</p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h5>Enerparc Expertise</h5>
|
<h5>Enerparc Expertise</h5>
|
||||||
<img src="images/enerparc_expertise.png"></img>
|
<p>ENERPARC AG is involved in every stage of <b>solar energy projects</b>, acting as both a <b>project developer, operator and a service provider</b> for third parties.</p>
|
||||||
|
<img src="images/enerparc_expertise.png" class="r-stretch"></img>
|
||||||
<p><cite>ENERPARC AG. https://www.enerparc.de</cite></p>
|
<p><cite>ENERPARC AG. https://www.enerparc.de</cite></p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h5>Enerparc Overview</h5>
|
<h5>Enerparc in numbers</h5>
|
||||||
<img src="images/enerparc_overview.png"></img>
|
<img src="images/enerparc_overview.png" class="r-stretch"></img>
|
||||||
|
<p>Covers the electricity needs of <b>1.2 million households</b></p>
|
||||||
<p><cite>ENERPARC AG. https://www.enerparc.de</cite></p>
|
<p><cite>ENERPARC AG. https://www.enerparc.de</cite></p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
@@ -71,32 +153,79 @@
|
|||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h3>My Team</h3>
|
<h3>My Team</h3>
|
||||||
|
<p class="fragment">Project Development: <b>GIS Development & Administration</b></p>
|
||||||
|
<p class="fragment"><b>4 Persons</b>: 1 Team lead, 1 Full time, 2 Working Students</p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h3>My Role</h3>
|
<h3>Problem Statement</h3>
|
||||||
|
<b class="fragment">Use cases</b>
|
||||||
|
<p class="fragment">Identification of <b>development possibilities</b></p>
|
||||||
|
<p class="fragment">Monitoring of <b>market activity</b></p>
|
||||||
|
<b class="fragment">Needed</b>
|
||||||
|
<p class="fragment">Daily updated geodata on <b>energy assets of Germany</b></p>
|
||||||
|
<b class="fragment">Approach</b>
|
||||||
|
<p class="fragment">A process where geodata is periodicaly <b>extracted</b> from an input source, <b>transformed</b> with buisness logic, and <b>loaded</b> into a geodatabase. <b>(ETL)</b></p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h3>My Projects</h3>
|
<h3>Input Source</h3>
|
||||||
|
<div class="r-stack r-stretch">
|
||||||
|
<img src="https://www.marktstammdatenregister.de/MaStR/Assets/img/MaStR_Logo.svg" class="fragment fade-in-then-out" width="600px"></img>
|
||||||
|
<p class="fragment fade-in-then-out">Is an official registry of <b>all facilities and units in the German energy system</b>. It is maintained by the Bundesnetzagentur. </p>
|
||||||
|
<img src="images/rdm.png" class="fragment"></img>
|
||||||
|
</div>
|
||||||
|
<cite>www.marktstammdatenregister.de</cite>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h3>What is Geographic Information</h3>
|
<h3>Output Destination</h3>
|
||||||
<img src="images/geodata_features.png"></img>
|
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/500px-Postgresql_elephant.svg.png" height="200px"></img>
|
||||||
<p><cite>Minn, Michael. Visualizing Terrain in ArcGIS Pro. https://michaelminn.net/tutorials/arcgis-pro-terrain/</cite></p>
|
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h3>What is a Geographic Information Systems</h3>
|
<h3>Extraction Methods</h3>
|
||||||
<img src="images/qgis.png"></img>
|
<table>
|
||||||
<p><cite>Sutton, Tim. QGIS Screenshot. https://hub.qgis.org/screenshots/1/</cite></p>
|
<th>Methods</th>
|
||||||
|
<th>Advantage</th>
|
||||||
|
<th>Disadvantage</th>
|
||||||
|
<tr>
|
||||||
|
<td>Simple Object Access Protocol (SOAP)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Bulk download (ZIP)</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h3>Transformation Methods</h3>
|
||||||
|
<img src="https://geopandas.org/en/stable/_static/geopandas_logo_web.svg" height="200px"></img>
|
||||||
|
<img src="https://upload.wikimedia.org/wikipedia/en/6/60/PostGIS_logo.png" height="200px"></img>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h3>Loading Methods</h3>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<p>"Those who do not understand SQL are condemned to reinvent it, poorly."</p>
|
||||||
|
<cite>Adapted from Henry Spencer</cite>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="dist/reveal.js"></script>
|
<script src="dist/reveal.js"></script>
|
||||||
<script src="plugin/notes/notes.js"></script>
|
<script src="plugin/notes/notes.js"></script>
|
||||||
<script src="plugin/markdown/markdown.js"></script>
|
<script src="plugin/markdown/markdown.js"></script>
|
||||||
<script src="plugin/highlight/highlight.js"></script>
|
<script src="plugin/highlight/highlight.js"></script>
|
||||||
<script src="plugin/title-footer/title-footer.js"></script>
|
<script src="plugin/title-footer/title-footer.js"></script>
|
||||||
<script> Reveal.initialize({ hash: true, plugins: [ RevealMarkdown, RevealHighlight, RevealNotes ] }); </script>
|
|
||||||
<script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
|
<script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
Reveal.initialize({
|
||||||
|
controls: false,
|
||||||
|
transition: 'fade',
|
||||||
|
slideNumber: 'c/t',
|
||||||
|
hash: true,
|
||||||
|
plugins: [ RevealMarkdown, RevealHighlight, RevealNotes ]
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
let map;
|
let map;
|
||||||
let mapLayer;
|
let mapLayer;
|
||||||
@@ -110,12 +239,30 @@
|
|||||||
attribution: '© OpenStreetMap contributors'
|
attribution: '© OpenStreetMap contributors'
|
||||||
}).addTo(map);
|
}).addTo(map);
|
||||||
|
|
||||||
|
|
||||||
|
const germanyBounds = [
|
||||||
|
[47, 5],
|
||||||
|
[55, 16]
|
||||||
|
];
|
||||||
|
|
||||||
|
map.fitBounds(germanyBounds);
|
||||||
|
|
||||||
fetch("data/solaranlagen.geojson")
|
fetch("data/solaranlagen.geojson")
|
||||||
.then(res => res.json())
|
.then(res => res.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
mapLayer = L.geoJSON(data).addTo(map);
|
mapLayer = L.geoJSON(data, {
|
||||||
|
pointToLayer: function (feature, latlng) {
|
||||||
|
return L.circleMarker(latlng, {
|
||||||
|
radius: 3,
|
||||||
|
color: '#004682',
|
||||||
|
weight: 1,
|
||||||
|
opacity: 0.0,
|
||||||
|
fillOpacity: 1
|
||||||
|
});
|
||||||
const b = mapLayer.getBounds();
|
const b = mapLayer.getBounds();
|
||||||
if (b.isValid()) map.fitBounds(b, { padding: [20, 20] });
|
if (b.isValid()) map.fitBounds(b, { padding: [20, 20] });
|
||||||
|
}
|
||||||
|
}).addTo(map);
|
||||||
})
|
})
|
||||||
.catch(err => console.error("Failed to load GeoJSON:", err));
|
.catch(err => console.error("Failed to load GeoJSON:", err));
|
||||||
}
|
}
|
||||||
@@ -134,5 +281,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
PROJCS["ETRS89_UTM_Zone33_7",GEOGCS["GCS_ETRS_1989",DATUM["D_ETRS_1989",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",3500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",15.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "ec3ee3e3-5965-47ba-b90a-3eab16ba501d",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "Python 3 (ipykernel)",
|
||||||
|
"language": "python",
|
||||||
|
"name": "python3"
|
||||||
|
},
|
||||||
|
"language_info": {
|
||||||
|
"codemirror_mode": {
|
||||||
|
"name": "ipython",
|
||||||
|
"version": 3
|
||||||
|
},
|
||||||
|
"file_extension": ".py",
|
||||||
|
"mimetype": "text/x-python",
|
||||||
|
"name": "python",
|
||||||
|
"nbconvert_exporter": "python",
|
||||||
|
"pygments_lexer": "ipython3",
|
||||||
|
"version": "3.14.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 5
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"golm": 2.454589545833545,
|
||||||
|
"palais": 2.4076303262425336
|
||||||
|
}
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 1,
|
||||||
|
"id": "3ef1d31d-b8d2-4a13-916b-819868ec6df2",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Jupyter environment detected. Enabling Open3D WebVisualizer.\n",
|
||||||
|
"[Open3D INFO] WebRTC GUI backend enabled.\n",
|
||||||
|
"[Open3D INFO] WebRTCWindowSystem: HTTP handshake server disabled.\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"import laspy\n",
|
||||||
|
"import numpy as np\n",
|
||||||
|
"import open3d as o3d"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 2,
|
||||||
|
"id": "82ee9b51-c12b-49b1-a9b0-68d11b1fabdb",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"data_2012 = laspy.read(\"2012/golm_364806_fp.las\")"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 3,
|
||||||
|
"id": "85d67e00-3749-4bbf-a1a9-fa8a700b894d",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"points = np.vstack((data_2012.x, data_2012.y, data_2012.z)).T"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 4,
|
||||||
|
"id": "da00e8e7-ae4a-449c-b5bc-2f08939903e9",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"\u001b[1;33m[Open3D WARNING] GLFW Error: Wayland: The platform does not support setting the window position\u001b[0;m\n",
|
||||||
|
"\u001b[1;33m[Open3D WARNING] Failed to initialize GLEW.\u001b[0;m\n",
|
||||||
|
"\u001b[1;33m[Open3D WARNING] [DrawGeometries] Failed creating OpenGL window.\u001b[0;m\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stderr",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"libdecor-gtk-WARNING: Failed to initialize GTK\n",
|
||||||
|
"Failed to load plugin 'libdecor-gtk.so': failed to init\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"pcd = o3d.geometry.PointCloud()\n",
|
||||||
|
"pcd.points = o3d.utility.Vector3dVector(points)\n",
|
||||||
|
"o3d.visualization.draw_geometries([pcd])"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "f1b92eec-b6a1-4c51-ba2e-c7432f9cd2c9",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "Python 3 (ipykernel)",
|
||||||
|
"language": "python",
|
||||||
|
"name": "python3"
|
||||||
|
},
|
||||||
|
"language_info": {
|
||||||
|
"codemirror_mode": {
|
||||||
|
"name": "ipython",
|
||||||
|
"version": 3
|
||||||
|
},
|
||||||
|
"file_extension": ".py",
|
||||||
|
"mimetype": "text/x-python",
|
||||||
|
"name": "python",
|
||||||
|
"nbconvert_exporter": "python",
|
||||||
|
"pygments_lexer": "ipython3",
|
||||||
|
"version": "3.12.13"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 5
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
import json
|
||||||
|
import laspy
|
||||||
|
import numpy as np
|
||||||
|
import open3d as o3d
|
||||||
|
|
||||||
|
def density(data):
|
||||||
|
min_x, max_x = np.min(data.x), np.max(data.x)
|
||||||
|
min_y, max_y = np.min(data.y), np.max(data.y)
|
||||||
|
|
||||||
|
area = (max_x - min_x) * (max_y - min_y)
|
||||||
|
n_points = len(data.x)
|
||||||
|
|
||||||
|
density = n_points / area
|
||||||
|
return density
|
||||||
|
|
||||||
|
def data2np(data):
|
||||||
|
points = np.vstack((data.x, data.y, data.z)).transpose()
|
||||||
|
return points
|
||||||
|
|
||||||
|
def plot_o3d(points):
|
||||||
|
pcd = o3d.geometry.PointCloud()
|
||||||
|
pcd.points = o3d.utility.Vector3dVector(points)
|
||||||
|
o3d.visualization.draw_geometries([pcd])
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
data_golm = laspy.read("2012/golm_364806_fp.las")
|
||||||
|
data_palais = laspy.read("2012/neuespalais362808_fp.las")
|
||||||
|
|
||||||
|
density_golm = density(data_golm)
|
||||||
|
density_palais = density(data_palais)
|
||||||
|
|
||||||
|
output_density = {
|
||||||
|
"golm": density_golm,
|
||||||
|
"palais": density_palais
|
||||||
|
}
|
||||||
|
|
||||||
|
with open("density.json", "w") as f:
|
||||||
|
json.dump(output_density, f, indent=4)
|
||||||
|
|
||||||
|
#points_golm = data2np(data_golm)
|
||||||
|
#points_palais = data2np(data_golm)
|
||||||
|
|
||||||
|
#plot_o3d(points_golm)
|
||||||
|
#plot_o3d(points_palais)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
= Lab 1
|
||||||
|
|
||||||
|
Joaquin Gottlebe
|
||||||
|
|
||||||
|
== Question 1
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("q1.png", width: 80%),
|
||||||
|
caption: [...],
|
||||||
|
)
|
||||||
|
|
||||||
|
== Question 2
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("q2_return.png", width: 80%),
|
||||||
|
caption: [...],
|
||||||
|
)
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("q2_flight.png", width: 80%),
|
||||||
|
caption: [...],
|
||||||
|
)
|
||||||
|
|
||||||
|
== Question 3
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("q3_golm.png", width: 80%),
|
||||||
|
caption: [...],
|
||||||
|
)
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("q3_golm_2018.png", width: 80%),
|
||||||
|
caption: [...],
|
||||||
|
)
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("q3_neuespalais.png", width: 80%),
|
||||||
|
caption: [...],
|
||||||
|
)
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("q3_neuespalais_2018.png", width: 80%),
|
||||||
|
caption: [...],
|
||||||
|
)
|
||||||
|
== Question 4
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("q4_golm.png", width: 80%),
|
||||||
|
caption: [...],
|
||||||
|
)
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("q4_palais.png", width: 80%),
|
||||||
|
caption: [...],
|
||||||
|
)
|
||||||
|
|
||||||
|
== Question 5
|
||||||
|
|
||||||
|
#let density = json("density.json")
|
||||||
|
|
||||||
|
Golm: #density.golm \
|
||||||
|
Neues Palais: #density.palais
|
||||||
|
|
||||||
|
== Question 6
|
||||||
|
|
||||||
|
== Question 7
|
||||||
|
|
||||||
|
== Question 8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 724 KiB |
|
After Width: | Height: | Size: 437 KiB |
|
After Width: | Height: | Size: 357 KiB |
|
After Width: | Height: | Size: 252 KiB |
|
After Width: | Height: | Size: 531 KiB |
|
After Width: | Height: | Size: 164 KiB |
|
After Width: | Height: | Size: 633 KiB |
|
After Width: | Height: | Size: 861 KiB |
|
After Width: | Height: | Size: 1016 KiB |
@@ -0,0 +1,7 @@
|
|||||||
|
open3d
|
||||||
|
PDAL
|
||||||
|
GDAL==3.11.5
|
||||||
|
scipy
|
||||||
|
numpy
|
||||||
|
pandas
|
||||||
|
laspy
|
||||||