Public Lab Research note

GSoC 2019: Mapknitter Image Management - Divya Baid

by divyabaid16 | August 24, 2019 12:30 24 Aug 12:30 | #20655 | #20655

divyabaid16 was awarded the Basic Barnstar by gauravano for their work in this research note.

Project Details

Project Title: Mapknitter Image Management and Synchronous Editing

GSoC Project:

Open source Platform Used:Github

Github Organization Page:Publiclab

Repository Contributed to:mapknitter


Languages/Framework Used: Ruby on Rails, JavaScript, HTML/CSS

My PublicLab Profile:

Project Description:

MapKnitter is based around the upload of images, the positioning of those images on a map, and the compositing of those images into map export formats. This project idea focuses on the systems for tracking changes on those images, collecting them into sets, storing image history, and other improvements which we hope will simplify and reconfigure the MapKnitter codebase.

About Mapknitter

MapKnitter is a free and open source software created and run by Public Lab. MapKnitter is hosted through a donation of server space byRackspace.

MapKnitter can make maps from any image source, but it particularly lends itself to making maps with balloons and kites. The manual process of making maps with MapKnitter differs greatly from automated aerial imaging systems. In those systems, the imaging is of higher precision and processed with spatial and telemetry data collected along with the imagery, typically at higher altitudes and with consistent image overlap in the flight path sequence.

With MapKnitter the cartographer dynamically places each image and selects which images to include in the mosaic. Although the approaches are similar in that they use some type of additional information (usually pre-existing imagery of a lower resolution) as a reference, and that they are bound to specific cartographic elements such as map scale and map projection.

Community outreach and First Timers only issue

Public lab has always been a welcoming and beginner friendly organizations that especially guides all the newcomers have a smooth process from start till the end of their first contribution. It follows a first-timers friendly template that is easily understandable by anyone new to the community or open-source, that shows all the steps to follow for the first successful Pull Request.

First Timers issue created by me in Mapknitter:

First Timers issue created in Plots2:

Community outreach

I, along with 3 other students conducted a successful outreach event in our University which had more than 250+ participants where I delivered a talk to encourage students into open source, GSoC and to bring more contributors to Public Lab. It was my first talk and I had an amazing experience, I really loved motivating others and answering their question. I have also written a blog on this.


Code Links:


Pull Request:


My involvement in the community ( in the form of comments ):

Link to contribution graph during GSoC Period :

Features Added:

Image Ordering in sidebar:

Previously, the images were ordered on the basis of the time of creation. I have added the feature to order the images based on Name, alphabetical order, size of the image and the time of creation of the image.

Issue: 638

PR: 640, 825, 923

Multiple Image export:

Images export is a very good function of MapKnitter that helps users get all the images in jpg, zip, and GeoTIFF format. Previously, all the images of the map were exported and then the user would download the entire zip which contains the Knitted images.

Now, with multiple image export, which will be merged soon, the user will be able to select only the images he would like to export and just download them.

I have also written a blog on multiple image feature showing more details associated with it.

Issue: 659

PR: 693 (Not merged yet)

Version tracking of images:

History associated with each image is stored in the database. This is helpful to track all the updation made on the image at what time and by whom. Since multiple people can update a single image, this feature is very helpful. I developed this with the help of Paper trails gem in ruby. Also this was a key feature as part of my GSoc project. The first version that is displayed shows that the image is created. It displays the user name and the time of the creation of image in **ago word** form for example (Created by xyz 1 hour ago). And for the rest, it is image modification which is shown as a list of new versions which contains with it the information of the user who modified it and how much time ago it was modified.

I have also written a detailed blog on functioning of image history storage.

Issue: 682

PR: 862, 923, 946

Toggle between list view and grid view of images:

This is a UI Improvement in which the images can be viewed as a list as well as a grid depending on the choice of the user. The list view shows all the details associated with the image that includes, name, size, and other functions associated with the image like Pan to the image, delete the image and download the image. The grid view is simple and can be viewed as a photo gallery where only the picture, like thumb nail is shown hiding all other details.

Issue: 724

PR: 738

Addition of anonymous Map option:

With the upgrade to Mapknitter3, I found a suitable place and added the option to create a map anonymously. To create a map, a user must login but Mapknitter also provides an option to create map anonymously in which no one has the ownership of the map. Here, I highlighted some drawbacks of making a maps anonymously and encouraged user to create an account or login and then create a map, which definitely opens more features for the images.

PR: 820

Addition of Map and image gallery to the tags page:

Here, I used leaflet's getBounds feature to pass all coordinates in to calculate the bounds which includes all the maps associated with the particular tag and displayed the map on the top of the page. Leaflet is the leading open-source JavaScript library for mobile-friendly interactive maps using which we can choose combinations of layers to display on the map and has other features associated with the map. Further, I added the gallery template to make the page look complete.

Issue: 807

PR: 821

Search maps by location:

In the gallery page, I added an option to search the maps by location making searching easier for the users if they want the list of a map that belongs to a particular region. (This is not merged yet).

PR: 924

Designing a Login Modal:

I designed a login modal with bootstrap 4 panel that displays as popup whenever a user clicks on the Login button.

Issue: 716

PR: 717

Other small fix:

Small UI Improvements, bug fix and documentation issues solved during the GSoC phase were:

UI Improvements: 653, 689, 692, 799, 801, 802

Bug Fix: 721, 735

Documentation: 650, 876

Ongoing issues:

Ability to apply filters to images:

Add filters to images with image sequencer and show the updated image. Also, store the history of all the filters added to the image and display them.

Issue: #932

Future scope for new developers:

  • View of all images for a given region in maps
  • Refresh background images while dragging
  • Ability to choose time bounding box (some kind of layer manager may be needed)


My mentors:

  • Liz Barry
  • Sourav Sahoo
  • Sidharth
  • Cess
  • Gaurav Sachdeva
  • Jeffrey Warren

Thank for for always guiding me and helping me in all the possible way. You all helped me to gain a lot of knowledge from Day 1. I am more than grateful to you all for being the best mentors.


Reply to this comment...

Great post @divyabaid16!!! The summary of all the issues is great and references are really helpful. Your work really made Mapknitter better and great work.

(P.S: The PR and issues link needs to be corrected to point to GitHub)

I corrected it. Thanks you for your feedback :)

Reply to this comment...

@gauravano awards a barnstar to divyabaid16 for their awesome contribution!

Reply to this comment...

Great post @divyabaid16. Really love the explanation of what Mapknitter as a project is ❤️ ..maybe we should add that part in readme :), very comprehensive.

The features you added on the project are awesome. And thanks for creating a lot of first timer issues 🎉 🎉

Reply to this comment...

Login to comment.