Skip to content

Google Summer of Code Ideas

Patrick Cozzi edited this page Jan 22, 2015 · 57 revisions

Google Summer of Code 2013 Idea List

Update: This is from 2013. Check out Google Summer of Code 2015.

Cesium is an open-source JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin. It uses HTML5 and WebGL for hardware-accelerated graphics. Our code has shipped to 10's of millions of people in the same day. We have a culture of writing clean, peer-reviewed, tested code. Our developers are experts in their fields; they write books, create open standards, and present at international conferences. We look forward to helping you grow your skills and ship beautiful code that has wide impact.

Student Proposals

The period for submitting student proposals for 2013 has now closed. We had a great number of proposals submitted, thanks to everyone who participated!

Congratulations to our two GSoC students!

See this year's GSoC schedule for a roadmap of GSoC milestones this summer.

Improve your chances next year

We would have loved to accept everyone who was sending us pull requests, but this is our first year participating in GSoC. If we are invited back next year, you can start improving your chances now, just by getting involved and learning our codebase. Clone it from GitHub, and try making some simple modifications to it. See the list of issues and our roadmap for ideas.

Take a look at the list of issues for beginners, or the complete list of Cesium issues, and see what needs more work.

All of Cesium's code is covered by a Contributor's License Agreement (CLA), which basically authorizes Cesium developers and users to use the code you're contributing to us. You'll need to read the instructions for contributing to Cesium and email us a signed CLA before we can accept any code changes.

If you need help, just ask on our mailing list.

Technologies and Tools We Use

(We don't expect you to know all of them).

HTML5, CSS3, JavaScript, WebGL, SVG, Git, Ant, Eclipse, Chrome, Firefox, Android

Project Ideas

# Android ## Android Performance

WebGL support is improving rapidly on Android. Chrome, Firefox, and Opera Beta are capable of running Cesium on several phones and tablets. However, these devices do not have the same CPU and GPU performance as a desktop. On many devices, Cesium runs well, but that's not enough for us - we want it to scream.

Help us optimize Cesium for these devices. We will profile to find hot-spots and then tune the GPU code written in GLSL or the CPU code written in JavaScript or both. We'll consider fundamental architecture changes as needed and will carefully make visual quality vs. speed trade-offs.

Since this is the bleeding edge, we expect to find bugs in the browsers and GPU drivers. We'll work with browser and GPU vendors to resolve these and make the mobile platform better for everyone.

References

Skills: WebGL, JavaScript, Android, profiling, optimizing JavaScript and GLSL, git

Level: Advanced

Mentor: Kevin Ring - kevin@kotachrome.com

Backup Mentor: Patrick Cozzi - pjcozzi@siggraph.org

# Graphics ## ~~Declutter for Map Labels~~


Image from Temporally Coherent Real-Time Labeling of Dynamic Scenes

A classic problem when drawing 2D or 3D maps is the overlap of nearby text labels, resulting in a cluttered display and illegible labels. We will design and implement an efficient real-time algorithm to declutter map labels, avoiding or minimizing overlap.

This is an NP-hard problem, and therefore we will solve it heuristically in an attempt to minimize the amount we move each label and maintain temporal aesthetics. We will also explore creating hierarchies of labels using k-means and/or knowledge of hierarchical label relationships, e.g., street - city - county - state.

The algorithm needs to be very efficient; it must run in JavaScript and work for 100s of dynamic labels or 1000s of static labels.

References

Skills: Algorithm design, strong math, code and algorithm optimization, JavaScript, git

Level: Advanced

Mentor: Dan Bagnell - dbagnell@agi.com

Backup Mentor: Patrick Cozzi - pjcozzi@siggraph.org

## Geometric Algorithms

We use geometric algorithms to compute triangles composing shapes on the globe such as circles, ellipsoids, polygons, etc. We then use the triangles to draw the shape using WebGL.

In this project, we will add geometric algorithms for new shapes and optimize existing geometric algorithms. We will:

  • Add triangulation for walls perpendicular to the globe. This includes computing positions, averaged normals, and texture coordinates.
  • Add triangulation for "ribbon lines" - think the geometry for the track in Rainbow Road.
  • Add triangulation for hexahedrons.
  • Optimize polygon ear clipping and improve its robustness at the International Date Line.
  • Optimize triangulation for circles and ellipses.

We'll consider other shapes and level of detail as time permits.

References

Skills: Strong geometry and math skills, data structures and algorithms, optimization, JavaScript, git

Level: Intermediate

Mentor: Dan Bagnell - dbagnell@agi.com

Backup Mentor: Patrick Cozzi - pjcozzi@siggraph.org

# Geospatial ## ~~Vector Data Visualization with JSON~~

KML is a popular XML-based format for storing vector data, i.e., points, polylines, and polygons. However, new JSON-based standards are emerging that are better suited to web mapping.

In this project, we will add support for two JSON vector data formats, GeoJSON and TopoJSON, to Cesium. First, we'll load and draw them using the Cesium API. Then we'll investigating styling with colors, patterns, etc.

References * The GeoJSON Format Specification * GeoJSONLint * TopoJSON Specification

Skills: JavaScript, git, open standards, geospatial

Level: Novice

Mentor: Matt Amato - matt.amato@gmail.com

Backup Mentor: Ford?

## Raster Data Visualization with Web Map Tile Service

Cesium draws 3D maps retrieved using many map standards like Web Map Service (WMS) and OpenStreetMap. These standards provide access to high-resolution maps.

In this project, we will add support for Web Map Tile Service (WMTS), an Open Geospatial Consortium (OGC) standard. WMTS allows serving static tiles as individual files, and generally performs better than WMS.

References

Skills: JavaScript, REST APIs, git, open standards, geospatial

Level: Intermediate

Mentor: Tom Fili - tfili@agi.com

Backup Mentor: Kevin Ring - kevin@kotachrome.com

## Vector Data Visualization with Geography Markup Language

Geography Markup Language (GML) is an Open Geospatial Consortium (OGC) standard for expressing geographical features, e.g., points, polylines, and polygons, in XML.

In this project, we will add support to Cesium to draw and style features from GML. The GML spec is quite large with many different feature types. We can limit our scope to the OpenGIS GML Simple Features Profile, which defines a common subset.

This project is a stepping stone to supporting Web Feature Service (WFS) below.

References

Skills: JavaScript, XML, git, open standards, geospatial

Level: Intermediate

Mentor: TBA

Backup Mentor: TBA

## Vector Data Visualization with Web Feature Service

Web Feature Service (WFS) is an Open Geospatial Consortium (OGC) standard for requesting geographical features, e.g., points, polylines, and polygons, over the web.

In this project, we will add support to Cesium to request geographical features using WFS over HTTP, and draw and style them. Time permitting, we will also implement client-side creation, deletion, and modification of features and the resulting server updates using WFS-T (Transactional).

This project depends on the Geography Markup Language (GML) project above since WFS features are returned using GML (based on XML). GML support can be considered a subset of this project or a separate project.

References

Skills: JavaScript, web services, XML, git, open standards, geospatial

Level: Intermediate

Mentor: TBA

Backup Mentor: TBA

# UI ## ~~Navigation Widget~~

Cesium provides default mouse and touch input for the camera, including: * Left click and drag - Rotates the camera around the globe in 3D and translates the camera over the map surface in 2D and Columbus view. * Right click and drag - Zooms the camera in and out. * Middle wheel scrolling - Also zooms the camera in and out. * Middle click and drag - Rotates the camera around the point on the surface of the globe.

In this project, we'll create a modern widget, potentially using SVG, to allow the user to perform these camera actions with just the left mouse button or single click. We'll also consider adding an instruction overlays demonstrating mouse and touch controls. More ideas for this project here.

The nav widget would likely include some sort of a compass, which might or might not look anything like the above.

References * Cesium Camera Tutorial

Skills: Eye for aesthetic UI design, HTML5, CSS3, SVG, JavaScript, git

Level: Intermediate

Mentor: Ed Mackey

Backup Mentor: Matt Amato - matt.amato@gmail.com

## ~~Credits Layout~~

Cesium draws content (terrain, imagery, models, etc.) from external sources that need to be credited when their content is visible as shown in the screenshot above. Depending on what content is loaded or visible, the displayed credit (image or text) can vary.

In this project, we'll design an API to mange credits and aesthetically overlay them on the 3D scene.

Skills: Eye for aesthetic UI design, JavaScript, git

Level: Novice

Mentor: Scott Hunter - scott.k.hunter@gmail.com

Backup Mentor: Ed Mackey

# Misc ## Offline Web App Support

Cesium provides a realistic virtual globe by streaming high-resolution terrain and imagery on-demand. However, users without a network connection or an unreliable network connection cannot rely on the connection to servers hosting terrain, imagery, and other data used by Cesium.

In this project, we'll use new HTML5 features to design and implement offline support in Cesium. That is, we'll let users select and download data for an area of the globe (pending the data provider's terms of use) so that users can use Cesium later without connectivity.

References

Skills: JavaScript, HTML5, git

Level: Novice

Mentor: Scott Hunter - scott.k.hunter@gmail.com

Backup Mentor: Kevin Ring - kevin@kotachrome.com


Main Google Summer of Code Page for Cesium