Git Product home page Git Product logo

ndvi-viewer's People

Contributors

emmarie-ahtunan avatar indigowizard avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

ndvi-viewer's Issues

Input: uplaoded geojson with multiple geometries

The upload_files_proc function is not reading all the geometries within a single GeoJSON file, instead it only parse the first geometry and ignores the rest.

  • Fix upload_files_proc function to read through all available geometries within the same GeoJSON
  • Read geometries within variant structures of GeoJSON (different from https://geojson.io/ structure)

Error

Error running app. If this keeps happening, please

Data Profiling and Stats

Needs a section where the user can generate a profile of the data with all the stats related to the results, e.g;

  • Size of area of interest in different metrics
  • Area surface covered by vegetation
  • Area surface of each class of NDVI values
  • Percentage of class compared to the area of interest
  • Charts for comparison between baseline NDVI and updated NDVI values
  • Generating a PDF report with these stats

User input: date time - 2: time range

minimizing input data to avoid cramming UI with x4 date input widgets to form time frames for each satellite image collection.

  • Deleting date input label in favor of status text boxes
  • Using single date input for each period
  • Setting up a 7 days time range calculated from time input and back (time range calculated to relatively to the past of the input date to avoid errors if user picks today's date)
  • Creating separate image collections & layers for each of the time inputs

UI: Legend

Add legend section explaining the map's elements, includes:

  • color palette
  • ndvi values
  • category info (explaning each color category meaning)

Deployement

  • Setup requirements.txt
  • Setup Streamlit cloud deployement config
  • Use Earthengine token as streamlit secret
  • Deploy dev branch for testing
  • Using geemap.ee_initialize() to initialize/authenticate the gee app in the cloud

Comparative maps

Find a way to create comparative maps where each displays the NDVI from a date period specified by user input. Explore;

  • Dual map
  • [ ] Map slider

Dynamic map focus

The current map is set to arbitrary default coordinates which makes it less user-friendly when uploading aoi and having search the map for it. The ideal way is to implement dynamic map centering mechanic that focuses on the uploaded GeoJSON aoi.

  • Calculate center of uploaded geometry list
  • Center the map based on the centroid of the geometry
  • Use dynamic centering to focus the map on the latest uploaded geometry in case of multiple GeoJSON files

App optimization - Resource Consumption - Streamlit Cloud free tier Crash

The app is unexpectedly doing good but the more users are trying the app the more it keeps crashing due to Streamlit Cloud free tier limited allocated resources. I cant afford a paid plan on any service so I think I have to focus on app optimization (it needs this regardless of the app crashing or not).

If anyone has any idea on how to optimize a Google Earth Engine app, please check the issue and lend a helping hand.

Folium map setup

  • Setting up main folium map
  • adding secondary vector layer basemaps

GEE: image collection

  • configuring an image collection filtering instead of single ID ee.Image
  • setting up collection ID
  • clipping collection to aoi

Secondary basemaps πŸ—ΊοΈ

  • Adding areal imagery layer basemaps
  • Configuring custom basemap: normal & colorblind-friendly
    • Normal Vision: No color vision deficiency.
    • Protanomaly: Red-green color blindness where the red cones in the eye are abnormal.
    • Protanopia: Complete red-green color blindness where the red cones are missing.
    • Deuteranomaly: Mild red-green color blindness where the green cones in the eye are abnormal.
    • Deuteranopia: Complete red-green color blindness where the green cones are missing.
    • Tritanomaly: Blue-yellow color blindness where the blue cones in the eye are abnormal.
    • Tritanopia: Complete blue-yellow color blindness where the blue cones are missing.
    • Achromatopsia: Total color blindness where none of the cones in the eye function, resulting in seeing the world in shades of gray.

Project setup

  • Create a GitHub repository for the project
  • Set up and sync the dev environment
  • Define project development route
  • Define the structure of the project

UI: general ui

  • Configuring Streamlit app main layout
  • Setting up app styles
  • Responsive UI for mobile
  • Sidebar
    • Title
    • Image/logo
    • Navigation section
    • Social media/contact
  • Map legend
  • Info section
    • results interpretation
    • scientific explanation
    • data
    • process workflow
  • About section
  • Contribution section
  • Credit section
  • Contact section

Update README.md

  • Adding project info including intial submission to GHW Data hackathon, credit and updating the project structure

User input: cloud coverge percentage

Allow user to input a value for cloudy pixel percentage which helps have clearer images

  • slider input for cloud pixel coverage
  • set minimum value >0 to avoid app error

Google Earth Engine

  • Setting up Google Earth Engine library
  • Configuring Google Earth Engine drawing method
  • Adding GEE drawing method to Folium

App crashes due to absent B8 when trying to calculate Nomalized Difference with absent data from current day

The placeholder of the st.date_input streamlit widget was set to the current day, which turns out to be inconvenient as satellite images aren't always available on a daily basis in the dataset or not captured yet, so when the app starts and tries to retrieve a dataset from the current day that is nonexistent it sends an error and dont display the page:

ee.ee_exception.EEException: Image.normalizedDifference: No band named 'B8'. Available band names: [].

malloc(): unsorted double linked list corrupted

Note: this issue is not the sole reason the app crashes, the heavy load of users also causes the app to crash when exceeding free tier allocated resources.

User input: area of interest - 2

User input file upload enhancement

  • support multiple file upload
  • support multiple geometries entry
  • encapsulate method in separate function outside of main function for better readability and organization

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.