Enhancing AR Support for MapMint4ME and adding GPS Satellite Tracking

Idea
MapMint4ME (MM4ME) is an android application with the capability to record data on the field without internet connectivity. It gives users the facility to store any kind of alphanumeric data. Users are able to take photos, record their position, and view their current location on a map based on the configuration settings of their MapMint server. When the user returns back to a place with access to the internet, the recorded data can be uploaded back to the MapMint server. In 2019, we added the AR support to the MapMint4ME. The support was to implement ARScale and CloudAnchor support to the MapMint4ME application. The CloudAnchor was used to implement anchors for representing virtual world object. In this project, we aims to Enhance ARScale and CloudAnchor support to MapMint4ME Android Application. MapMint4ME is an android application for MapMint web-service. MapMint is an internet-based Geographic Information System(GIS), designed to facilitate the deployment of Spatial Data Infrastructure(SDI). In an SDI, geographic data, metadata, tools, and the users are connected in an interactive manner in a framework so as to use the spatial information in an efficient and flexible way.

The MapMint is built on top of the ZOO-Project. The ZOO-Project is an SDI manager which gives the users the capability of building their own map and web-applications.

Project proposal
My proposal for GSoC 2020 can be found at: [proposal].

Advantages from this project
While capturing images, sometimes the user wants to add some extra information for more understanding. Current state allows the user to draw shapes and visualize changes in real time. But this AR scene will not be available once the app closes. So the idea is to store Anchors locally and the entire AR scene into some intermediate format which later can be used for visualization at some stage in future by the user hence helping to analyse the data at later stage. Also I am planning to calculate area of selected anchor space and display it to user in real time. Using this feature user will experience changes in real time. Also, planning to extend some UI features for representing GPS details so that we can integrate real world Lat-Long values to Virtual world AR anchors. This will improve process of information gathering.

Link to Github repository: [Link]

4th May - 24th May
Community bonding period: What I have done during this period?
 * Joined MapMint Slack Workspace created by mentors which we will be used as a mode of communication over the GSoC 2020 period
 * Introduced myself over the channel and shared my proposal over mailing list for suggestions
 * Mentors setup initial video call for primary discussion and explained me about my tasks during Community Bonding Period.
 * Created a wiki page for the project "Enhancing ARScale and CloudAnchor support to the MapMint4ME Android Application"
 * Updated wiki User page and added my personal information [Link]
 * Updated links on the wiki Google_Summer_of_Code_2020_Accepted page [Link]
 * Environment setup of MapMint4ME android application on my personal system on Android Studio.
 * Gone through documentation of MapMint4ME Android Application.
 * Gone through documentation for MapMint web application.
 * Gone through the working of the application user interface and code
 * Gone through working and setup which had implemented as part of last GSoC.
 * Analyze structure of MapMint4ME app and understand it thoroughly.
 * Discussed with the mentors their expectations over the GSoC 2020 project period.

What am I going to achieve for next week?
 * Implement basic Html UI elements in app.
 * Try to resolve firebase error which I am getting.
 * Try to implement basic retrieve Location ability within MapMint4ME.

Is there any blocking issue?
 * Currently, I am stuck to connect android studio and firebase.
 * Getting constant error from firebase.

Week 1 - 5 (25th May - 28th June)
Coding Phase 1: What I completed this week? What am I going to achieve for next week? Is there any blocking issue?
 * Week 1 (25th May- 31st May)  :
 * Studied how to add location support in Android Application Link
 * Studied and implemented "Get Current Location in Android"[Link]
 * Tested the simple Location support added to Android Application Link
 * Tested this location application on different android devices
 * Show number of satellites and their position relatively to the current position
 * Add this "Get Current Location" to MapMint4ME application
 * MapMint4ME have different language support while combining new part I have to take care of that

What I completed this week? What am I going to achieve for next week? Is there any blocking issue?
 * Week 2 (1st June- 7th June)  :
 * Studied more about GpsSatellite class[Link] and GpsStatus class[Link]
 * Implemented module that shows number of satellites relatively to current position[Link]
 * Display both number of satellites used to fix location and total number of available satellites with respect to current Gps Coordinates
 * Tried to show satellites' position with respect to current position
 * Will complete implementation of satellites' position with respect to current position
 * Integrate GPS Coordinate finder and satellite tracking module to MapMint4ME app
 * Will test this module on different android devices
 * No blocking issue till now

What I completed this week? What am I going to achieve for next week? Is there any blocking issue?
 * Week 3 (8th June- 14th June)  :
 * I added the following methods which give more information regarding GPS satellites currently used to fix locations, Satellite information is required because MapMint4ME acquires data without internet
 * getPrn method returns pseudo random number for satellite
 * getAzimuth method returns azimuth of the satellite in degrees
 * getElevation method returns elevation of the satellite in degrees
 * getSnr method returns signal to noise ratio
 * usedInFix method returns Returns true if the satellite was used by the GPS engine when calculating the most recent GPS fix
 * Currently all above methods give outputs on the android studio console which can be seen at[Link]
 * Integrated last week’s work on MapMint4ME app, for this I created some UI elements and modified the edit.html file to integrate the GPS Satellite Information module
 * To show output of getPrn, getAzimuth, getSnr, getElevation, usedInFix on UI, discussion is going on with mentors about how we can display it on screen
 * Will integrate this in MapMint4ME
 * Test integration with different devices
 * No blocking issue till now

What I completed this week? What am I going to achieve for next week? Is there any blocking issue?
 * Week 4 (15th June- 21st June)  :
 * Added output of getPrn, getAzimuth, getSnr, getElevation, usedInFix on UI[Link]
 * Integrated this new module with existing MapMint4ME applicaton[Link]
 * Resolved all errors and warnings while integrating this new module with existing MapMint4ME
 * Tested MapMint4ME with new functionalities on different devices and it runs smoothly without crashing
 * Test video link for MapMint4ME with Satellite Information Module[Link]
 * Will start working on the first objective i.e. storing AR Scene and visualizing it in app, discussion is going on with mentors regarding this.
 * No blocking issue till now

Unfortunately I lost one of my close relatives to Covid-19 this week, so wasn't able to do the coding work this week. I will certainly fill this gap in next week’s work.
 * Week 5 (22nd June- 28th June)  :

What I completed this week?
 * Made pull request to MapMint4ME/gsoc-2020 branch[Link]
 * Pushed my implementation of Satellite information module on this new branch[Link]
 * Discussed with mentors about how we can proceed with Task 1
 * After discussion with mentors we got to know, that there is no way we can store cloud anchors locally at present[Link],[Link]
 * ARKit allows to place 3d model accurately with respect to location but this is not possible with ARCore and Sceneform. So finally after discussion with mentors we will follow another approach for task 1
 * We will do AR Simulation. For this we will place a 3d object on the plane. Adjust its position, size according to the user's need. Accelerate or Rotate that object in the real world. We decided to follow this approach for task 1

What am I going to achieve for next week? Is there any blocking issue?
 * Start working on the plan mentioned above
 * Start coding for task 1
 * No blocking issue till now

Week 6 - 9 (29th June - 25th July)
Coding Phase 2: What I completed this week? What am I going to achieve for next week? Is there any blocking issue?
 * Week 6 (29th June- 5th July)  :
 * Studied about Sceneform and ARCore[Link]
 * Created an AR app in which the user will select which 3d object he/she wants to place on the surface virtually. When the grid is detected, the user will just tap on the surface and that object will be placed on the surface virtually. More details can be found at[Link]
 * ARCore is supported by very limited devices[Link] and have tested on devices available to me
 * Write a function to accelerate(move/shift) 3d objects in the real world
 * Write a function to adjust the size of 3d objects in the real world
 * Test app on different ARCore compatible devices
 * Currently I am taking 3d objects from [Link], converting that objects to sfa and sfb files using “Import sceneform” in android studio is not giving desired output

What I completed this week?
 * Week 7 (6th July- 12th July)  :
 * Created UI element for adjusting size of 3d object in activity_main.xml file. Wrote java function for the same in MainActivity.java file.
 * Studied more about MotionEvent[Link]
 * Created a button on the UI for Accelerating 3d objects. Wrote java functions for the same with the help of MotionEvent[Link]
 * Tested implemented function
 * Test video link for ARSimulation Module[Link]

What am I going to achieve for next week?
 * Write a function for turning 3d object left or right based on user interest in real world scene
 * will write function for rotating objects in the real world
 * Integration of AR Simulation with MapMint4ME
 * Testing this on different ARCore supported devices.

Is there any blocking issue?
 * No blocking issues

What I completed this week?
 * Week 8 (13th July- 19th July)  :
 * Completed function for rotating 3d objects. Now the user can easily rotate the 3d object based on user’s preference
 * Wrote function for left and right button. Which will move objects gently right and left based on the user's preference[Link]
 * Tested implementation on various ARCore supported devices
 * Found that Sceneform 1.16.0 only supports glTF instead of SFA and SFB Sceneform formats[Link]
 * So now before integrating with MapMint4ME, the challenge is to use glTF format which previously we used SFA and SFB format in android studio. So I am working on adding glTF format for importing 3d objects

What am I going to achieve for next week?
 * Will create 3d objects in android studio this time with glTF
 * Integration of implemented module with MapMint4ME
 * Will make pull request and push changes to the main repository after integration.
 * Test app with different android devices

Is there any blocking issue?
 * No blocking issues

Student's Biography
My name is Aditi Mohan Sawant. I am a Computer Science graduate from Mumbai University with CPI 8.81, pursuing my Master's degree in Geoinformatics and Natural Resources Engineering under Centre of Studies in Resources Engineering, Indian Institute of Technology Bombay, Mumbai, India. Some more information about me can be obtained by following the link: [Link]

Mentors

 * Fenoy Gerald Fenoy Gerald
 * Rajat Shinde Rajat Shinde