- To model a house in 3D from lidar satellite images (geoTIFFs file) by only entering a home address
Put yourself in the shoes of a company, active in the Geospatial industy and whose purpose is to use lidar satellite image data to launch a new branch in the insurrance business. With this respect, the company needs you to build a solution with these data to model buildings in 3D with by only entering a home address.
What is LIDAR ? LIDAR stands for Light Detection and Ranging and is a remote sensing method used to examine the surface of the Earth. LIDAR is a remote sensing method that uses light in the form of a pulsed laser to measure ranges (variable distances) to the Earth. The device will illuminate a target with a laser light and a sensor will measure the reflection. Differences in wavelength and return times will be used to get 3D representations of an area.
- Consolidate the knowledge in Python, specifically in : NumPy, Pandas, Matplotlib
- To be able to search and implement new librairies
- To be able to read and use shapefiles
- To be able to read and use geoTIFFs
- To be able to render a 3D plot
- To be able to construct the project with object-oriented programming (OOP)
- To be able to implement the whole project - and make it functioning - through an API
- To be able to present a final product
- 3D lookup of houses
- Optimize your solution to have the result as fast as possible.
- Better visualization
- 3D Belgium's monuments i.e church, etc.
- Research and understand the term, concept and requirement of the project.
- Discover new libraries that can serve the project purposes
- geopy - convert physical addresses to Geographic locations
- folium - plot address on a map
- rasterio - read and write GEOTIFF format file
- pyproj - performs cartographic transformations and geodetic computations
- rioarray - rasterio xarray extension (xarray - working with labelled multi-dimensional arrays)
- matplotlib (mpl_toolkits.mplot3d Axes3D) - plot 3D objects on a 2D matplotlib figure
- open3d - a modern library for 3D data processing
- shapefile - provide read and write support for Shapefile (.shp) format
- geopandas - make working with geospatial data in python easier and extends the datatypes used by pandas to allow spatial operations on geometric types
- earthpy - make it easier to plot and work with spatial raster and vector data using open source tools
- fiona - provide read and write support to real-world data using multi-layered GIS formats and integrates readily with other Python GIS packages such as pyproj and Shapely
- cartopy - designed for geospatial data processing in order to produce maps and other geospatial data analyses
- shapely - provide support for manipulation and analysis of planar geometric objects
- gdal - translator library for raster and vector geospatial data formats
- DTM file for Flandre including Brussels
- DSM file for Flandre including Brussels
- Shapefiles with cadastral maps and parcels
-
Programming python command and function for each step of the process flow, i.a.:
- Returning CRS coordinates (epsg: WSG84 and 31370) from address input command
- Identifying right .tif or shp. from CRS coordinates
- Locate property from CRS coordinates
- Cropping .tif file with self-made shapes (e.g. polygon) or with cadastral .shp file geometries
- Constructing 3D point cloud files from cropped .tif file
- Using various algorithms (i.a. poisson, pall-pivoting,...) to generate 3D meshes from point clouds or to improve 3D visualization
-
Testing and fine-tuning code for improving readability, effacy and/or execution speed
see notebooks with single commands and functions, for further details
- Deploying each single procedural commands into four coherent and consistent objects :
- a_addres_to_crs.py : returns CRS coordinates from input address
- b_crs_to_tif.py : uses encoded CRS coordinate to locate the right .tif or .shp file
- c_file_to_pix.py : return 3D visualization from cropped .tif files
- d_target_to_map.py : save a folium map as .html file from CRS coordinates
- Constructing a 'meta' object for dispatching commands to the lower level objects
- Designing a Flask API for linking an .html interface to project objects
- with 2 routes : one for opening the address form (see next section) and one for render folium map .html template
- rem: the 3d visualization being open as a separate open3D object
- Using CSS/HTML adapted from available bootstrap templates and codes
- Form :
- for encoding address
- Buttons :
- 'Locate building on map' : opens folium .html map in new window
- 'View 3D reconstruction' : opens the open3D object in a separate object
- Linking the .html interface with the API with some javascript code
- by clicking on the interface buttons the interface communicates with the API for lauching the desired commands
- Linking each blocks of the project and ensuring an efficient communication between them
to incorporate : flowshart with process flow
- To host the data on an online server.
- To develop web application allowing client to type in any address in Belgium to view 3D houses.
- To obtain latest LIDAR images so that new houses after 2014 can be rendered.
- To incorporate cadastral plan of each property in the 3D rendering so that only the requested house is rendered.
- To explore other 3D plotting libraries