GithubHelp home page GithubHelp logo

house_3d_api's Introduction

House_3D_API

1. Purpose and project objectives

Purpose

  • To model a house in 3D from lidar satellite images (geoTIFFs file) by only entering a home address

Pitch of the project

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.

Objectives

  • 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

Features

Must-have

  • 3D lookup of houses

Nice-to-Have

  • Optimize your solution to have the result as fast as possible.
  • Better visualization
  • 3D Belgium's monuments i.e church, etc.

2. The project

Working plan and steps

1. Research

  • 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

2. Data collection

3. Python procedural programming

  • 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

4. Python object-oriented programming

  • Deploying each single procedural commands into four coherent and consistent objects :
  • 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

5. Designing user friendly interface with form and buttons

  • 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

6. Wrapping up things

  • 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

Project structure and process flow

to incorporate : flowshart with process flow

Project output

Screenshot of the .html interface

Screenshot of the folium map

Screenshot of the 3D reconstruction

Pending

  • 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

house_3d_api's People

Contributors

jcmeunier77 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.